From f8f7da2b3ac046ec1990b07e15ebb0380749e136 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 8 Feb 2007 23:59:47 +0000 Subject: [PATCH] STABLE14-use-unix-sockets-20070208 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 | 10 ++++++++++ src/vol/fssync.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index 54297f274..40d0e3207 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -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 diff --git a/src/vol/fssync.c b/src/vol/fssync.c index 714aaf5fe..9655600e5 100644 --- a/src/vol/fssync.c +++ b/src/vol/fssync.c @@ -48,6 +48,7 @@ static int newVLDB = 1; #include #include +#include RCSID ("$Header$"); @@ -94,6 +95,10 @@ RCSID #include "volume.h" #include "partition.h" +#ifdef USE_UNIX_SOCKETS +#include +#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. */ -- 2.39.5