vol: clear ih_synced before dropping lock
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 20 Jan 2011 06:23:37 +0000 (01:23 -0500)
committerDerrick Brashear <shadow@dementia.org>
Sat, 22 Jan 2011 20:42:26 +0000 (12:42 -0800)
in ih_reallyclose() clear ihP->ih_synced before dropped
the IH_LOCK.  ih_reallyclose() is already committed to
performing the OS_SYNC() call.  Failing to clear the ih_synced
flag before dropping the lock permits another thread, the ih_sync_all()
thread for example, to also conclude that it must sync the
file.

Change-Id: Icb928f7d2ec2342a57ed21b440ae0580c980e9d2
Reviewed-on: http://gerrit.openafs.org/3696
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/vol/ihandle.c

index e1c2ba3..1bf1958 100644 (file)
@@ -871,6 +871,7 @@ ih_reallyclose(IHandle_t * ihP)
     ihP->ih_refcnt++;   /* must not disappear over unlock */
     if (ihP->ih_synced) {
        FdHandle_t *fdP;
+        ihP->ih_synced = 0;
        IH_UNLOCK;
 
        fdP = IH_OPEN(ihP);
@@ -883,7 +884,6 @@ ih_reallyclose(IHandle_t * ihP)
     }
 
     osi_Assert(ihP->ih_refcnt > 0);
-    ihP->ih_synced = 0;
 
     ih_fdclose(ihP);