MFV r299436: 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> Approved by: Robert Mustacchi <rm@joyent.com> Author: Chunwei Chen <tuxoko@gmail.com> openzfs/openzfs@399cc7d5d9
This commit is contained in:
commit
d7ff478705
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user