]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-use-unix-sockets-20070208
authorDerrick Brashear <shadow@dementia.org>
Thu, 8 Feb 2007 23:59:47 +0000 (23:59 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 8 Feb 2007 23:59:47 +0000 (23:59 +0000)
backport for 1.4.x

====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================

option to use unix socket for fssync

(cherry picked from commit a4d52ee772a84212911c52f5d79dd4f02b9a8b2a)

acinclude.m4
src/vol/fssync.c

index 54297f274c08faa755a5070a622669cef7bb824c..40d0e3207910ee752753a32c5cafabd0dca9cce8 100644 (file)
@@ -33,6 +33,8 @@ AC_ARG_ENABLE( fast-restart,
 [  --enable-fast-restart               enable fast startup of file server without salvaging],, enable_fast_restart="no")
 AC_ARG_ENABLE( bitmap-later,
 [  --enable-bitmap-later               enable fast startup of file server by not reading bitmap till needed],, enable_bitmap_later="no")
+AC_ARG_ENABLE( unix-sockets,
+[  --enable-unix-sockets               enable use of unix domain sockets for fssync],, enable_unix_sockets="yes")
 AC_ARG_ENABLE( full-vos-listvol-switch,
 [  --disable-full-vos-listvol-switch    disable vos full listvol switch for formatted output],, enable_full_vos_listvol_switch="yes")
 AC_ARG_WITH(dux-kernel-headers,
@@ -1025,6 +1027,14 @@ if test "$enable_bitmap_later" = "yes"; then
        AC_DEFINE(BITMAP_LATER, 1, [define if you want to salvager to check bitmasks later])
 fi
 
+if test "$enable_unix_sockets" = "yes"; then
+       AC_DEFINE(USE_UNIX_SOCKETS, 1, [define if you want to use UNIX sockets for fssync.])
+       USE_UNIX_SOCKETS="yes"
+else
+       USE_UNIX_SOCKETS="no"
+fi
+AC_SUBST(USE_UNIX_SOCKETS)
+
 if test "$enable_full_vos_listvol_switch" = "yes"; then
        AC_DEFINE(FULL_LISTVOL_SWITCH, 1, [define if you want to want listvol switch])
 fi
index 714aaf5feaef72ac2806f9074529621b032e553d..9655600e5450e98b74c6df1fa3876efe7fc1c9cb 100644 (file)
@@ -48,6 +48,7 @@ static int newVLDB = 1;
 
 #include <afsconfig.h>
 #include <afs/param.h>
+#include <afs/afsutil.h>
 
 RCSID
     ("$Header$");
@@ -94,6 +95,10 @@ RCSID
 #include "volume.h"
 #include "partition.h"
 
+#ifdef USE_UNIX_SOCKETS
+#include <sys/un.h>
+#endif
+
 /*@printflike@*/ extern void Log(const char *format, ...);
 
 #ifdef osi_Assert
@@ -159,7 +164,11 @@ struct Lock FSYNC_handler_lock;
 int
 FSYNC_clientInit(void)
 {
+#ifdef USE_UNIX_SOCKETS
+    struct sockaddr_un addr;
+#else /* USE_UNIX_SOCKETS */
     struct sockaddr_in addr;
+#endif /* USE_UNIX_SOCKETS */
     /* I can't believe the following is needed for localhost connections!! */
     static time_t backoff[] =
        { 3, 3, 3, 5, 5, 5, 7, 15, 16, 24, 32, 40, 48, 0 };
@@ -260,6 +269,23 @@ FSYNC_fsInit(void)
 #endif /* AFS_PTHREAD_ENV */
 }
 
+#ifdef USE_UNIX_SOCKETS
+static int
+getport(struct sockaddr_un *addr)
+{
+    int sd;
+    char tbuffer[AFSDIR_PATH_MAX]; 
+
+    strcompose(tbuffer, AFSDIR_PATH_MAX, AFSDIR_SERVER_LOCAL_DIRPATH, "/",
+               "fssync.sock", NULL);
+
+    memset(addr, 0, sizeof(*addr));
+    addr->sun_family = AF_UNIX;
+    strncpy(addr->sun_path, tbuffer, (sizeof(struct sockaddr_un) - sizeof(short)));
+    assert((sd = socket(AF_UNIX, SOCK_STREAM, 0)) >= 0);
+    return sd;
+}
+#else  /* USE_UNIX_SOCKETS */
 static int
 getport(struct sockaddr_in *addr)
 {
@@ -276,13 +302,18 @@ getport(struct sockaddr_in *addr)
 
     return sd;
 }
+#endif
 
 static fd_set FSYNC_readfds;
 
 static void
 FSYNC_sync()
 {
+#ifdef USE_UNIX_SOCKETS
+    struct sockaddr_un addr;
+#else  /* USE_UNIX_SOCKETS */
     struct sockaddr_in addr;
+#endif /* USE_UNIX_SOCKETS */
     int on = 1;
     extern VInit;
     int code;
@@ -290,6 +321,9 @@ FSYNC_sync()
 #ifdef AFS_PTHREAD_ENV
     int tid;
 #endif
+#ifdef USE_UNIX_SOCKETS
+    char tbuffer[AFSDIR_PATH_MAX]; 
+#endif
 
 #ifndef AFS_NT40_ENV
     (void)signal(SIGPIPE, SIG_IGN);
@@ -304,6 +338,13 @@ FSYNC_sync()
     Log("Set thread id %d for FSYNC_sync\n", tid);
 #endif /* AFS_PTHREAD_ENV */
 
+#ifdef USE_UNIX_SOCKETS
+    strcompose(tbuffer, AFSDIR_PATH_MAX, AFSDIR_SERVER_LOCAL_DIRPATH, "/",
+               "fssync.sock", NULL);
+    /* ignore errors */
+    remove(tbuffer);
+#endif /* USE_UNIX_SOCKETS */
+
     while (!VInit) {
        /* Let somebody else run until level > 0.  That doesn't mean that 
         * all volumes have been attached. */