btrfs: change error handling for btrfs_delete_*_in_log
Currently we will abort the transaction if we get a random error (like -EIO) while trying to remove the directory entries from the root log during rename. However since these are simply log tree related errors, we can mark the trans as needing a full commit. Then if the error was truly catastrophic we'll hit it during the normal commit and abort as appropriate. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
committed by
David Sterba
parent
ba51e2a11e
commit
9a35fc9542
@@ -4120,19 +4120,9 @@ skip_backref:
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = btrfs_del_inode_ref_in_log(trans, root, name, name_len, inode,
|
||||
dir_ino);
|
||||
if (ret != 0 && ret != -ENOENT) {
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = btrfs_del_dir_entries_in_log(trans, root, name, name_len, dir,
|
||||
index);
|
||||
if (ret == -ENOENT)
|
||||
ret = 0;
|
||||
else if (ret)
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
btrfs_del_inode_ref_in_log(trans, root, name, name_len, inode,
|
||||
dir_ino);
|
||||
btrfs_del_dir_entries_in_log(trans, root, name, name_len, dir, index);
|
||||
|
||||
/*
|
||||
* If we have a pending delayed iput we could end up with the final iput
|
||||
|
||||
Reference in New Issue
Block a user