Deadlock between nfsd and snapshots.

Eric Anderson anderson at centtech.com
Mon Aug 21 13:37:18 UTC 2006


On 08/21/06 08:21, Tor Egge wrote:
> I wrote:
> 
>> The deadlock indicates that one or more of IN_CHANGE, IN_MODIFIED or
>> IN_UPDATE was set on the inode, indicating a write operation
>> (e.g. VOP_WRITE(), VOP_RENAME(), VOP_CREATE(), VOP_REMOVE(), VOP_LINK(),
>> VOP_SYMLINK(), VOP_SETATTR(), VOP_MKDIR(), VOP_RMDIR(), VOP_MKNOD()) that was
>> not protected by vn_start_write() or vn_start_secondary_write().
> 
> The most common "write" operation was probably VOP_GETATTR().
> 
> ufs_itimes(), called from ufs_getattr(), might set the IN_MODIFIED inode flag
> if IN_ACCESS is set on the inode even if neither IN_CHANGE nor IN_UPDATE is
> set, transitioning the inode flags into a state where ufs_inactive() calls the
> blocking variant of vn_start_secondary_write().
> 
> calling ufs_itimes() with only a shared vnode lock might cause unsafe accesses
> to the inode flags.  Setting of IN_ACCESS at the end of ffs_read() and
> ffs_extread() might also be unsafe.  If DIRECTIO is enabled then O_DIRECT reads
> might not even attempt to set the IN_ACCESS flag.

Does this mean that setting the noatime flag on mount would dodge this?

Eric


-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------


More information about the freebsd-fs mailing list