Date: Fri, 28 Apr 2006 18:57:49 -0400 From: Alexander Kabaev <kabaev@gmail.com> To: Kostik Belousov <kostikbel@gmail.com> Cc: freebsd-fs@freebsd.org Subject: Re: vn_lock & ffs_snapremove Message-ID: <20060428185749.171da2bc@kan.dnsalias.net> In-Reply-To: <20060428130030.GC1270@deviant.kiev.zoral.com.ua> References: <20060428130030.GC1270@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_BsjT3F45573+LDgRIER.bfC Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: quoted-printable On Fri, 28 Apr 2006 16:00:30 +0300 Kostik Belousov <kostikbel@gmail.com> wrote: > Look at the two code fragments >=20 > 1. from vn_lock(9): >=20 > error =3D VOP_LOCK(vp, flags | LK_INTERLOCK, td); > flags &=3D ~LK_INTERLOCK; > KASSERT((flags & LK_RETRY) =3D=3D 0 || error =3D=3D 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 =3D=3D 0 && vp->v_iflag & VI_DOOMED && > (flags & LK_RETRY) =3D=3D 0) { > VOP_UNLOCK(vp, 0, td); > error =3D ENOENT; > break; > } >=20 > 2. ffs_snapremove(9): >=20 > (vp->v_vnlock for snapshot vnode vp points to sn_snlock) > lkp =3D vp->v_vnlock; > vp->v_vnlock =3D &vp->v_lock; >=20 > 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. >=20 > If this scenario can happen (as it seems), then, probably, > some measures like transferlockers(9) are needed ? > _______________________________________________ > freebsd-fs@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-fs > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org" =F0=D2=C9=D7=C5=D4, =D4=D5=D4 =D7=CF=DA=CE=C9=CB=CC=CF =D0=D2=C5=C4=CC=CF=D6=C5=CE=C9=C5 =CE=C1= =CB=C1=DA=C1=D4=D8 =D4=C5=C2=D1 commit bit-=CF=CD. =E9=CE=D4=C5=D2=C5=D3=D5= =C5=D4 =CD=CE=C5=CE=C9=C5 =D3=C1=CD=CF=C7=CF =CE=C1=CB=C1=DA=D5=C5=CD=CF=C7=CF =CE=C1 =DC=D4=CF =D0= =D2=C5=C4=CC=CF=D6=C5=CE=C9=C5 :) --=20 Alexander Kabaev --Sig_BsjT3F45573+LDgRIER.bfC Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (FreeBSD) iD8DBQFEUp3zQ6z1jMm+XZYRAoEWAJ9VtwZg94ZLbvmlsUPOYsxLUmfG+gCg1Zq4 ioRpw9kTRUfSlqW4KQV/hIc= =bk5j -----END PGP SIGNATURE----- --Sig_BsjT3F45573+LDgRIER.bfC--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060428185749.171da2bc>