diff options
-rw-r--r-- | module/os/linux/zfs/zfs_dir.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/module/os/linux/zfs/zfs_dir.c b/module/os/linux/zfs/zfs_dir.c index 5150209c3..7ebf38ddb 100644 --- a/module/os/linux/zfs/zfs_dir.c +++ b/module/os/linux/zfs/zfs_dir.c @@ -739,9 +739,15 @@ zfs_rmnode(znode_t *zp) zfs_unlinked_add(xzp, tx); } - /* Remove this znode from the unlinked set */ - VERIFY3U(0, ==, - zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx)); + /* + * Remove this znode from the unlinked set. If a has rollback has + * occurred while a file is open and unlinked. Then when the file + * is closed post rollback it will not exist in the rolled back + * version of the unlinked object. + */ + error = zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, + zp->z_id, tx); + VERIFY(error == 0 || error == ENOENT); dataset_kstats_update_nunlinked_kstat(&zfsvfs->z_kstat, 1); |