From patchwork Thu Apr 5 13:18: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: 10324587 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E64CF600CB for ; Thu, 5 Apr 2018 13:17:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D5BD92821F for ; Thu, 5 Apr 2018 13:17:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CA02D27FA1; Thu, 5 Apr 2018 13:17:35 +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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, 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 61A8828068 for ; Thu, 5 Apr 2018 13:17:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751571AbeDENR2 (ORCPT ); Thu, 5 Apr 2018 09:17:28 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:38006 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751519AbeDENRT (ORCPT ); Thu, 5 Apr 2018 09:17:19 -0400 Received: by mail-wm0-f66.google.com with SMTP id i3so6996630wmf.3 for ; Thu, 05 Apr 2018 06:17:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hoFmC/h9Dllt/4JcuSrzyjjqsL4Hu5b6NYWTPwEvi00=; b=Cp/88DAKFKZJUUtG+4S07uNVjFvtn/Suw/EYrl0kS3srGrWu8YJYp2K9f9wGVWQMW6 C++4PwStsUOqH8dGoskb94eJnKQtwhfZCHdJsBf/BzBkxN0CxgE+jKk6+mHAICiaGSzB RnHqM++4LwDLMXSVVBxPqmsS1RFQn+EnRqOZoLVJD2dEIJindqxGby8BJjcztK9naTzl vxmiB+rU40Agl16QD/VnnGvQkPSv4WtKf7ykQdmbc509+utrHbUBla5ExQMC+Go+Ob5W y1auArlE80fu+T6LMjyrsIxO5apV1xxg2lxAssjaPKoLwyx/XJ1c/hvQVouLXnTHDU++ NAag== 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:in-reply-to :references; bh=hoFmC/h9Dllt/4JcuSrzyjjqsL4Hu5b6NYWTPwEvi00=; b=KkOdue9EFnoSrb0FbnX3XRKBSRuygfzU2fbRld0V5GI7yhR6Bp6y/5hTPb1xKpX3hg H4+MqofuzRBqb6/Ts531e+X6v8dAMrdzEgBpV6qUCKjDT55eh90fzRLsnIFsKH48MkLQ S4bmEUdtfmjKM+oP/fUeXJpi/anuh+ZtADCC5ihH9Df1lf8z6rFyTBx8x8zSXtEmBwvd kuapIIi6I8tELKf9Zhkk7Ci4rzhkjE0pm+puv7jopVyBNYjl6QN9N4ePsKH6A5PPGRNZ ZYLvbnlPfjo+ApRnbGpJMdNOGGy/n/ivLrXtFjhFkAmErfAH6IoGOJEwzpg9Wk3Ybv+9 pkfg== X-Gm-Message-State: ALQs6tBeDTDSAUpVhrI9CplR4d8Zj5hzYCss0KgPhlue560po9nEMNsi lgbuMxEcncf3fnNlZphjGFHGDw== X-Google-Smtp-Source: AIpwx49dKguwp5PpbebdNVsk/ccD2iazI6aHG6Dwg/dE8WOhbEXNkeVNTW6bQuyaoDorcQadOpa5jw== X-Received: by 10.28.150.210 with SMTP id y201mr11640422wmd.112.1522934238424; Thu, 05 Apr 2018 06:17:18 -0700 (PDT) Received: from localhost.localdomain ([141.226.13.13]) by smtp.gmail.com with ESMTPSA id p197sm3108398wme.43.2018.04.05.06.17.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 05 Apr 2018 06:17:17 -0700 (PDT) From: Amir Goldstein To: Jan Kara Cc: Miklos Szeredi , Marko Rauhamaa , linux-fsdevel@vger.kernel.org Subject: [PATCH v2 10/20] fanotify: generalize fanotify_should_send_event() Date: Thu, 5 Apr 2018 16:18:11 +0300 Message-Id: <1522934301-6520-11-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1522934301-6520-1-git-send-email-amir73il@gmail.com> References: <1522934301-6520-1-git-send-email-amir73il@gmail.com> 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 Use foreach_obj_type macros to generalize the code that filters events by marks mask and ignored_mask. This is going to be used for adding mark of super block object type. Signed-off-by: Amir Goldstein --- fs/notify/fanotify/fanotify.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 86ccf79c0671..c770dd36c3fe 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -91,14 +91,13 @@ static bool fanotify_should_send_event(struct fsnotify_iter_info *iter_info, u32 event_mask, const void *data, int data_type) { - struct fsnotify_mark *inode_mark = fsnotify_iter_inode_mark(iter_info); - struct fsnotify_mark *vfsmnt_mark = fsnotify_iter_vfsmount_mark(iter_info); __u32 marks_mask = 0, marks_ignored_mask = 0; const struct path *path = data; + struct fsnotify_mark *mark; + int type; - pr_debug("%s: inode_mark=%p vfsmnt_mark=%p mask=%x data=%p" - " data_type=%d\n", __func__, inode_mark, vfsmnt_mark, - event_mask, data, data_type); + pr_debug("%s: type_mask=%x mask=%x data=%p data_type=%d\n", + __func__, iter_info->type_mask, event_mask, data, data_type); /* if we don't have enough info to send an event to userspace say no */ if (data_type != FSNOTIFY_EVENT_PATH) @@ -109,20 +108,20 @@ static bool fanotify_should_send_event(struct fsnotify_iter_info *iter_info, !d_can_lookup(path->dentry)) return false; - /* - * if the event is for a child and this inode doesn't care about - * events on the child, don't send it! - */ - if (inode_mark && - (!(event_mask & FS_EVENT_ON_CHILD) || - (inode_mark->mask & FS_EVENT_ON_CHILD))) { - marks_mask |= inode_mark->mask; - marks_ignored_mask |= inode_mark->ignored_mask; - } - - if (vfsmnt_mark) { - marks_mask |= vfsmnt_mark->mask; - marks_ignored_mask |= vfsmnt_mark->ignored_mask; + fsnotify_iter_foreach_obj_type_mark(iter_info, type, mark) { + /* + * if the event is for a child and this inode doesn't care about + * events on the child, don't send it! + */ + if (mark && type == FSNOTIFY_OBJ_TYPE_INODE && + (event_mask & FS_EVENT_ON_CHILD) && + !(mark->mask & FS_EVENT_ON_CHILD)) + continue; + + if (mark) { + marks_mask |= mark->mask; + marks_ignored_mask |= mark->ignored_mask; + } } if (d_is_dir(path->dentry) &&