Date: Thu, 4 Jul 2013 11:36:41 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Steven Hartland <smh@freebsd.org> Cc: freebsd-fs@FreeBSD.org Subject: Re: kern/180236: [zfs] [nullfs] Leakage free space using ZFS with nullfs on 9.1-STABLE Message-ID: <20130704083641.GK91021@kib.kiev.ua> In-Reply-To: <20130704041539.GE91021@kib.kiev.ua> References: <201307040000.r64001v6076818@freefall.freebsd.org> <20130704041539.GE91021@kib.kiev.ua>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
On Thu, Jul 04, 2013 at 07:15:39AM +0300, Konstantin Belousov wrote:
> On Thu, Jul 04, 2013 at 12:00:01AM +0000, Steven Hartland wrote:
> > The following reply was made to PR kern/180236; it has been noted by GNATS.
> >
> > From: "Steven Hartland" <smh@freebsd.org>
> > To: <bug-followup@freebsd.org>,
> > "Ivan Klymenko" <fidaj@ukr.net>
> > Cc:
> > Subject: Re: kern/180236: [zfs] [nullfs] Leakage free space using ZFS with nullfs on 9.1-STABLE
> > Date: Thu, 4 Jul 2013 00:58:13 +0100
> >
> > Looks like nullfs isn't cleaning up correctly in the case
> > where a rename colides with an existing file hence results
> > in an implicit remove.
> >
> > This can be seen in the zdb output for the volume in that
> > before the unmount all the plain file entries still exist
> > but after the unmount of nullfs they are gone.
>
> Can you demonstrate the scenario of the problem, e.g. using the basic
> filesystem commands, like cp(1), mv(1) ? Does the issue reproduce
> on UFS ?
Ok, the following patch fixed the nullfs leakage for me (I tested over
the UFS).
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c
index 6ff15ee..70402e3 100644
--- a/sys/fs/nullfs/null_vnops.c
+++ b/sys/fs/nullfs/null_vnops.c
@@ -554,6 +554,7 @@ null_rename(struct vop_rename_args *ap)
struct vnode *fvp = ap->a_fvp;
struct vnode *fdvp = ap->a_fdvp;
struct vnode *tvp = ap->a_tvp;
+ struct null_node *tnn;
/* Check for cross-device rename. */
if ((fvp->v_mount != tdvp->v_mount) ||
@@ -568,7 +569,11 @@ null_rename(struct vop_rename_args *ap)
vrele(fvp);
return (EXDEV);
}
-
+
+ if (tvp != NULL) {
+ tnn = VTONULL(tvp);
+ tnn->null_flags |= NULLV_DROP;
+ }
return (null_bypass((struct vop_generic_args *)ap));
}
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (FreeBSD)
iQIcBAEBAgAGBQJR1TQYAAoJEJDCuSvBvK1BLM0P/RH3l/YrW66st4j+KyukGcn7
6p57DZVhVPjPLNNlDBamlk94rwgSq5dQ4pIl1o7U+NVunjyopv4kobzfrgYC1cdW
rOvYfoTC1VPchiETmoCtZeJgNzXGIuGkotR3Kh8ELeN83mJAeAiyCTmyt4S5Axly
BIsjEbyghXruoq7NPZUA9Rqm4Rgn2YrF5PDwB0X12AY7u+qtuxALjc80TUyfeD9z
5P0iuHizjVGRmkCYJxHFYPHI/ggiZEZjC+oBQkC7gHuPeUpeT62mkrmL6UXokmdi
ScV2ibI87byZu9nC7PEiD8eNsj9tYCmdcuVs9bDZOnrXVvS5lQmDFVmO97WrMZdo
FLtfKwapN2lR0lguVuta785wrSkSzyMN+vLFjacJTgZc/vHEHHhPSFrrY/02ZZGJ
jOj5DjbWGjobNzkJSpCg6ZDKr13F6TaW9XkTpCI9+w+wmLw19vv0KS5ULGAmBLi5
U9to+opTC0c7fqOYsD7E87ef9P5qm6v8ON/+OT8Q746mlSKDxO5gmflHPo107QHk
IsLUEEVIuFksbHP5u1Iob4Uj6OxRgC39eRaw0ePbYMYbE+S5iZpTAUgiqkhNNVLr
wQnjWEnzriyehRcW8xGbkd8ju3xq24w76t6bfPN5xTKXAQam5Dzg8KJTOWg97By8
NPMeC4sH3/FlB7GmxqCD
=jkkk
-----END PGP SIGNATURE-----
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130704083641.GK91021>
