From owner-freebsd-fs@FreeBSD.ORG Mon Dec 31 16:30:44 2012 Return-Path: Delivered-To: fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 10E288DB; Mon, 31 Dec 2012 16:30:44 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id 824798FC08; Mon, 31 Dec 2012 16:30:43 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.5/8.14.5) with ESMTP id qBVGUeQI050094; Mon, 31 Dec 2012 18:30:40 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.7.3 kib.kiev.ua qBVGUeQI050094 Received: (from kostik@localhost) by tom.home (8.14.5/8.14.5/Submit) id qBVGUdPA050093; Mon, 31 Dec 2012 18:30:39 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 31 Dec 2012 18:30:39 +0200 From: Konstantin Belousov To: Mateusz Guzik Subject: Re: Nandfs use of MNT_VNODE_FOREACH Message-ID: <20121231163039.GN82219@kib.kiev.ua> References: <20121227230223.GN82219@kib.kiev.ua> <20121231162145.GA29588@dft-labs.eu> <20121231162540.GB29588@dft-labs.eu> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="MgcI0aUO3vrRQI/Z" Content-Disposition: inline In-Reply-To: <20121231162540.GB29588@dft-labs.eu> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: gber@freebsd.org, cognet@freebsd.org, fs@freebsd.org, Ronald Klop X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Dec 2012 16:30:44 -0000 --MgcI0aUO3vrRQI/Z Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Dec 31, 2012 at 05:25:40PM +0100, Mateusz Guzik wrote: > On Mon, Dec 31, 2012 at 05:21:45PM +0100, Mateusz Guzik wrote: > > Can you adjust this function so that 'if (mp->mnt_syncer =3D=3D vp)' > > performs VI_UNLOCK as well? > >=20 > > Something like: > > if (mp->mnt_syncer =3D=3D vp || VOP_ISLOCKED(vp)) { > > VI_UNLOCK(mp); > > continue; > > } > >=20 > > I will have time to dig into this next week. >=20 > Err.. I meant VI_UNLOCK(vp). This is definitely a bug, thank you for noticing. Updated patch below. diff --git a/sys/fs/nandfs/nandfs_segment.c b/sys/fs/nandfs/nandfs_segment.c index 836bead..7433e77 100644 --- a/sys/fs/nandfs/nandfs_segment.c +++ b/sys/fs/nandfs/nandfs_segment.c @@ -478,39 +478,19 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, struct = nandfs_seginfo *seginfo) struct nandfs_node *nandfs_node; struct vnode *vp, *mvp; struct thread *td; - int error, lockreq, update; + int error, update; =20 td =3D curthread; - lockreq =3D LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY; =20 - MNT_ILOCK(mp); - - MNT_VNODE_FOREACH(vp, mp, mvp) { + MNT_VNODE_FOREACH_ACTIVE(vp, mp, mvp) { update =3D 0; =20 - 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 (mp->mnt_syncer =3D=3D vp || 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, LK_EXCLUSIVE | LK_INTERLOCK | LK_NOWAIT, td) !=3D 0) continue; - } =20 nandfs_node =3D VTON(vp); if (nandfs_node->nn_flags & IN_MODIFIED) { @@ -532,12 +512,8 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, struct n= andfs_seginfo *seginfo) =20 if (update) nandfs_node_update(nandfs_node); - - MNT_ILOCK(mp); } =20 - MNT_IUNLOCK(mp); - return (0); } =20 --MgcI0aUO3vrRQI/Z Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJQ4b2uAAoJEJDCuSvBvK1BirsP/j49Hr3KDA75njTYexQ25KkS UzHLOHxh2xz+NZNhxfkQpYyucW3lZfz66yozWDKUazM3JJ5rqxXr2iFhZgoEB39q ezOtmNShrobbTDMDDnd5pL+WgldLUQj24wIsMJFBoJObkoirlj9MFWmvM0mt4gqn CAdRm7VtIzaMqYjcHmyuQZD+2D4Ez0iOCPw+4E63rdeAbQN6BMiXiudiJVLa7vuS ROUe5yLwePc62X1mYIpO8OwKY6DAECDAsSMyzx0g/L8t9/i9vbmTjZKMxb9H7LWU ZlN2XFOm3VB/E4N4PPPVKZT28EP3sNdG66sFBTFeAbp0eC5wAO41hcuKAN4oTJhw GCRwSbeZ5eysxslJLoWdbI6sBK7G5cBjKrQ762oWpMbwBTFomy1qZ9zAUJodn9Yo Ga1hni+qpjV9srCLYkgV+lu722oa4XLZL6PV+0Yxr0PqzCYtitGgcqFPLhGjW3Wf UkyN2/2gM27Jse3awuzhf7I7tfiRPu6dDDuZcS5z9P/vvf1a989xMcznN4yEStpJ D41zV3bmnUkYgeXGdct5TU8U4O6zaXmFK32UZhgdlQQ2Jy3vAIQ3xxy83PsF3O2j PinHTNLFCfkv69sxgTGED6JfyAKHvSVvY6ULz7UlaZxLiokHjuREVZzUsdKN2mxT 8UYORwzW/G90namk7KaO =MCgR -----END PGP SIGNATURE----- --MgcI0aUO3vrRQI/Z--