svn commit: r299437 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Alexander Motin
mav at FreeBSD.org
Wed May 11 12:43:55 UTC 2016
Author: mav
Date: Wed May 11 12:43:54 2016
New Revision: 299437
URL: https://svnweb.freebsd.org/changeset/base/299437
Log:
MFV r299436: 6843 Make xattr dir truncate and remove in one tx
Reviewed by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed by: Dan McDonald <danmcd at omniti.com>
Reviewed by: Matthew Ahrens <mahrens at delphix.com>
Approved by: Robert Mustacchi <rm at joyent.com>
Author: Chunwei Chen <tuxoko at gmail.com>
openzfs/openzfs at 399cc7d5d9aff97c714b708af3e3f0280ceab93f
Modified:
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
Directory Properties:
head/sys/cddl/contrib/opensolaris/ (props changed)
Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c Wed May 11 12:39:53 2016 (r299436)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c Wed May 11 12:43:54 2016 (r299437)
@@ -611,19 +611,25 @@ zfs_rmnode(znode_t *zp)
zfs_znode_free(zp);
return;
}
- }
-
- /*
- * Free up all the data in the file.
- */
- error = dmu_free_long_range(os, zp->z_id, 0, DMU_OBJECT_END);
- if (error) {
+ } else {
/*
- * Not enough space. Leave the file in the unlinked set.
+ * Free up all the data in the file. We don't do this for
+ * XATTR directories because we need truncate and remove to be
+ * in the same tx, like in zfs_znode_delete(). Otherwise, if
+ * we crash here we'll end up with an inconsistent truncated
+ * zap object in the delete queue. Note a truncated file is
+ * harmless since it only contains user data.
*/
- zfs_znode_dmu_fini(zp);
- zfs_znode_free(zp);
- return;
+ error = dmu_free_long_range(os, zp->z_id, 0, DMU_OBJECT_END);
+ if (error) {
+ /*
+ * Not enough space. Leave the file in the unlinked
+ * set.
+ */
+ zfs_znode_dmu_fini(zp);
+ zfs_znode_free(zp);
+ return;
+ }
}
/*
More information about the svn-src-all
mailing list