Linux-Fsdevel Archive on lore.kernel.org help / color / mirror / Atom feed
From: Filipe Manana <fdmanana@gmail.com> To: Omar Sandoval <osandov@osandov.com> Cc: linux-btrfs <linux-btrfs@vger.kernel.org>, linux-fsdevel <linux-fsdevel@vger.kernel.org> Subject: Re: [PATCH 3/9] btrfs: send: use btrfs_file_extent_end() in send_write_or_clone() Date: Fri, 21 Aug 2020 18:30:02 +0100 [thread overview] Message-ID: <CAL3q7H49XQb-UaKmO0QR8V5F7onyCvVB4nYbMgoUfWJE8gJcug@mail.gmail.com> (raw) In-Reply-To: <af4ae9204aa3d36a2703dc1aaeb365b7340ed238.1597994106.git.osandov@osandov.com> On Fri, Aug 21, 2020 at 8:42 AM Omar Sandoval <osandov@osandov.com> wrote: > > From: Omar Sandoval <osandov@fb.com> > > send_write_or_clone() basically has an open-coded copy of > btrfs_file_extent_end() except that it (incorrectly) aligns to PAGE_SIZE > instead of sectorsize. Fix and simplify the code by using > btrfs_file_extent_end(). > > Signed-off-by: Omar Sandoval <osandov@fb.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Looks good, and it passed some long duration tests with both full and incremental sends here (with and without compression, no-holes, etc). Thanks. > --- > fs/btrfs/send.c | 44 +++++++++++--------------------------------- > 1 file changed, 11 insertions(+), 33 deletions(-) > > diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c > index e70f5ceb3261..37ce21361782 100644 > --- a/fs/btrfs/send.c > +++ b/fs/btrfs/send.c > @@ -5400,51 +5400,29 @@ static int send_write_or_clone(struct send_ctx *sctx, > struct clone_root *clone_root) > { > int ret = 0; > - struct btrfs_file_extent_item *ei; > u64 offset = key->offset; > - u64 len; > - u8 type; > + u64 end; > u64 bs = sctx->send_root->fs_info->sb->s_blocksize; > > - ei = btrfs_item_ptr(path->nodes[0], path->slots[0], > - struct btrfs_file_extent_item); > - type = btrfs_file_extent_type(path->nodes[0], ei); > - if (type == BTRFS_FILE_EXTENT_INLINE) { > - len = btrfs_file_extent_ram_bytes(path->nodes[0], ei); > - /* > - * it is possible the inline item won't cover the whole page, > - * but there may be items after this page. Make > - * sure to send the whole thing > - */ > - len = PAGE_ALIGN(len); > - } else { > - len = btrfs_file_extent_num_bytes(path->nodes[0], ei); > - } > - > - if (offset >= sctx->cur_inode_size) { > - ret = 0; > - goto out; > - } > - if (offset + len > sctx->cur_inode_size) > - len = sctx->cur_inode_size - offset; > - if (len == 0) { > - ret = 0; > - goto out; > - } > + end = min(btrfs_file_extent_end(path), sctx->cur_inode_size); > + if (offset >= end) > + return 0; > > - if (clone_root && IS_ALIGNED(offset + len, bs)) { > + if (clone_root && IS_ALIGNED(end, bs)) { > + struct btrfs_file_extent_item *ei; > u64 disk_byte; > u64 data_offset; > > + ei = btrfs_item_ptr(path->nodes[0], path->slots[0], > + struct btrfs_file_extent_item); > disk_byte = btrfs_file_extent_disk_bytenr(path->nodes[0], ei); > data_offset = btrfs_file_extent_offset(path->nodes[0], ei); > ret = clone_range(sctx, clone_root, disk_byte, data_offset, > - offset, len); > + offset, end - offset); > } else { > - ret = send_extent_data(sctx, offset, len); > + ret = send_extent_data(sctx, offset, end - offset); > } > - sctx->cur_inode_next_write_offset = offset + len; > -out: > + sctx->cur_inode_next_write_offset = end; > return ret; > } > > -- > 2.28.0 > -- Filipe David Manana, “Whether you think you can, or you think you can't — you're right.”
next prev parent reply other threads:[~2020-08-21 17:30 UTC|newest] Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-21 7:39 [PATCH 0/9] btrfs: implement send/receive of compressed extents without decompressing Omar Sandoval 2020-08-21 7:39 ` [PATCH 1/9] btrfs: send: get rid of i_size logic in send_write() Omar Sandoval 2020-08-21 17:26 ` Filipe Manana 2020-08-24 17:39 ` Josef Bacik 2020-08-21 7:39 ` [PATCH 2/9] btrfs: send: avoid copying file data Omar Sandoval 2020-08-21 17:29 ` Filipe Manana 2020-08-24 21:34 ` Omar Sandoval 2020-08-24 17:47 ` Josef Bacik 2020-09-11 14:13 ` David Sterba 2020-09-14 22:04 ` Omar Sandoval 2020-09-15 8:14 ` David Sterba 2020-08-21 7:39 ` [PATCH 3/9] btrfs: send: use btrfs_file_extent_end() in send_write_or_clone() Omar Sandoval 2020-08-21 17:30 ` Filipe Manana [this message] 2020-08-21 7:39 ` [PATCH 4/9] btrfs: add send_stream_version attribute to sysfs Omar Sandoval 2020-08-21 7:39 ` [PATCH 5/9] btrfs: add send stream v2 definitions Omar Sandoval 2020-08-24 17:49 ` Josef Bacik 2020-08-21 7:39 ` [PATCH 6/9] btrfs: send: write larger chunks when using stream v2 Omar Sandoval 2020-08-24 17:57 ` Josef Bacik 2020-08-21 7:39 ` [PATCH 7/9] btrfs: send: allocate send buffer with alloc_page() and vmap() for v2 Omar Sandoval 2020-08-21 7:39 ` [PATCH 8/9] btrfs: send: send compressed extents with encoded writes Omar Sandoval 2020-08-24 17:32 ` Josef Bacik 2020-08-24 17:52 ` Omar Sandoval 2020-08-21 7:39 ` [PATCH 9/9] btrfs: send: enable support for stream v2 and compressed writes Omar Sandoval 2020-08-21 7:40 ` [PATCH 01/11] btrfs-progs: receive: support v2 send stream larger tlv_len Omar Sandoval 2020-08-21 7:40 ` [PATCH 02/11] btrfs-progs: receive: dynamically allocate sctx->read_buf Omar Sandoval 2020-08-21 7:40 ` [PATCH 03/11] btrfs-progs: receive: support v2 send stream DATA tlv format Omar Sandoval 2020-08-21 7:40 ` [PATCH 04/11] btrfs-progs: receive: add send stream v2 cmds and attrs to send.h Omar Sandoval 2020-08-21 7:40 ` [PATCH 05/11] btrfs-progs: receive: add stub implementation for pwritev2 Omar Sandoval 2020-08-21 7:40 ` [PATCH 06/11] btrfs-progs: receive: process encoded_write commands Omar Sandoval 2020-08-21 7:40 ` [PATCH 07/11] btrfs-progs: receive: encoded_write fallback to explicit decode and write Omar Sandoval 2020-08-21 7:40 ` [PATCH 08/11] btrfs-progs: receive: process fallocate commands Omar Sandoval 2020-08-21 7:40 ` [PATCH 09/11] btrfs-progs: receive: process setflags ioctl commands Omar Sandoval 2020-08-21 7:40 ` [PATCH 10/11] btrfs-progs: send: stream v2 ioctl flags Omar Sandoval 2020-08-21 7:40 ` [PATCH 11/11] btrfs-progs: receive: add tests for basic encoded_write send/receive Omar Sandoval 2020-08-24 19:57 ` [PATCH 0/9] btrfs: implement send/receive of compressed extents without decompressing David Sterba 2020-08-24 22:16 ` Omar Sandoval 2020-09-10 11:28 ` David Sterba
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAL3q7H49XQb-UaKmO0QR8V5F7onyCvVB4nYbMgoUfWJE8gJcug@mail.gmail.com \ --to=fdmanana@gmail.com \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=osandov@osandov.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).