diff options
author | Christoph Hellwig <hch@lst.de> | 2023-01-16 09:52:05 +0100 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2023-01-16 12:19:25 +0100 |
commit | 7a5fa171a2869e99fe38f61c60274e7b4bf3a5e0 (patch) | |
tree | a4af997693c04d6d156a8a55425862910104af12 /fs/ext2/namei.c | |
parent | 1fb40763a58c1f8130c0131c624060c6bbb929b8 (diff) | |
download | linux-stable-7a5fa171a2869e99fe38f61c60274e7b4bf3a5e0.tar.gz linux-stable-7a5fa171a2869e99fe38f61c60274e7b4bf3a5e0.tar.bz2 linux-stable-7a5fa171a2869e99fe38f61c60274e7b4bf3a5e0.zip |
ext2: propagate errors from ext2_prepare_chunk
Propagate errors from ext2_prepare_chunk to the callers and handle them
there. While touching the prototype also turn update_times into a bool
from the current int used as bool.
[JK: fixed up error recovery path in ext2_rename()]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20230116085205.2342975-1-hch@lst.de>
Diffstat (limited to 'fs/ext2/namei.c')
-rw-r--r-- | fs/ext2/namei.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index c056957221a2..9805bc3ee80b 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -370,8 +370,11 @@ static int ext2_rename (struct user_namespace * mnt_userns, err = PTR_ERR(new_de); goto out_dir; } - ext2_set_link(new_dir, new_de, new_page, page_addr, old_inode, 1); + err = ext2_set_link(new_dir, new_de, new_page, page_addr, + old_inode, true); ext2_put_page(new_page, page_addr); + if (err) + goto out_dir; new_inode->i_ctime = current_time(new_inode); if (dir_de) drop_nlink(new_inode); @@ -394,24 +397,24 @@ static int ext2_rename (struct user_namespace * mnt_userns, ext2_delete_entry(old_de, old_page, old_page_addr); if (dir_de) { - if (old_dir != new_dir) - ext2_set_link(old_inode, dir_de, dir_page, - dir_page_addr, new_dir, 0); + if (old_dir != new_dir) { + err = ext2_set_link(old_inode, dir_de, dir_page, + dir_page_addr, new_dir, false); + } ext2_put_page(dir_page, dir_page_addr); inode_dec_link_count(old_dir); } +out_old: ext2_put_page(old_page, old_page_addr); - return 0; +out: + return err; out_dir: if (dir_de) ext2_put_page(dir_page, dir_page_addr); -out_old: - ext2_put_page(old_page, old_page_addr); -out: - return err; + goto out_old; } const struct inode_operations ext2_dir_inode_operations = { |