NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/41417 (WAPBL: hang on tstile)



The following reply was made to PR kern/41417; it has been noted by GNATS.

From: buhrow%lothlorien.nfbcal.org@localhost (Brian Buhrow)
To: netbsd-bugs%netbsd.org@localhost, bouyer%antioche.eu.org@localhost, 
dholland%netbsd.org@localhost
Cc: buhrow%lothlorien.nfbcal.org@localhost
Subject: Re: kern/41417 (WAPBL: hang on tstile)
Date: Sun, 1 Apr 2012 23:43:49 -0700

        hello.  After beating on these patches for a bit longer, I've
 discovered a case where softdep gives trouble.  The problem is that
 softdep code uses the i_offset field of the inode structure as a key for
 matching a vnode buffer to a file.  These patches track all the offset data
 in the ulr structure, outside of the inode, instead.  The following second
 patch, which can be applied to the ufs_lookup.c file after you apply the
 first set of patches, copies the offset data back into the inode if we're
 doing softdep and seems to eliminate this problem entirely.
        I'm still seeing an issue with softdeps enabled when resource
 exhaustion occurs, i.e. when the system runs out of files or vnodes, but I
 suspect this issue predates this set of patches, and if I track it down and
 fix it, I'm actually fixing another latent bug which has been extent in our
 code for a while.
        Again, I hope folks are trying these patches out, because although
 NetBSD-5 is now a bit older, as far as I can tell, it's still a supported
 release until such time as NetBSD-7 comes out, and these bugs are rather
 serious, even if they don't hit everyone.
        thank you for your time, and any feedback regarding these patches is
 greatly appreciated.
 
 sincerely
 
 -Brian
 
 
 --- ufs_lookup.c       2012-04-01 23:27:15.000000000 -0700
 +++ ufs_lookup.c.good  2012-03-29 16:02:42.000000000 -0700
 @@ -803,6 +803,8 @@
  
        dp = VTOI(dvp);
        newentrysize = DIRSIZ(0, dirp, 0);
 +      if (DOINGSOFTDEP(dvp))
 +              dp->i_offset = ulr->ulr_offset; /*sofdep tags buffers withthis 
value*/
  
   #if 0
        struct ufs_lookup_results *ulr;
 


Home | Main Index | Thread Index | Old Index