Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Nov 2007 07:28:41 +0200
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: File remove problem
Message-ID:  <20071130052840.GH83121@deviant.kiev.zoral.com.ua>
In-Reply-To: <20071130151606.F12094@delplex.bde.org>
References:  <474F4E46.8030109@nokia.com> <20071130112043.H7217@besplex.bde.org> <474F69A7.9090404@nokia.com> <20071130151606.F12094@delplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--VbfcI4OLZ4XW0yH2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Nov 30, 2007 at 03:58:55PM +1100, Bruce Evans wrote:
> On Fri, 30 Nov 2007, David Cecil wrote:
>=20
> >Thanks Bruce.
> >
> >Actually, I had found the same problem, and I came up with the first lin=
e=20
> >of your patch (adding IN_MODIFIED) myself, but I still saw the problem. =
 I
>=20
> Yes, it's not that.  Testing reminded me that there is normally a
> VOP_INACTIVE() after unlink so the IN_CHANGE mark doesn't live very long
> for unlink (it can only live long for open files).
>=20
> Testing shows that the problem is easy to reproduce and often partially
> detected before it becomes fatal.  I saw something like the following:
>=20
>     after touch a; ln a b; rm a; unmount -- no problem with 1 link remain=
ing
>     after touch a;         rm a; unmount -- no problem with unmount
>     after touch a; ln a b; rm a; mount -u o ro -- no problem with 1 link.=
..
>     after touch a;       ; rm a; mount -u o ro -- worked once without soft
>        updates but seemed to be responsible for a soft update panic later
>     after touch a;       ; rm a; mount -u o ro -- usually fails with soft
>        updates; the error is detected in various ways:
>           under ~5.2, mount -u prints "/f: update error: blocks 0 files 1"
>              but succeeds
>           under -current, mount -u fails and a subroutine prints
> 	     "softdep_waitidle: Failed to flush worklist for 0xc3e1a29c"
> 	     However, mount -u apparently cannot afford to fail at this
> 	     poing since it has committed to succeeding -- further
> 	     mount -u's and unmounts fail and it takes a reboot to reach
> 	     an fsck that can fix the problem.
>=20
> 	  mount -u seems to do some things right: at least under -current:
> 	  - it calls ffs_sync() and thus ffs_update() with waitfor !=3D 0.
> 	  - IN_MODIFIED is usually already set in ffs_update().
> 	  - softdep_update_inode_inodeblock() in ffs_update() seems to
> 	    make null changes.  That doesn't seem right -- shouldn't it
> 	    update the link count and finish removing the file?...  I
> 	    just noticed that ufs_inactive() handles some of this.
> 	  - it calls softdep_flushfiles() after doing the sync.  This
> 	    doesn't seem to touch the inode.
> 	  - apparently, softdep_flushfiles() fails in -current, while in
> 	    ~5.2 it bogusly succeeds and then code just after it is called
> 	    detects a problem but doesn't handle it.
>=20
> >didn't pick up on the need for the second line (else if (DOINGASYNC(dvp)=
)=20
> >{) though.  It's a default mount, so I don't understand how that will=20
> >help, i.e. it won't be an async mount, right?
>=20
> Ignore that.  It is for async mounts, to make them unconditionally async.
>=20
> >One more point to address Julian's question, the partition is not mounte=
d=20
> >with soft updates.
>=20
> Interesting.  I saw no sign of the problem without soft updates except a
> panic later after enabling soft updates.  I was running fsck a lot but
> may have forgotten one since no error was detected.  The problem should
> be easier to understand if it affects non-soft-updates.
>=20
> [Context lost to top posting]
>=20

As a speculation, it might be that ufs_inactive() should conditionalize on
fs_ronly instead of MNT_RDONLY. Then, VOP_INACTIVE() would set up the
IN_CHANGE|IN_UPDATE and finally call the ffs_update() ?

--VbfcI4OLZ4XW0yH2
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFHT5+IC3+MBN1Mb4gRAswwAKC91VxP7p5kWAd55ar832Zqe+YULQCfc/5T
Y3Pyj1zTUnBdjJrFx4U6gZM=
=YcGm
-----END PGP SIGNATURE-----

--VbfcI4OLZ4XW0yH2--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071130052840.GH83121>