vn_lock & ffs_snapremove
Alexander Kabaev
kabaev at gmail.com
Fri Apr 28 23:06:27 UTC 2006
On Fri, 28 Apr 2006 18:57:49 -0400
Alexander Kabaev <kabaev at gmail.com> wrote:
> On Fri, 28 Apr 2006 16:00:30 +0300
> Kostik Belousov <kostikbel at gmail.com> wrote:
>
> > Look at the two code fragments
> >
> > 1. from vn_lock(9):
> >
> > error = VOP_LOCK(vp, flags | LK_INTERLOCK, td);
> > flags &= ~LK_INTERLOCK;
> > KASSERT((flags & LK_RETRY) == 0 || error == 0,
> > ("LK_RETRY set with incompatible flags %d\n",
> > flags)); /*
> > * Callers specify LK_RETRY if they wish to get dead
> > vnodes.
> > * If RETRY is not set, we return ENOENT instead.
> > */
> > if (error == 0 && vp->v_iflag & VI_DOOMED &&
> > (flags & LK_RETRY) == 0) {
> > VOP_UNLOCK(vp, 0, td);
> > error = ENOENT;
> > break;
> > }
> >
> > 2. ffs_snapremove(9):
> >
> > (vp->v_vnlock for snapshot vnode vp points to sn_snlock)
> > lkp = vp->v_vnlock;
> > vp->v_vnlock = &vp->v_lock;
> >
> > Is there anything that would prevent these two fragments to
> > intervene ? Esp. bad looks the situation where VOP_LOCK() from
> > vn_lock executed and locked doomed snapshot vnode, after that
> > ffs_snapremove replaces vnode lock and VOP_UNLOCK attempted on
> > _another_ lock.
> >
> > If this scenario can happen (as it seems), then, probably,
> > some measures like transferlockers(9) are needed ?
> > _______________________________________________
> > freebsd-fs at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> > To unsubscribe, send any mail to
> > "freebsd-fs-unsubscribe at freebsd.org"
>
> Привет,
>
> тут возникло предложение наказать тебя commit bit-ом. Интересует
> мнение самого наказуемого на это предложение :)
>
> --
> Alexander Kabaev
Sorry for wide distribution. Throw stones in my direction, please.
--
Alexander Kabaev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20060428/1112ea5e/signature.pgp
More information about the freebsd-fs
mailing list