Print this page
6843 Make xattr dir truncate and remove in one tx
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
*** 604,627 ****
*/
zfs_znode_dmu_fini(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) {
/*
! * Not enough space. Leave the file in the unlinked set.
*/
zfs_znode_dmu_fini(zp);
zfs_znode_free(zp);
return;
}
/*
* If the file has extended attributes, we're going to unlink
* the xattr dir.
*/
--- 604,633 ----
*/
zfs_znode_dmu_fini(zp);
zfs_znode_free(zp);
return;
}
! } else {
/*
! * 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.
*/
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;
}
+ }
/*
* If the file has extended attributes, we're going to unlink
* the xattr dir.
*/