From: Brian Foster <bfoster@redhat.com>
To: Filipe Manana <fdmanana@kernel.org>
Cc: fstests <fstests@vger.kernel.org>,
linux-btrfs <linux-btrfs@vger.kernel.org>,
Filipe Manana <fdmanana@suse.com>
Subject: Re: [PATCH 1/4] fsx: add missing file size update on zero range operations
Date: Fri, 17 Apr 2020 14:25:34 -0400 [thread overview]
Message-ID: <20200417182534.GH13463@bfoster> (raw)
In-Reply-To: <CAL3q7H6bS1dL2pUawmc0z3ZXop7xg0P5O8rBkqbP11V9D+295Q@mail.gmail.com>
On Fri, Apr 17, 2020 at 06:53:27PM +0100, Filipe Manana wrote:
> On Fri, Apr 17, 2020 at 6:48 PM Brian Foster <bfoster@redhat.com> wrote:
> >
> > On Fri, Apr 17, 2020 at 06:32:03PM +0100, Filipe Manana wrote:
> > > On Fri, Apr 17, 2020 at 6:26 PM Brian Foster <bfoster@redhat.com> wrote:
> > > >
> > > > On Fri, Apr 17, 2020 at 06:20:24PM +0100, Filipe Manana wrote:
> > > > > On Fri, Apr 17, 2020 at 6:10 PM Brian Foster <bfoster@redhat.com> wrote:
> > > > > >
> > > > > > On Wed, Apr 08, 2020 at 11:35:52AM +0100, fdmanana@kernel.org wrote:
> > > > > > > From: Filipe Manana <fdmanana@suse.com>
> > > > > > >
> > > > > > > When a zero range operation increases the size of the test file we were
> > > > > > > not updating the global variable 'file_size' which tracks the current
> > > > > > > size of the test file. This variable is used to for example compute the
> > > > > > > offset for a source range of clone, dedupe and copy file range operations.
> > > > > > >
> > > > > > > So just fix it by updating the 'file_size' global variable whenever a zero
> > > > > > > range operation does not use the keep size flag and its range goes beyond
> > > > > > > the current file size.
> > > > > > >
> > > > > > > Signed-off-by: Filipe Manana <fdmanana@suse.com>
> > > > > > > ---
> > > > > > > ltp/fsx.c | 2 ++
> > > > > > > 1 file changed, 2 insertions(+)
> > > > > > >
> > > > > > > diff --git a/ltp/fsx.c b/ltp/fsx.c
> > > > > > > index 9d598a4f..fa383c94 100644
> > > > > > > --- a/ltp/fsx.c
> > > > > > > +++ b/ltp/fsx.c
> > > > > > > @@ -1212,6 +1212,8 @@ do_zero_range(unsigned offset, unsigned length, int keep_size)
> > > > > > > }
> > > > > > >
> > > > > > > end_offset = keep_size ? 0 : offset + length;
> > > > > > > + if (!keep_size && end_offset > file_size)
> > > > > > > + file_size = end_offset;
> > > > > >
> > > > > > Should this ever happen if the caller uses TRIM_OFF_LEN() on the
> > > > > > offset and length?
> > > > >
> > > > > TRIM_OFF_LEN only trims the range, not the file_size.
> > > > > Or did I miss something?
> > > > >
> > > >
> > > > Right, but TRIM_LEN() does:
> > > >
> > > > if ((off) + (len) > (size)) \
> > > > (len) = (size) - (off); \
> > > >
> > > > ... where size is file_size. Hm?
> > >
> > > That only updates the range's length, not the file_size.
> > >
> >
> > Yes, but it caps the range to within file_size.
>
> Yes.
>
> The problem I'm trying to solve is that because the file_size is not
> updated by zero range operations,
> a following clone/dedupe/copy_range call will not be able to use a
> range that crosses the old file size and goes up to the new file size.
>
> I.e. I'm not solving a problem where the range for those operations
> (or any others) incorrectly crosses eof - that doesn't happen because
> of the TRIM_* macros.
>
> Does it make sense now?
>
Not really. When is end_offset > file_size ever true in do_zero_range()?
Brian
> Thanks.
>
>
> >
> > > Also, if you check the global style, you'll see that in the function
> > > for every operation that can change file size we do update file_size
> > > explicitly (e.g. do_preallocate(), and we call TRIM_OFF_LEN before
> > > calling it as well).
> > >
> >
> > do_preallocate() (fallocate) passes maxfilelen instead of file_size, as
> > does write and mapwrite. Insert range uses TRIM_LEN() directly but also
> > passes maxfilelen.
> >
> > Brian
> >
> > > Thanks.
> > >
> > > >
> > > > Brian
> > > >
> > > > > Thanks.
> > > > >
> > > > > >
> > > > > > Brian
> > > > > >
> > > > > > >
> > > > > > > if (end_offset > biggest) {
> > > > > > > biggest = end_offset;
> > > > > > > --
> > > > > > > 2.11.0
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
next prev parent reply other threads:[~2020-04-17 18:25 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-08 10:35 [PATCH 1/4] fsx: add missing file size update on zero range operations fdmanana
2020-04-17 17:10 ` Brian Foster
2020-04-17 17:20 ` Filipe Manana
2020-04-17 17:26 ` Brian Foster
2020-04-17 17:32 ` Filipe Manana
2020-04-17 17:47 ` Brian Foster
2020-04-17 17:53 ` Filipe Manana
2020-04-17 18:25 ` Brian Foster [this message]
2020-04-20 17:07 ` Filipe Manana
2020-04-19 14:55 ` Eryu Guan
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=20200417182534.GH13463@bfoster \
--to=bfoster@redhat.com \
--cc=fdmanana@kernel.org \
--cc=fdmanana@suse.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.