* [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write()
@ 2020-09-25 20:36 Goldwyn Rodrigues
2020-10-05 13:10 ` Josef Bacik
2020-10-14 13:08 ` David Sterba
0 siblings, 2 replies; 3+ messages in thread
From: Goldwyn Rodrigues @ 2020-09-25 20:36 UTC (permalink / raw)
To: linux-btrfs; +Cc: Goldwyn Rodrigues
From: Goldwyn Rodrigues <rgoldwyn@suse.com>
Cleanup.
write_bytes can change in btrfs_check_nocow_lock(). Calculate variables
such as num_pages and reserve_bytes once we are sure of the value of
write_bytes so there is no need to re-calculate.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
---
fs/btrfs/file.c | 34 ++++++++++++----------------------
1 file changed, 12 insertions(+), 22 deletions(-)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 038e0afaf3d0..7695988fdba3 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1648,8 +1648,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
size_t write_bytes = min(iov_iter_count(i),
nrptrs * (size_t)PAGE_SIZE -
offset);
- size_t num_pages = DIV_ROUND_UP(write_bytes + offset,
- PAGE_SIZE);
+ size_t num_pages;
size_t reserve_bytes;
size_t dirty_pages;
size_t copied;
@@ -1657,8 +1656,6 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
size_t num_sectors;
int extents_locked;
- WARN_ON(num_pages > nrptrs);
-
/*
* Fault pages before locking them in prepare_pages
* to avoid recursive lock
@@ -1670,35 +1667,28 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
only_release_metadata = false;
sector_offset = pos & (fs_info->sectorsize - 1);
- reserve_bytes = round_up(write_bytes + sector_offset,
- fs_info->sectorsize);
extent_changeset_release(data_reserved);
ret = btrfs_check_data_free_space(BTRFS_I(inode),
&data_reserved, pos,
write_bytes);
if (ret < 0) {
+ /*
+ * If we don't have to cow at the offset, reserve
+ * metadata only. write_bytes may get smaller
+ * than requested here.
+ */
if (btrfs_check_nocow_lock(BTRFS_I(inode), pos,
- &write_bytes) > 0) {
- /*
- * For nodata cow case, no need to reserve
- * data space.
- */
+ &write_bytes) > 0)
only_release_metadata = true;
- /*
- * our prealloc extent may be smaller than
- * write_bytes, so scale down.
- */
- num_pages = DIV_ROUND_UP(write_bytes + offset,
- PAGE_SIZE);
- reserve_bytes = round_up(write_bytes +
- sector_offset,
- fs_info->sectorsize);
- } else {
+ else
break;
- }
}
+ num_pages = DIV_ROUND_UP(write_bytes + offset, PAGE_SIZE);
+ WARN_ON(num_pages > nrptrs);
+ reserve_bytes = round_up(write_bytes + sector_offset,
+ fs_info->sectorsize);
WARN_ON(reserve_bytes == 0);
ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
reserve_bytes);
--
2.26.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write()
2020-09-25 20:36 [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write() Goldwyn Rodrigues
@ 2020-10-05 13:10 ` Josef Bacik
2020-10-14 13:08 ` David Sterba
1 sibling, 0 replies; 3+ messages in thread
From: Josef Bacik @ 2020-10-05 13:10 UTC (permalink / raw)
To: Goldwyn Rodrigues, linux-btrfs; +Cc: Goldwyn Rodrigues
On 9/25/20 4:36 PM, Goldwyn Rodrigues wrote:
> From: Goldwyn Rodrigues <rgoldwyn@suse.com>
>
> Cleanup.
>
> write_bytes can change in btrfs_check_nocow_lock(). Calculate variables
> such as num_pages and reserve_bytes once we are sure of the value of
> write_bytes so there is no need to re-calculate.
>
> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Thanks,
Josef
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write()
2020-09-25 20:36 [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write() Goldwyn Rodrigues
2020-10-05 13:10 ` Josef Bacik
@ 2020-10-14 13:08 ` David Sterba
1 sibling, 0 replies; 3+ messages in thread
From: David Sterba @ 2020-10-14 13:08 UTC (permalink / raw)
To: Goldwyn Rodrigues; +Cc: linux-btrfs, Goldwyn Rodrigues
On Fri, Sep 25, 2020 at 03:36:38PM -0500, Goldwyn Rodrigues wrote:
> From: Goldwyn Rodrigues <rgoldwyn@suse.com>
>
> Cleanup.
>
> write_bytes can change in btrfs_check_nocow_lock(). Calculate variables
> such as num_pages and reserve_bytes once we are sure of the value of
> write_bytes so there is no need to re-calculate.
>
> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Added to misc-next, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-10-14 13:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-25 20:36 [PATCH] btrfs: Calculate num_pages, reserve_bytes once in btrfs_buffered_write() Goldwyn Rodrigues
2020-10-05 13:10 ` Josef Bacik
2020-10-14 13:08 ` David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).