DEVEL15-unroll-namei-delay-fsync-20070104
authorDerrick Brashear <shadow@dementia.org>
Fri, 5 Jan 2007 03:40:34 +0000 (03:40 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 5 Jan 2007 03:40:34 +0000 (03:40 +0000)
has been shown to cause problems with releases per haba@pdc.kth.se testing, unroll until we figure out why

(cherry picked from commit ba017be750ab667e8dc7a1dfb9e20e03ce861c14)

src/vol/clone.c
src/vol/ihandle.h
src/vol/namei_ops.c
src/vol/purge.c
src/volser/dumpstuff.c

index 137e3cc..1672515 100644 (file)
@@ -227,12 +227,6 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone)
     decRock.vol = V_parentId(rwvp);
 
     /* Read each vnode in the old volume's index file */
-    /* fsyncing the link count file for every inode has a severe 
-       performance penalty, therefore we turn it off temporarily.
-       This assumes we're the only one on that file/volume  -
-       in particular when we force the fsync later!
-    */
-    V_linkHandle(rwvp)->ih_flags|=IH_DELAY_SYNC;
     for (offset = vcp->diskSize;
         STREAM_READ(rwvnode, vcp->diskSize, 1, rwfile) == 1;
         offset += vcp->diskSize) {
@@ -353,12 +347,6 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone)
      * and shouldn't do the idecs.
      */
   error_exit:
-    /* Now take the fsync-bypass away again and force an fsync.
-       Again: assumes we're alone on this file, otherwise we need a lock!
-    */
-    V_linkHandle(rwvp)->ih_flags&=~IH_DELAY_SYNC;
-    IH_CONDSYNC(V_linkHandle(rwvp));
-
     if (rwfile)
        STREAM_CLOSE(rwfile);
     if (clfilein)
index 38d9ab3..2aee89d 100644 (file)
@@ -221,7 +221,6 @@ typedef struct IHandle_s {
 
 /* Flags for the Inode handle */
 #define IH_REALLY_CLOSED               1
-#define IH_DELAY_SYNC                  16
 
 /* Hash function for inode handles */
 #define I_HANDLE_HASH_SIZE     1024    /* power of 2 */
@@ -467,7 +466,7 @@ extern afs_sfsize_t ih_size(int fd);
 #define FDH_WRITE(H, B, S) OS_WRITE((H)->fd_fd, B, S)
 #define FDH_SEEK(H, O, F) OS_SEEK((H)->fd_fd, O, F)
 
-#define FDH_SYNC(H) ((H->fd_ih->ih_flags&IH_DELAY_SYNC) ? 0 : OS_SYNC((H)->fd_fd))
+#define FDH_SYNC(H) OS_SYNC((H)->fd_fd)
 #define FDH_TRUNC(H, L) OS_TRUNC((H)->fd_fd, L)
 #define FDH_SIZE(H) OS_SIZE((H)->fd_fd)
 
index 0b66faf..32f628a 100644 (file)
@@ -604,8 +604,6 @@ namei_icreate(IHandle_t * lh, char *part, int p1, int p2, int p3, int p4)
 
     if (p2 == -1 && p3 == VI_LINKTABLE) {
        /* hack at tmp to setup for set link count call. */
-       memset((void *)&tfd, 0, sizeof(FdHandle_t));    /* minimalistic still, but a little cleaner */
-       tfd.fd_ih = &tmp;
        tfd.fd_fd = fd;
        code = namei_SetLinkCount(&tfd, (Inode) 0, 1, 0);
     }
index 5a64b87..77695e3 100644 (file)
@@ -89,7 +89,7 @@ VPurgeVolume(Error * ec, Volume * vp)
     FSYNC_VolOp(V_id(vp), tpartp->name, FSYNC_VOL_BREAKCBKS, 0, NULL);
 }
 
-#define MAXOBLITATONCE 1000
+#define MAXOBLITATONCE 200
 /* delete a portion of an index, adjusting offset appropriately.  Returns 0 if
    things work and we should be called again, 1 if success full and done, and -1
    if an error occurred.  It adjusts offset appropriately on 0 or 1 return codes,
@@ -148,13 +148,10 @@ ObliterateRegion(Volume * avp, VnodeClass aclass, StreamHandle_t * afile,
     OS_SYNC(afile->str_fd);
 
     /* finally, do the idec's */
-    V_linkHandle(avp)->ih_flags|=IH_DELAY_SYNC;                /* severe performance penalty */
     for (i = 0; i < iindex; i++) {
        IH_DEC(V_linkHandle(avp), inodes[i], V_parentId(avp));
        DOPOLL;
     }
-    V_linkHandle(avp)->ih_flags&=~IH_DELAY_SYNC;
-    IH_CONDSYNC(V_linkHandle(avp));
 
     /* return the new offset */
     *aoffset = offset;
index f39f158..764a245 100644 (file)
@@ -1072,13 +1072,7 @@ RestoreVolume(register struct rx_call *call, Volume * avp, int incremental,
 
     tdelo = delo;
     while (1) {
-       int temprc;
-
-       V_linkHandle(avp)->ih_flags |= IH_DELAY_SYNC;   /* Avoid repetitive fdsync()s on linkfile */
-       temprc = ReadVnodes(iodp, vp, 0, b1, s1, b2, s2, tdelo);
-       V_linkHandle(avp)->ih_flags &= ~IH_DELAY_SYNC;  /* normal sync behaviour again */
-       IH_CONDSYNC(V_linkHandle(avp));                 /* sync link file */
-       if (temprc) {
+       if (ReadVnodes(iodp, vp, 0, b1, s1, b2, s2, tdelo)) {
            error = VOLSERREAD_DUMPERROR;
            goto clean;
        }