From patchwork Sun Dec 2 11:38:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10707963 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 58D7F1057 for ; Sun, 2 Dec 2018 11:38:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D0F22ADB9 for ; Sun, 2 Dec 2018 11:38:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2D14D2ADBD; Sun, 2 Dec 2018 11:38:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A59BC2ADB9 for ; Sun, 2 Dec 2018 11:38:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725811AbeLBLim (ORCPT ); Sun, 2 Dec 2018 06:38:42 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:45156 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725776AbeLBLim (ORCPT ); Sun, 2 Dec 2018 06:38:42 -0500 Received: by mail-wr1-f65.google.com with SMTP id v6so9277606wrr.12; Sun, 02 Dec 2018 03:38:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=YfNjIOqfkN8t+Zg0LkMiv7Lv/532B9+64K9OoXXLPPI=; b=KfEIqhhnsuRzTapxG8aBe8igcGIKPLOCYfpSq/g9uWiyNDhlmW9/zH20K0VqTclmud jFX7COb4x9p8PBzNnCYYz1CpryCfdEbkz4Ahh8N4v/Le8Tajvjys2gX24hPyTdNa+cI3 xd1bPKirD1d4iq6O4cRB7SLVML14J5ZrYtIXre3iO/Xi9s9yXmawDtNz4FbLGjmsF6Yu I46xExlHWabpbhUE3Ua9XzbdEHHLeVrYvC71lQiNX0yM5yvE5TTOihKWfYpBYhSzuNJ1 FD6kx+8OVvrPflrmgQQuiRsimhYVAImqzPFAyhXj81mPQtys7dR32U9riQy1FeJcic+x MnTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=YfNjIOqfkN8t+Zg0LkMiv7Lv/532B9+64K9OoXXLPPI=; b=sUSGSoDP7w/cClVxIs8ThVrIeps5CI3k94rs5I8+wyMviV3FKsOJtOSvbVEUYXiNwP 69KBDoX92UimLopLEAkxufwH0s8HPtPZNzYgczr++OFubaSIO9WPE+58Q8kC2gtby3gw PitqiU48525gTs3msy2+x5dO0nI4VDlN8C9dmOBsczG426A9I9AmbvaCkGRhlVEWgcop jYXgmqbOJtAA3QwtoD0pxHo6V8G74Kx4QpPT/0yA5zkQQLwlU6BEYlUl5PdMAP1U7UON 5d9VgIKLOYRk6XRs4dXF6Xoxs6gZ0r1IIccI4HeDQ5Xchv2k0Gzi4baw3ROe6ghjj10k P0+w== X-Gm-Message-State: AA+aEWZapeS5/y8BeGF1aG9DMV8g/m1akceQPWgEKSNGkF9QTSUiv6Ir BVl0DsiDSD41I1IE/4wGNZSO3Edn X-Google-Smtp-Source: AFSGD/WX1OoLBDXQyBVnFI+Gzy0z7iq7ZqSb6AQ19KzYfAWWUFYUGlVFiBzsZlACDVdY9I32jpFhDg== X-Received: by 2002:a5d:448f:: with SMTP id j15mr6492296wrq.108.1543750717512; Sun, 02 Dec 2018 03:38:37 -0800 (PST) Received: from localhost.localdomain (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id c3-v6sm3448672wmb.46.2018.12.02.03.38.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Dec 2018 03:38:36 -0800 (PST) From: Amir Goldstein To: Jan Kara Cc: Matthew Bobrowski , linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org Subject: [PATCH v4 00/15] fanotify: add support for more event types Date: Sun, 2 Dec 2018 13:38:11 +0200 Message-Id: <20181202113826.32133-1-amir73il@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Jan, This is the 4th revision of patch series to add support for filesystem change monitoring to fanotify. It incorporates the changes you requested in review of v3 FAN_REPORT_FID patches. The complete work is available on fanotify_dirent branch [1] on my tree. The combined functionality of FAN_MARK_FILESYSTEM, FAN_REPORT_FID and dirent modification events is demonstrated with a prototype of global filesystem monitor based on inotify-tools [2]. In your review of v3 patched you only got as far as patch v3 9/13. Because this patch marks the end of the FAN_REPORT_FID sub series, I found it best to re-post the entire series with the changes you requested thus far. For convenience of review, I pushed branches fanotify_fid-v3 [3] and fanotify_fid-v4 [4] with the work you reviewed so far and its re-worked version. One thing that we discussed and I did NOT do is move struct file_handle to uapi headers. This got complicated due to existing definitions in glibc header files and I realized we could do without it. I have added the vfs_get_fsid() helper as you requested, but since it wasn't required by the patch set, I added it as two new cleanup patches at the end of the FAN_REPORT_FID series, so you will be able to stage the feature with or without the VFS change. Thanks, Amir. Changes since v3: - Re-organize structs fsnotify_event and fanotify_event to pack the fields better on 64bit arch (NEW patch "move mask out of...") - Re-arrange building event fid in two main patches: "encode fid..." to in-kernel event struct and "copy event fid..." to uapi format - Avoid exporting statfs_by_dentry() and add 2 NEW cleanup patches to use new helper vfs_get_fsid() - Replace dodgy code using pointer bit 0 with proper type field in fanotify_event to indicate if path or fid info was stored - Store up to 12 bytes (on 32bit) or 16 bytes (on 64bit) of embedded file handle in fanotify_event to refrain from small memory allocations - Re-arrange code in copy_event_to_user(), so adding copy of fid to user is less convoluted - Replace convoluted code to verify all marks for a reported event have the same cached fsid with simpler code than uses any cached fsid Changes since v2: - Discard FSNOTIFY_EVENT_DENTRY data type changes - Cache fsid in connector instead of calling vfs_statfs() on every event - Deny setting fid watch on filesystem with no fsid (tmpfs) - Deny setting fid watch on filesystem with non root fsid (btrfs subvol) - Report FAN_ONDIR for all event types with FAN_REPORT_FID [1] https://github.com/amir73il/linux/commits/fanotify_dirent [2] https://github.com/amir73il/inotify-tools/commits/fanotify_dirent [3] https://github.com/amir73il/linux/commits/fanotify_fid-v3 [4] https://github.com/amir73il/linux/commits/fanotify_fid-v4 Amir Goldstein (15): fsnotify: annotate directory entry modification events fsnotify: send all event types to super block marks fsnotify: move mask out of struct fsnotify_event fanotify: rename struct fanotify_{,perm_}event_info fanotify: open code fill_event_metadata() fanotify: encode file identifier for FAN_REPORT_FID fanotify: copy event fid info to user fanotify: enable FAN_REPORT_FID init flag fanotify: cache fsid in fsnotify_mark_connector vfs: add vfs_get_fsid() helper fanotify: use vfs_get_fsid() helper instead of vfs_statfs() fanotify: check FS_ISDIR flag instead of d_is_dir() fanotify: support events with data type FSNOTIFY_EVENT_INODE fanotify: add support for create/attrib/move/delete events fanotify: report FAN_ONDIR to listener with FAN_REPORT_FID fs/notify/fanotify/fanotify.c | 228 +++++++++++++++++---- fs/notify/fanotify/fanotify.h | 109 ++++++++-- fs/notify/fanotify/fanotify_user.c | 284 +++++++++++++++++++-------- fs/notify/fsnotify.c | 15 +- fs/notify/inotify/inotify.h | 1 + fs/notify/inotify/inotify_fsnotify.c | 9 +- fs/notify/inotify/inotify_user.c | 5 +- fs/notify/mark.c | 44 ++++- fs/notify/notification.c | 22 +-- fs/statfs.c | 14 ++ include/linux/fanotify.h | 33 +++- include/linux/fsnotify.h | 45 ++++- include/linux/fsnotify_backend.h | 70 ++++--- include/linux/statfs.h | 3 + include/uapi/linux/fanotify.h | 29 +++ 15 files changed, 701 insertions(+), 210 deletions(-)