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. */