From 8923e68d0a001666be4a1706877c2329bd5c032f Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 5 Jan 2007 03:40:34 +0000 Subject: [PATCH] DEVEL15-unroll-namei-delay-fsync-20070104 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 | 12 ------------ src/vol/ihandle.h | 3 +-- src/vol/namei_ops.c | 2 -- src/vol/purge.c | 5 +---- src/volser/dumpstuff.c | 8 +------- 5 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/vol/clone.c b/src/vol/clone.c index 137e3ccbb..1672515aa 100644 --- a/src/vol/clone.c +++ b/src/vol/clone.c @@ -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) diff --git a/src/vol/ihandle.h b/src/vol/ihandle.h index 38d9ab30b..2aee89da5 100644 --- a/src/vol/ihandle.h +++ b/src/vol/ihandle.h @@ -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) diff --git a/src/vol/namei_ops.c b/src/vol/namei_ops.c index 0b66faf9b..32f628ab2 100644 --- a/src/vol/namei_ops.c +++ b/src/vol/namei_ops.c @@ -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); } diff --git a/src/vol/purge.c b/src/vol/purge.c index 5a64b87d8..77695e390 100644 --- a/src/vol/purge.c +++ b/src/vol/purge.c @@ -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; diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c index f39f158b2..764a2459a 100644 --- a/src/volser/dumpstuff.c +++ b/src/volser/dumpstuff.c @@ -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; } -- 2.39.5