Received: by 2002:a05:6a10:8a4d:0:0:0:0 with SMTP id dn13csp260940pxb; Thu, 12 Aug 2021 16:00:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwZ5/EqDVMsaxDpm8EQXlXPkIZ9B4dUf8bkl0DpoaT09AOhXutc0dWhBo774bAWSF9J3ONE X-Received: by 2002:a17:906:3486:: with SMTP id g6mr5790615ejb.71.1628809205691; Thu, 12 Aug 2021 16:00:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628809205; cv=none; d=google.com; s=arc-20160816; b=GxheXwB2AfRoqm/QOAJnsHcpRDWF8zo8HtwpFob+V3TAcbBwHdHZ4SICjHzRtZvlhF AqlTRFucLamKvk2LLuJGSNBMpxGvP6gN8Ud3cG9gIkqf9fqmgQ024muy3Trpi7L1uNqH yvU/knlRLAWxuJ9ud44N3qrVK9Cg5QkprjqPyAP5CDKUyp2s4LKSzOU9+dbVZQ8f80M7 wIqJC4y24q44iw/Kr1AD5pCQ40jC2yhQ0YQSpPoRsl5THdzbM3xDBusHj3fAJL3vy+0J /S90qEY0fPx/ZUHGSLsxBcHGOEnLXn20L/Vm1Tf6e8R/yTPm4K4BQ9qwV5uI6cJsz0oH yIkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=M6Lg5mUWjl+91uONXaXLJe6MBARBh3rAKbOLXMJ9FUs=; b=SdnECtVmRixbH+HM6/WTW4gpu6AxxmlRQX9gsw7SGzHaKgo2xue+If7Ly1nY23U172 Xj5OZIgTZcn1zLLMPESirG75mIjMU4kQs+YnUUiJynxFQUITNqDnsIxehnO4eE32UMSE fCoWL+tQUX84JVp0cepEulT86nbEJq+6/oBEBHE+quLwR4pH3sRiiRS4A2vg2ykrwBwB 4MTqJOmAh31WJygEGO1c4TdGK+05MFBJzraeS3yQcGowaEbNuQVvzbGNpA2uArWD23Or jVE9hGBCo7TjTZgVqqI8pUUlOFamPL3lV+8+vQyiijOHhAh1KIzV8gOGOkImQPjilCvq ilzA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z2si4007807edq.209.2021.08.12.15.59.40; Thu, 12 Aug 2021 16:00:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237793AbhHLVl3 (ORCPT + 99 others); Thu, 12 Aug 2021 17:41:29 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:45752 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229919AbhHLVl3 (ORCPT ); Thu, 12 Aug 2021 17:41:29 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: krisman) with ESMTPSA id 1077D1F44220 From: Gabriel Krisman Bertazi To: amir73il@gmail.com, jack@suse.com Cc: linux-api@vger.kernel.org, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, khazhy@google.com, dhowells@redhat.com, david@fromorbit.com, tytso@mit.edu, djwong@kernel.org, repnop@google.com, Gabriel Krisman Bertazi , kernel@collabora.com Subject: [PATCH v6 09/21] fsnotify: Allow events reported with an empty inode Date: Thu, 12 Aug 2021 17:39:58 -0400 Message-Id: <20210812214010.3197279-10-krisman@collabora.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210812214010.3197279-1-krisman@collabora.com> References: <20210812214010.3197279-1-krisman@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Some file system events (i.e. FS_ERROR) might not be associated with an inode. For these, it makes sense to associate them directly with the super block of the file system they apply to. This patch allows the event to be reported with a NULL inode, by recovering the superblock directly from the data field, if needed. Signed-off-by: Gabriel Krisman Bertazi -- Changes since v5: - add fsnotify_data_sb handle to retrieve sb from the data field. (jan) --- fs/notify/fsnotify.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 30d422b8c0fc..536db02cb26e 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -98,6 +98,14 @@ void fsnotify_sb_delete(struct super_block *sb) fsnotify_clear_marks_by_sb(sb); } +static struct super_block *fsnotify_data_sb(const void *data, int data_type) +{ + struct inode *inode = fsnotify_data_inode(data, data_type); + struct super_block *sb = inode ? inode->i_sb : NULL; + + return sb; +} + /* * Given an inode, first check if we care what happens to our children. Inotify * and dnotify both tell their parents about events. If we care about any event @@ -455,8 +463,10 @@ static void fsnotify_iter_next(struct fsnotify_iter_info *iter_info) * @file_name is relative to * @file_name: optional file name associated with event * @inode: optional inode associated with event - - * either @dir or @inode must be non-NULL. - * if both are non-NULL event may be reported to both. + * If @dir and @inode are NULL, @data must have a type that + * allows retrieving the file system associated with this + * event. if both are non-NULL event may be reported to + * both. * @cookie: inotify rename cookie */ int fsnotify(__u32 mask, const void *data, int data_type, struct inode *dir, @@ -483,7 +493,7 @@ int fsnotify(__u32 mask, const void *data, int data_type, struct inode *dir, */ parent = dir; } - sb = inode->i_sb; + sb = inode ? inode->i_sb : fsnotify_data_sb(data, data_type); /* * Optimization: srcu_read_lock() has a memory barrier which can -- 2.32.0