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@vger.kernel.org
Subject: Re: [PATCH v4 09/15] fanotify: cache fsid in fsnotify_mark_connector
Date: Fri, 4 Jan 2019 10:38:39 +0100 [thread overview]
Message-ID: <20190104093839.GE22409@quack2.suse.cz> (raw)
In-Reply-To: <20181202113826.32133-10-amir73il@gmail.com>
On Sun 02-12-18 13:38:20, Amir Goldstein wrote:
> @@ -268,6 +289,7 @@ static int fanotify_handle_event(struct fsnotify_group *group,
> int ret = 0;
> struct fanotify_event *event;
> struct fsnotify_event *fsn_event;
> + __kernel_fsid_t __fsid, *fsid = NULL;
>
> BUILD_BUG_ON(FAN_ACCESS != FS_ACCESS);
> BUILD_BUG_ON(FAN_MODIFY != FS_MODIFY);
> @@ -300,7 +322,10 @@ static int fanotify_handle_event(struct fsnotify_group *group,
> return 0;
> }
>
> - event = fanotify_alloc_event(group, inode, mask, data);
> + if (FAN_GROUP_FLAG(group, FAN_REPORT_FID))
> + fsid = fanotify_get_fsid(iter_info, &__fsid);
> +
> + event = fanotify_alloc_event(group, inode, mask, data, fsid);
This looks wrong? fsid is never assigned anything != NULL? How could have
this worked?
> @@ -853,9 +855,9 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
> }
>
> /* Check if filesystem can encode a unique fid */
> -static int fanotify_test_fid(struct path *path)
> +static int fanotify_test_fid(struct path *path, struct kstatfs *stat)
> {
> - struct kstatfs stat, root_stat;
> + struct kstatfs root_stat;
Any reason why you don't just return fsid from fanotify_test_fid() instead
of full kstatfs structure? The extra copy of 8 bytes does not really hurt
us...
> @@ -553,15 +560,33 @@ static int fsnotify_add_mark_list(struct fsnotify_mark *mark,
>
> if (WARN_ON(!fsnotify_valid_obj_type(type)))
> return -EINVAL;
> +
> + /* Backend is expected to check for zero fsid (e.g. tmpfs) */
> + if (fsid && WARN_ON_ONCE(!fsid->val[0] && !fsid->val[1]))
> + return -ENODEV;
> +
> restart:
> spin_lock(&mark->lock);
> conn = fsnotify_grab_connector(connp);
> if (!conn) {
> spin_unlock(&mark->lock);
> - err = fsnotify_attach_connector_to_object(connp, type);
> + err = fsnotify_attach_connector_to_object(connp, type, fsid);
> if (err)
> return err;
> goto restart;
> + } else if (fsid &&
> + (fsid->val[0] != conn->fsid.val[0] ||
> + fsid->val[1] != conn->fsid.val[1])) {
I think you need to allow transition from 0 to something != 0 here.
Otherwise you'll get this warning if someone attaches say inotify mark to
an inode and then fanotify mark for FAN_REPORT_FID group.
> + /*
> + * Backend is expected to check for non uniform fsid
> + * (e.g. btrfs), but maybe we missed something?
> + */
> + pr_warn_ratelimited("%s: fsid mismatch on object of type %u: %x.%x != %x.%x\n",
> + __func__, conn->type,
> + fsid->val[0], fsid->val[1],
> + conn->fsid.val[0], conn->fsid.val[1]);
> + err = -EXDEV;
> + goto out_err;
> }
>
> /* is mark the first mark? */
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2019-01-04 9:38 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-02 11:38 [PATCH v4 00/15] fanotify: add support for more event types Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 01/15] fsnotify: annotate directory entry modification events Amir Goldstein
2019-01-03 15:41 ` Jan Kara
2019-01-03 16:31 ` Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 02/15] fsnotify: send all event types to super block marks Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 03/15] fsnotify: move mask out of struct fsnotify_event Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 04/15] fanotify: rename struct fanotify_{,perm_}event_info Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 05/15] fanotify: open code fill_event_metadata() Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 06/15] fanotify: encode file identifier for FAN_REPORT_FID Amir Goldstein
2019-01-03 16:18 ` Jan Kara
2018-12-02 11:38 ` [PATCH v4 07/15] fanotify: copy event fid info to user Amir Goldstein
2019-01-03 17:13 ` Jan Kara
2019-01-04 3:58 ` Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 08/15] fanotify: enable FAN_REPORT_FID init flag Amir Goldstein
2018-12-08 9:26 ` Amir Goldstein
2018-12-10 16:20 ` Jan Kara
2018-12-11 6:12 ` Matthew Bobrowski
2018-12-11 6:58 ` Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 09/15] fanotify: cache fsid in fsnotify_mark_connector Amir Goldstein
2019-01-04 9:38 ` Jan Kara [this message]
2019-01-04 9:54 ` Jan Kara
2018-12-02 11:38 ` [PATCH v4 10/15] vfs: add vfs_get_fsid() helper Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 11/15] fanotify: use vfs_get_fsid() helper instead of vfs_statfs() Amir Goldstein
2019-01-04 9:55 ` Jan Kara
2018-12-02 11:38 ` [PATCH v4 12/15] fanotify: check FS_ISDIR flag instead of d_is_dir() Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 13/15] fanotify: support events with data type FSNOTIFY_EVENT_INODE Amir Goldstein
2019-01-04 10:17 ` Jan Kara
2019-01-04 11:12 ` Amir Goldstein
2018-12-02 11:38 ` [PATCH v4 14/15] fanotify: add support for create/attrib/move/delete events Amir Goldstein
2019-01-04 10:26 ` Jan Kara
2018-12-02 11:38 ` [PATCH v4 15/15] fanotify: report FAN_ONDIR to listener with FAN_REPORT_FID Amir Goldstein
2019-01-04 10:57 ` Jan Kara
2019-01-04 11:42 ` Amir Goldstein
2019-01-04 12:18 ` Jan Kara
2019-01-04 12:39 ` Amir Goldstein
2019-01-05 0:34 ` Matthew Bobrowski
2019-01-05 8:18 ` Amir Goldstein
2019-01-07 7:40 ` Amir Goldstein
2019-01-04 12:19 ` Jan Kara
2019-01-04 23:46 ` Matthew Bobrowski
2019-01-05 7:59 ` Amir Goldstein
2019-01-05 9:49 ` Matthew Bobrowski
2019-01-07 7:37 ` Amir Goldstein
2019-01-04 11:00 ` [PATCH v4 00/15] fanotify: add support for more event types Jan Kara
2019-01-07 7:46 ` Amir Goldstein
2019-01-09 14:02 ` Jan Kara
2019-01-09 15:34 ` Amir Goldstein
2019-01-10 7:49 ` Amir Goldstein
2019-01-10 9:22 ` Jan Kara
2019-01-10 9:50 ` Amir Goldstein
2019-01-10 11:43 ` Jan Kara
2019-01-10 11:55 ` Amir Goldstein
2019-01-10 8:53 ` Jan Kara
2019-01-10 10:10 ` 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=20190104093839.GE22409@quack2.suse.cz \
--to=jack@suse.cz \
--cc=amir73il@gmail.com \
--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.