Commit 79f015f2 authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues Committed by David Sterba

btrfs: cleanup extent locking sequence

Code cleanup for better understanding:
Variable needs_unlock to be called extent_locked to show state as
opposed to action. Changed the type to int, to reduce code in the
critical path.
Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 2dbe0c77
...@@ -1590,7 +1590,6 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1590,7 +1590,6 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
int ret = 0; int ret = 0;
bool only_release_metadata = false; bool only_release_metadata = false;
bool force_page_uptodate = false; bool force_page_uptodate = false;
bool need_unlock;
nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE), nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE),
PAGE_SIZE / (sizeof(struct page *))); PAGE_SIZE / (sizeof(struct page *)));
...@@ -1613,6 +1612,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1613,6 +1612,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
size_t copied; size_t copied;
size_t dirty_sectors; size_t dirty_sectors;
size_t num_sectors; size_t num_sectors;
int extents_locked;
WARN_ON(num_pages > nrptrs); WARN_ON(num_pages > nrptrs);
...@@ -1669,7 +1669,6 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1669,7 +1669,6 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
} }
release_bytes = reserve_bytes; release_bytes = reserve_bytes;
need_unlock = false;
again: again:
/* /*
* This is going to setup the pages array with the number of * This is going to setup the pages array with the number of
...@@ -1682,16 +1681,15 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1682,16 +1681,15 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
if (ret) if (ret)
break; break;
ret = lock_and_cleanup_extent_if_need(BTRFS_I(inode), pages, extents_locked = lock_and_cleanup_extent_if_need(
BTRFS_I(inode), pages,
num_pages, pos, write_bytes, &lockstart, num_pages, pos, write_bytes, &lockstart,
&lockend, &cached_state); &lockend, &cached_state);
if (ret < 0) { if (extents_locked < 0) {
if (ret == -EAGAIN) if (extents_locked == -EAGAIN)
goto again; goto again;
ret = extents_locked;
break; break;
} else if (ret > 0) {
need_unlock = true;
ret = 0;
} }
copied = btrfs_copy_from_user(pos, write_bytes, pages, i); copied = btrfs_copy_from_user(pos, write_bytes, pages, i);
...@@ -1756,7 +1754,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1756,7 +1754,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
if (copied > 0) if (copied > 0)
ret = btrfs_dirty_pages(inode, pages, dirty_pages, ret = btrfs_dirty_pages(inode, pages, dirty_pages,
pos, copied, NULL); pos, copied, NULL);
if (need_unlock) if (extents_locked)
unlock_extent_cached(&BTRFS_I(inode)->io_tree, unlock_extent_cached(&BTRFS_I(inode)->io_tree,
lockstart, lockend, &cached_state, lockstart, lockend, &cached_state,
GFP_NOFS); GFP_NOFS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment