Date: Sun, 30 Dec 2012 16:58:13 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: Ronald Klop <ronald-freebsd8@klop.yi.org> Cc: gber@freebsd.org, cognet@freebsd.org, fs@freebsd.org Subject: Re: Nandfs use of MNT_VNODE_FOREACH Message-ID: <20121230145813.GI82219@kib.kiev.ua> In-Reply-To: <op.wp4w3fj58527sy@pinky> References: <20121227230223.GN82219@kib.kiev.ua> <op.wp4w3fj58527sy@pinky>
next in thread | previous in thread | raw e-mail | index | archive | help
--i6ZTfQE1Row3TVml Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, Dec 30, 2012 at 03:55:53PM +0100, Ronald Klop wrote: > I'm building a patched kernel for my sheevaplug now which reads the kerne= l =20 > from nand and has / mounted from nandfs. > What should be tested specifically? Just booting from it? I suspect that a writeable mount with some / enough write activity is good for the test. Thank you. >=20 > Ronald. >=20 > On Fri, 28 Dec 2012 00:02:23 +0100, Konstantin Belousov =20 > <kostikbel@gmail.com> wrote: >=20 > > I took a look at removing MNT_VNODE_FOREACH interface in the HEAD, > > and apparently we still have one user of the said interface, probably, > > due to cross-commits. > > > > Namely, nandfs utilizes the interface. First, it is obsoleted and > > is going to be removed. Second, I believe that MNT_VNODE_FOREACH_ACTIVE > > would be better choice there, because intent of the loop is to do > > something with each dirty vnode, and dirty vnode must be active, because > > there are dirty buffers attached to it. > > > > That said, use of vget(LK_RETRY) and immediate check for VI_DOOMED > > is not useful, I removed the LK_RETRY from the lockflags. Another issue= =20 > > is > > that intent was to avoid sleep for locked vnode, but the check is racy. > > I used LK_NOWAIT instead. > > > > Check for mnt_syncer is also usually done as vp->v_type =3D=3D VNON, but > > lets postpone this. > > > > Could someone who uses the filesystem test the patch below, please ? > > > > diff --git a/sys/fs/nandfs/nandfs_segment.c =20 > > b/sys/fs/nandfs/nandfs_segment.c > > index 836bead..a73b7f2 100644 > > --- a/sys/fs/nandfs/nandfs_segment.c > > +++ b/sys/fs/nandfs/nandfs_segment.c > > @@ -481,36 +481,20 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, =20 > > struct nandfs_seginfo *seginfo) > > int error, lockreq, update; > > td =3D curthread; > > - lockreq =3D LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY; > > + lockreq =3D LK_EXCLUSIVE | LK_INTERLOCK; > > - MNT_ILOCK(mp); > > - > > - MNT_VNODE_FOREACH(vp, mp, mvp) { > > + MNT_VNODE_FOREACH_ACTIVE(vp, mp, mvp) { > > update =3D 0; > > if (mp->mnt_syncer =3D=3D vp) > > continue; > > - if (VOP_ISLOCKED(vp)) > > - continue; > > - > > - VI_LOCK(vp); > > - MNT_IUNLOCK(mp); > > - if (vp->v_iflag & VI_DOOMED) { > > + if (VOP_ISLOCKED(vp)) { > > VI_UNLOCK(vp); > > - MNT_ILOCK(mp); > > - continue; > > - } > > - > > - if ((error =3D vget(vp, lockreq, td)) !=3D 0) { > > - MNT_ILOCK(mp); > > continue; > > } > > - if (vp->v_iflag & VI_DOOMED) { > > - vput(vp); > > - MNT_ILOCK(mp); > > + if (vget(vp, lockreq, td) !=3D 0) > > continue; > > - } > > nandfs_node =3D VTON(vp); > > if (nandfs_node->nn_flags & IN_MODIFIED) { > > @@ -532,12 +516,8 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, =20 > > struct nandfs_seginfo *seginfo) > > if (update) > > nandfs_node_update(nandfs_node); > > - > > - MNT_ILOCK(mp); > > } > > - MNT_IUNLOCK(mp); > > - > > return (0); > > } --i6ZTfQE1Row3TVml Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJQ4FaFAAoJEJDCuSvBvK1BdzIP/R9pHUDfStuweLrY1grLfGZ3 VjmSNhL7J9rTsslmRJCh1cdVhmBR5fdWOr+Gcm7ZMrxPwb+Qh6MVUv1ng8qMLc7p REKHX+QbzLBCJtYBd76DkChchBrIzi5rDN9b3XS40XbKBwepSbiRKFNtcz0++oXI 2ldMDEqB1GAq6G2IrNopGDCREkWp/wkIJkh4v/kGNN3+DOhoh2P1C0ENLn0tJ8lg FwhqEG5ALFc/sKBqdKK3Fpi61jkQ2U7rw8u9v04L2brddUH7bluaIYLMzivr9hfJ lkg4u2gNCx0sIE+3C2YwkGIblJ8m7dLOOTq/AzHzZNhv0WgGD6CSq8r9fTAmNdVg Ekwd8Jyi24l48FQOdHCrJ6bXWX8WEo1sXDw4SJaBRJ26pKXhNPdhCyhEsaaNwta3 MVz9y850c4r9W1ljZZbB4OkqGLyCYFEpT3c+Qmeh5DUw3Scd5cFfSmGl6biAJgxk 1TGFE5GObplpDHUhaKRm5fjXl7uOKr+vcSRByqzJODPGaeZb3XIQGjZumzZU6SZs yffwVVj+1BQqPwaesKnsHrh/JRgmjJNYjiOCScnY9xyZi4g3QMJB/l7qtFPrqGwW AODtC/GzCdO/1OEDP5IiU1QAbd6t2ulDLKCX1JsLilqChqalt3JYmz9Ft9yoPBaZ /xPbKqk0hea5UMEiVki4 =Pnie -----END PGP SIGNATURE----- --i6ZTfQE1Row3TVml--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121230145813.GI82219>