Skip to content

Commit

Permalink
ext4: move percpu_rwsem protection into ext4_writepages()
Browse files Browse the repository at this point in the history
Move protection by percpu_rwsem from ext4_do_writepages() to
ext4_writepages(). We will not want to grab this protection during
transaction commits as that would be prone to deadlocks and the
protection is not needed. Move the shutdown state checking as well since
we want to be able to complete commit while the shutdown is in progress.

Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20221207112722.22220-7-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
  • Loading branch information
Jan Kara authored and Theodore Ts'o committed Dec 9, 2022
1 parent 15648d5 commit 29bc9ce
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions fs/ext4/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2727,10 +2727,6 @@ static int ext4_do_writepages(struct mpage_da_data *mpd)
struct blk_plug plug;
bool give_up_on_write = false;

if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
return -EIO;

percpu_down_read(&sbi->s_writepages_rwsem);
trace_ext4_writepages(inode, wbc);

/*
Expand Down Expand Up @@ -2940,20 +2936,28 @@ static int ext4_do_writepages(struct mpage_da_data *mpd)
out_writepages:
trace_ext4_writepages_result(inode, wbc, ret,
nr_to_write - wbc->nr_to_write);
percpu_up_read(&sbi->s_writepages_rwsem);
return ret;
}

static int ext4_writepages(struct address_space *mapping,
struct writeback_control *wbc)
{
struct super_block *sb = mapping->host->i_sb;
struct mpage_da_data mpd = {
.inode = mapping->host,
.wbc = wbc,
.can_map = 1,
};
int ret;

if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
return -EIO;

return ext4_do_writepages(&mpd);
percpu_down_read(&EXT4_SB(sb)->s_writepages_rwsem);
ret = ext4_do_writepages(&mpd);
percpu_up_read(&EXT4_SB(sb)->s_writepages_rwsem);

return ret;
}

static int ext4_dax_writepages(struct address_space *mapping,
Expand Down

0 comments on commit 29bc9ce

Please sign in to comment.