From: Mark Fasheh <mfasheh@suse.de>
To: Zygo Blaxell <ce3g8jdj@umail.furryterror.org>
Cc: Chris Mason <clm@fb.com>, Josef Bacik <jbacik@fb.com>,
David Sterba <dsterba@suse.cz>,
linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 5/5] btrfs: don't update mtime on deduped inodes
Date: Mon, 29 Jun 2015 10:52:41 -0700 [thread overview]
Message-ID: <20150629175240.GB7507@wotan.suse.de> (raw)
In-Reply-To: <20150627214427.GC14931@hungrycats.org>
On Sat, Jun 27, 2015 at 05:44:28PM -0400, Zygo Blaxell wrote:
> On Fri, Jun 26, 2015 at 02:01:01PM -0700, Mark Fasheh wrote:
> > One issue users have reported is that dedupe changes mtime on files,
> > resulting in tools like rsync thinking that their contents have changed when
> > in fact the data is exactly the same. Clone still wants an mtime change, so
> > we special case this in the code.
> >
> > This was tested with the btrfs-extent-same tool.
> >
> > Signed-off-by: Mark Fasheh <mfasheh@suse.de>
> > ---
> > fs/btrfs/ioctl.c | 25 +++++++++++++++----------
> > 1 file changed, 15 insertions(+), 10 deletions(-)
> >
> > diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> > index 83f4679..0af0f13 100644
> > --- a/fs/btrfs/ioctl.c
> > +++ b/fs/btrfs/ioctl.c
> > @@ -87,7 +87,8 @@ struct btrfs_ioctl_received_subvol_args_32 {
> >
> >
> > static int btrfs_clone(struct inode *src, struct inode *inode,
> > - u64 off, u64 olen, u64 olen_aligned, u64 destoff);
> > + u64 off, u64 olen, u64 olen_aligned, u64 destoff,
> > + int no_mtime);
> >
> > /* Mask out flags that are inappropriate for the given type of inode. */
> > static inline __u32 btrfs_mask_flags(umode_t mode, __u32 flags)
> > @@ -3054,7 +3055,7 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
> > /* pass original length for comparison so we stay within i_size */
> > ret = btrfs_cmp_data(src, loff, dst, dst_loff, olen, &cmp);
> > if (ret == 0)
> > - ret = btrfs_clone(src, dst, loff, olen, len, dst_loff);
> > + ret = btrfs_clone(src, dst, loff, olen, len, dst_loff, 1);
> >
> > if (same_inode)
> > unlock_extent(&BTRFS_I(src)->io_tree, same_lock_start,
> > @@ -3219,13 +3220,17 @@ static int clone_finish_inode_update(struct btrfs_trans_handle *trans,
> > struct inode *inode,
> > u64 endoff,
> > const u64 destoff,
> > - const u64 olen)
> > + const u64 olen,
> > + int no_mtime)
> > {
> > struct btrfs_root *root = BTRFS_I(inode)->root;
> > int ret;
> >
> > inode_inc_iversion(inode);
> > - inode->i_mtime = inode->i_ctime = CURRENT_TIME;
> > + if (no_mtime)
> > + inode->i_ctime = CURRENT_TIME;
>
> I don't see a good reason to modify the ctime either. Again, nothing
> is changing here. All we are doing is shuffling physical storage around.
>
> Defrag and balance (which also move physical extents around) don't
> touch ctime, mtime, or even atime.
To be fair, those may actually be oversights, it's not uncommon to update
ctime on metadata changes.
Does a ctime change hurt any backup software (the reason for my first
patch)? I guess it could cause revaluation of meta data, but does that
actually happen? From what I can tell stuff like rsync is using mtime +
i_size to see if an inode changed.
Is there any software out there that monitors an inodes extent state which
might *want* ctime updates when this happens? Is that kind of usage a
stretch (or even something we care about?).
So my thinking is if it doesn't hurt anything, leave it in. Obviously if it
*is* causing issues then we should take it right out :)
Thanks for the discussion and review btw,
--Mark
--
Mark Fasheh
next prev parent reply other threads:[~2015-06-29 17:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-26 21:00 [PATCH 0/5] btrfs: dedupe fixes, features V4 Mark Fasheh
2015-06-26 21:00 ` [PATCH 1/5] btrfs: pass unaligned length to btrfs_cmp_data() Mark Fasheh
2015-06-26 21:00 ` [PATCH 2/5] btrfs: fix deadlock with extent-same and readpage Mark Fasheh
2015-06-26 21:00 ` [PATCH 3/5] btrfs: fix clone / extent-same deadlocks Mark Fasheh
2015-06-26 21:01 ` [PATCH 4/5] btrfs: allow dedupe of same inode Mark Fasheh
2015-06-26 21:01 ` [PATCH 5/5] btrfs: don't update mtime on deduped inodes Mark Fasheh
2015-06-27 21:44 ` Zygo Blaxell
2015-06-29 17:52 ` Mark Fasheh [this message]
2015-06-29 19:35 ` Zygo Blaxell
2015-06-29 20:29 ` Mark Fasheh
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=20150629175240.GB7507@wotan.suse.de \
--to=mfasheh@suse.de \
--cc=ce3g8jdj@umail.furryterror.org \
--cc=clm@fb.com \
--cc=dsterba@suse.cz \
--cc=jbacik@fb.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox