RFC: adding a lock flags argument to VFS_FHTOVP() for FreeBSD9
Rick Macklem
rmacklem at uoguelph.ca
Wed May 18 20:37:40 UTC 2011
> Yes, the flag to specify the locking mode does only specify the
> minimal
> locking requirements, and filesystem is allowed to upgrade it to the
> more strict lock type. E.g. UFS would only return shared lock if the
> vnode was found in hash, AFAIR. If not told otherwise, getnewvnode(9)
> forces lockmgr to convert all lock requests into exclusive.
>
That's exactly what UFS does, but I did notice some inconsistencies
w.r.t. the various file systems.
For VFS_VGET(), ffs/cd9660/udf do basically the following:
1 error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
...
2 if ((flags & LK_TYPE_MASK) == LK_SHARED) {
flags &= ~LK_TYPE_MASK;
flags |= LK_EXCLUSIVE;
}
...
3 lockmgr(vp->v_vnlock, LK_EXCLUSIVE, NULL);
...
4 error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
but hpfs/ext2fs do something similar to the above, except
they omit step #2. (ie. They would do #4 with LK_SHARED, if
that was what flags is passed in as.)
Looking at vfs_hash_insert(), the "flags" argument is just
used for vget(), so it isn't obvious to me if it needs to
be LK_EXCLUSIVE or not.
So, does anyone know if this depend on the file system or are hpfs/ext2fs
broken?
Thanks in advance for any help with this, rick
ps: Fortunately, for my patch, I can just ignore the "flags"
argument for VFS_FHTOVP() for the file systems I'm not
sure about, so they'll just return LK_EXCLUSIVE locked
vnodes.
More information about the freebsd-fs
mailing list