All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Jan Kara <jack@suse.cz>,
	Matthew Bobrowski <mbobrowski@mbobrowski.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-api@vger.kernel.org
Subject: Re: [PATCH v3 08/13] fanotify: enable FAN_REPORT_FID init flag
Date: Thu, 29 Nov 2018 14:08:45 +0100	[thread overview]
Message-ID: <20181129130845.GN31087@quack2.suse.cz> (raw)
In-Reply-To: <CAOQ4uxiV08YJWDOB8aTkrGT7UXXNpqb-uENKd9Kyd2T6sLJFmw@mail.gmail.com>

On Thu 29-11-18 13:03:03, Amir Goldstein wrote:
> On Thu, Nov 29, 2018 at 11:46 AM Jan Kara <jack@suse.cz> wrote:
> > > +     err = vfs_statfs(path, &stat);
> > > +     if (err)
> > > +             return err;
> > > +
> > > +     if (!stat.f_fsid.val[0] && !stat.f_fsid.val[1])
> > > +             return -ENODEV;
> > > +
> > > +     /*
> > > +      * Make sure path is not inside a filesystem subvolume (e.g. btrfs)
> > > +      * which uses a different fsid than sb root.
> > > +      */
> > > +     err = statfs_by_dentry(path->dentry->d_sb->s_root, &root_stat);
> > > +     if (err)
> > > +             return err;
> > > +
> > > +     if (root_stat.f_fsid.val[0] != stat.f_fsid.val[0] ||
> > > +         root_stat.f_fsid.val[1] != stat.f_fsid.val[1])
> > > +             return -EXDEV;
> >
> > I think inode watches in subvolumes are actually fine? The same fs object
> > is going to get different struct inode for different subvolumes if I
> > remember right. So there won't be any surprises with unexpected fsid being
> > reported.
> >
> > Also mount watches are actually fine for subvolume as different subvolumes
> > appear as different mountpoints, don't they? And I think implementation
> > that would have different fsid for inodes in the same mountpoint would be
> > indeed very weird. So again no problem with fsid mismatch.
> >
> > So we need this check only for superblock watches.
> >
> 
> Not so simple (or is it?).
> If a group has inode, mount and filesystem marks, not all added at the
> same time.
> When event on an object that is associated with all the above marks,
> which cached fsid should be used in the report?
> Naturally, it makes sense to prefer to more accurate fsid of mount/inode
> over the broader fsid of filesystem. Right?
> But what happens when mount/inode marks are removed?
> Or if filesystem has events in the mask that inode/mount do not?
> Then the same object reports events with different fsid depending
> on the type of event and time it took place (which marks existed).
> 
> Not a good situation to get ourselves into.
> 
> The simple way out of this is: we do not support FAN_REPORT_FID
> on marks using path that is not relative to main volume. period.
> 
> Considering the fact that FAN_REPORT_FID is mainly indented to
> enable reporting directory modification events and mount marks
> are not supported with reporting directory modification events, we
> only loose the ability to watch modification on selective directories
> inside btrfs subvolume.
> 
> I also don't like the fact that I disabled filesystem watch over tmpfs,
> because for the case of watching a single filesystem or single
> directory, which is quite a common case, we don't need fsid
> to be non-zero and we don't care if it mismatches with s_root fsid.
> 
> A solution I was contemplating was to allow zero fsid and non
> root fsid as long as it is the only sb watched by the group, so
> for non unique fsid:
> - store group->sb and group->fsid
> - return -EXDEV for an attempt to add mark from a different sb
> (no matter if it is inode/mount/sb mark)
> - when trying to add mark with zero or non root fsid (common case)
> set group->sb to a special value so no fs will match it and then
> attempt to add any mark with zero/non-root fsid will fail
> 
> This is something that is quite easy for me to implement and less
> easy to document the expected behavior.
> I donno, maybe:
> EXDEV    watching several filesystems and either new mark or existing marks
>                  are on filesystems with non unique fsid
> 
> The easy way out of it for me was: no support for FAN_REPORT_FID
> on btrfs subvolumes at the moment - it could be added with restrictions
> in the future.
> 
> Do you have a different view of the problem than mine?

Yeah, OK, you're right the semantics isn't really obvious. So I'm fine with
going for EXDEV now and we can open that can of worms later.

								Honza
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

  reply	other threads:[~2018-11-30  0:14 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-25 13:43 [PATCH v3 00/13] fanotify: add support for more event types Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 01/13] fsnotify: annotate directory entry modification events Amir Goldstein
2018-11-28 12:59   ` Jan Kara
2018-11-28 14:39     ` Amir Goldstein
2018-11-28 14:43       ` Jan Kara
2018-11-28 15:01         ` Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 02/13] fsnotify: send all event types to super block marks Amir Goldstein
2018-11-28 14:26   ` Jan Kara
2018-11-25 13:43 ` [PATCH v3 03/13] fanotify: rename struct fanotify_{,perm_}event_info Amir Goldstein
2018-11-28 14:29   ` Jan Kara
2018-11-25 13:43 ` [PATCH v3 04/13] fanotify: define the structures to report a unique file identifier Amir Goldstein
2018-11-28 15:27   ` Jan Kara
2018-11-28 16:24     ` Amir Goldstein
2018-11-28 17:43       ` Jan Kara
2018-11-28 18:34         ` Amir Goldstein
2018-11-29  7:51           ` Jan Kara
2018-11-29  8:16             ` Amir Goldstein
2018-11-29 10:16               ` Jan Kara
2018-11-29 11:10                 ` Amir Goldstein
2018-11-30 15:32                 ` Amir Goldstein
2018-12-01 16:43                   ` Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 05/13] fanotify: classify events that hold a " Amir Goldstein
2018-11-28 15:33   ` Jan Kara
2018-11-28 15:44     ` Jan Kara
2018-11-28 15:52       ` Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 06/13] fanotify: encode file identifier for FAN_REPORT_FID Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 07/13] fanotify: copy event fid info to user Amir Goldstein
2018-11-29  9:00   ` Jan Kara
     [not found]     ` <CAOQ4uxjcb=UqQiw0XcpDfetK28bM4tOYdvgxPwhkjgE2mxpt=g@mail.gmail.com>
2018-11-29  9:49       ` Jan Kara
2018-11-25 13:43 ` [PATCH v3 08/13] fanotify: enable FAN_REPORT_FID init flag Amir Goldstein
2018-11-29  9:46   ` Jan Kara
2018-11-29 10:52     ` Jan Kara
2018-11-29 11:03     ` Amir Goldstein
2018-11-29 13:08       ` Jan Kara [this message]
2018-11-25 13:43 ` [PATCH v3 09/13] fanotify: cache fsid in fsnotify_mark_connector Amir Goldstein
2018-11-29 10:48   ` Jan Kara
2018-11-29 11:42     ` Amir Goldstein
2018-11-29 13:11       ` Jan Kara
2018-11-25 13:43 ` [PATCH v3 10/13] fanotify: check FS_ISDIR flag instead of d_is_dir() Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 11/13] fanotify: support events with data type FSNOTIFY_EVENT_INODE Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 12/13] fanotify: add support for create/attrib/move/delete events Amir Goldstein
2018-11-25 13:43 ` [PATCH v3 13/13] fanotify: report FAN_ONDIR to listener with FAN_REPORT_FID Amir Goldstein

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=20181129130845.GN31087@quack2.suse.cz \
    --to=jack@suse.cz \
    --cc=amir73il@gmail.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mbobrowski@mbobrowski.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.