Skip to content

Commit

Permalink
btrfs: make balance_dirty_pages nowait compatible
Browse files Browse the repository at this point in the history
This replaces the call to function balance_dirty_pages_ratelimited() in
the function btrfs_buffered_write() with a call to
balance_dirty_pages_ratelimited_flags().

It also moves the function after the again label. This can cause the
function to be called a bit later, but this should have no impact in the
real world.

Signed-off-by: Stefan Roesch <shr@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Stefan Roesch authored and kdave committed Sep 6, 2022
1 parent 750b219 commit 1451036
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions fs/btrfs/file.c
Expand Up @@ -1654,6 +1654,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
loff_t old_isize = i_size_read(inode);
unsigned int ilock_flags = 0;
bool nowait = iocb->ki_flags & IOCB_NOWAIT;
unsigned int bdp_flags = nowait ? BDP_ASYNC : 0;

if (nowait)
ilock_flags |= BTRFS_ILOCK_TRY;
Expand Down Expand Up @@ -1756,6 +1757,10 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,

release_bytes = reserve_bytes;
again:
ret = balance_dirty_pages_ratelimited_flags(inode->i_mapping, bdp_flags);
if (unlikely(ret))
break;

/*
* This is going to setup the pages array with the number of
* pages we want, so we don't really need to worry about the
Expand Down Expand Up @@ -1860,8 +1865,6 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,

cond_resched();

balance_dirty_pages_ratelimited(inode->i_mapping);

pos += copied;
num_written += copied;
}
Expand Down

0 comments on commit 1451036

Please sign in to comment.