acquire-fsync-lock-inside-while-loop-20040202
[openafs.git] / src / viced / viced.c
index 91a104a..68b76bd 100644 (file)
@@ -95,6 +95,17 @@ RCSID
 #endif
 #include <rx/rx_globals.h>
 
+#ifdef O_LARGEFILE
+#define afs_stat       stat64
+#define afs_fstat      fstat64
+#define afs_open       open64
+#define afs_fopen      fopen64
+#else /* !O_LARGEFILE */
+#define afs_stat       stat
+#define afs_fstat      fstat
+#define afs_open       open
+#define afs_fopen      fopen
+#endif /* !O_LARGEFILE */
 
 extern int BreakVolumeCallBacks(), InitCallBack();
 extern int BreakVolumeCallBacks(), InitCallBack(), BreakLaterCallBacks();
@@ -109,6 +120,7 @@ static void CheckSignal(void);
 extern int GetKeysFromToken();
 extern int RXAFS_ExecuteRequest();
 extern int RXSTATS_ExecuteRequest();
+afs_int32 Do_VLRegisterRPC();
 
 int eventlog = 0, rxlog = 0;
 FILE *debugFile;
@@ -208,11 +220,11 @@ static void
 CheckDescriptors()
 {
 #ifndef AFS_NT40_ENV
-    struct stat status;
+    struct afs_stat status;
     register int tsize = getdtablesize();
     register int i;
     for (i = 0; i < tsize; i++) {
-       if (fstat(i, &status) != -1) {
+       if (afs_fstat(i, &status) != -1) {
            printf("%d: dev %x, inode %u, length %u, type/mode %x\n", i,
                   status.st_dev, status.st_ino, status.st_size,
                   status.st_mode);
@@ -298,7 +310,7 @@ ResetCheckDescriptors(void)
 #if defined(AFS_PTHREAD_ENV)
     softsig_signal(SIGTERM, CheckDescriptors_Signal);
 #else
-    signal(SIGTERM, CheckDescriptors_Signal);
+    (void)signal(SIGTERM, CheckDescriptors_Signal);
 #endif
 #endif
 }
@@ -354,12 +366,12 @@ static void
 CheckAdminName()
 {
     int fd = 0;
-    struct stat status;
+    struct afs_stat status;
 
-    if ((stat("/AdminName", &status)) ||       /* if file does not exist */
+    if ((afs_stat("/AdminName", &status)) ||   /* if file does not exist */
        (status.st_size <= 0) ||        /* or it is too short */
        (status.st_size >= (MAXADMINNAME)) ||   /* or it is too long */
-       !(fd = open("/AdminName", O_RDONLY, 0))) {      /* or the open fails */
+       !(fd = afs_open("/AdminName", O_RDONLY, 0))) {  /* or the open fails */
        strcpy(adminName, "System:Administrators");     /* use the default name */
     } else {
        (void)read(fd, adminName, status.st_size);      /* use name from the file */
@@ -412,7 +424,7 @@ FiveMinuteCheckLWP()
            Do_VLRegisterRPC();
        /* Force wakeup in case we missed something; pthreads does timedwait */
 #ifndef AFS_PTHREAD_ENV
-       LWP_NoYieldSignal(&fsync_wait);
+       LWP_NoYieldSignal(fsync_wait);
 #endif
        if (printBanner && (++msg & 1)) {       /* Every 10 minutes */
            time_t now = FT_ApproxTime();
@@ -470,8 +482,8 @@ FsyncCheckLWP()
     assert(pthread_mutex_init(&fsync_glock_mutex, NULL) == 0);
 #endif
 
-    FSYNC_LOCK;
     while (1) {
+       FSYNC_LOCK;
 #ifdef AFS_PTHREAD_ENV
        /* rounding is fine */
        fsync_next.tv_nsec = 0;
@@ -483,9 +495,10 @@ FsyncCheckLWP()
        if (code != 0 && code != ETIMEDOUT)
            ViceLog(0, ("pthread_cond_timedwait returned %d\n", code));
 #else /* AFS_PTHREAD_ENV */
-       if ((code = LWP_WaitProcess(&fsync_wait)) != LWP_SUCCESS)
+       if ((code = LWP_WaitProcess(fsync_wait)) != LWP_SUCCESS)
            ViceLog(0, ("LWP_WaitProcess returned %d\n", code));
 #endif /* AFS_PTHREAD_ENV */
+       FSYNC_UNLOCK;
        ViceLog(2, ("Checking for fsync events\n"));
        do {
            code = BreakLaterCallBacks();
@@ -627,7 +640,6 @@ void
 ShutDownAndCore(int dopanic)
 {
     time_t now = time(0);
-    char *tstr;
     char tbuffer[32];
 
     ViceLog(0,
@@ -1049,17 +1061,17 @@ ParseArgs(int argc, char *argv[])
 static void
 NewParms(int initializing)
 {
-    static struct stat sbuf;
+    static struct afs_stat sbuf;
     register int i, fd;
     char *parms;
     char *argv[MAXPARMS];
     register int argc;
 
-    if (!(stat("/vice/file/parms", &sbuf))) {
+    if (!(afs_stat("/vice/file/parms", &sbuf))) {
        parms = (char *)malloc(sbuf.st_size);
        if (!parms)
            return;
-       fd = open("parms", O_RDONLY, 0666);
+       fd = afs_open("parms", O_RDONLY, 0666);
        if (fd <= 0) {
            ViceLog(0, ("Open for parms failed with errno = %d\n", errno));
            return;
@@ -1220,15 +1232,15 @@ ReadSysIdFile()
 {
     afs_int32 fd, nentries, i;
     struct versionStamp vsn;
-    struct stat status;
+    struct afs_stat status;
     afsUUID uuid;
 
-    if ((stat(AFSDIR_SERVER_SYSID_FILEPATH, &status))
+    if ((afs_stat(AFSDIR_SERVER_SYSID_FILEPATH, &status))
        || (status.st_size <= 0)) {
        ViceLog(0, ("%s: doesn't exist\n", AFSDIR_SERVER_SYSID_FILEPATH));
        return ENOENT;
     }
-    if (!(fd = open(AFSDIR_SERVER_SYSID_FILEPATH, O_RDONLY, 0))) {
+    if (!(fd = afs_open(AFSDIR_SERVER_SYSID_FILEPATH, O_RDONLY, 0))) {
        ViceLog(0,
                ("%s: can't open (%d)\n", AFSDIR_SERVER_SYSID_FILEPATH,
                 errno));
@@ -1294,20 +1306,20 @@ ReadSysIdFile()
 afs_int32
 WriteSysIdFile()
 {
-    afs_int32 fd, nentries, i;
+    afs_int32 fd, i;
     struct versionStamp vsn;
-    struct stat status;
+    struct afs_stat status;
     afsUUID uuid;
 
-    if (!stat(AFSDIR_SERVER_SYSID_FILEPATH, &status)) {
+    if (!afs_stat(AFSDIR_SERVER_SYSID_FILEPATH, &status)) {
        /*
         * File exists; keep the old one around
         */
        renamefile(AFSDIR_SERVER_SYSID_FILEPATH,
                   AFSDIR_SERVER_OLDSYSID_FILEPATH);
     }
-    fd = open(AFSDIR_SERVER_SYSID_FILEPATH, O_WRONLY | O_TRUNC | O_CREAT,
-             0666);
+    fd = afs_open(AFSDIR_SERVER_SYSID_FILEPATH, O_WRONLY | O_TRUNC | O_CREAT,
+                 0666);
     if (fd < 1) {
        ViceLog(0,
                ("%s: can't create (%d)\n", AFSDIR_SERVER_SYSID_FILEPATH,
@@ -1401,9 +1413,7 @@ Do_VLRegisterRPC()
 afs_int32
 InitVL()
 {
-    int (*old) ();
     afs_int32 code;
-    afs_int32 cnt, i;
     extern int rxi_numNetAddrs;
     extern afs_uint32 rxi_NetAddrs[];
 
@@ -1464,14 +1474,12 @@ InitVL()
 int
 main(int argc, char *argv[])
 {
-    int i;
     afs_int32 code;
-    FILE *file;
     char tbuffer[32];
     struct rx_securityClass *sc[4];
     struct rx_service *tservice;
 #ifdef AFS_PTHREAD_ENV
-    pthread_t parentPid, serverPid;
+    pthread_t serverPid;
     pthread_attr_t tattr;
 #else /* AFS_PTHREAD_ENV */
     PROCESS parentPid, serverPid;
@@ -1503,7 +1511,7 @@ main(int argc, char *argv[])
        exit(2);
     }
 #ifndef AFS_QUIETFS_ENV
-    console = fopen("/dev/console", "w");
+    console = afs_fopen("/dev/console", "w");
 #endif
 
     if (ParseArgs(argc, argv)) {
@@ -1531,7 +1539,9 @@ main(int argc, char *argv[])
     NewParms(1);
 
     /* Open FileLog on stdout, stderr, fd 1 and fd2 (for perror), sigh. */
+#ifndef AFS_NT40_ENV
     serverLogSyslogTag = "fileserver";
+#endif
     OpenLog(AFSDIR_SERVER_FILELOG_FILEPATH);
     SetupLogSignals();
 
@@ -1654,11 +1664,11 @@ main(int argc, char *argv[])
     sc[1] = 0;                 /* rxvab_NewServerSecurityObject(key1, 0) */
     sc[2] = rxkad_NewServerSecurityObject(rxkad_clear, NULL, get_key, NULL);
     sc[3] = rxkad_NewServerSecurityObject(rxkad_crypt, NULL, get_key, NULL);
-    tservice =
-       rx_NewService( /* port */ 0, /* service id */ 1, /*service name */
-                     "AFS",
-                     /* security classes */ sc, /* numb sec classes */ 4,
-                     RXAFS_ExecuteRequest);
+    tservice = rx_NewService( /* port */ 0, /* service id */ 1,        /*service name */
+                            "AFS",
+                                                       /* security classes */ sc,
+                                                       /* numb sec classes */
+                            4, RXAFS_ExecuteRequest);
     if (!tservice) {
        ViceLog(0,
                ("Failed to initialize RX, probably two servers running.\n"));
@@ -1688,7 +1698,7 @@ main(int argc, char *argv[])
 
     /* Some rx debugging */
     if (rxlog || eventlog) {
-       debugFile = fopen("rx_dbg", "w");
+       debugFile = afs_fopen("rx_dbg", "w");
        if (rxlog)
            rx_debugFile = debugFile;
        if (eventlog)
@@ -1807,7 +1817,7 @@ main(int argc, char *argv[])
     } else {
        char hoststr[16];
        memcpy(&FS_HostAddr_NBO, he->h_addr, 4);
-       afs_inet_ntoa_r(FS_HostAddr_NBO, hoststr);
+       (void)afs_inet_ntoa_r(FS_HostAddr_NBO, hoststr);
        FS_HostAddr_HBO = ntohl(FS_HostAddr_NBO);
        ViceLog(0,
                ("FileServer %s has address %s (0x%x or 0x%x in host byte order)\n",
@@ -1820,7 +1830,7 @@ main(int argc, char *argv[])
 #if defined(AFS_PTHREAD_ENV) && !defined(AFS_NT40_ENV)
     softsig_signal(SIGQUIT, ShutDown_Signal);
 #else
-    signal(SIGQUIT, ShutDown_Signal);
+    (void)signal(SIGQUIT, ShutDown_Signal);
 #endif
 
     ViceLog(0,