Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp802673ybk; Wed, 13 May 2020 13:33:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwVFFkf1haK8MlqM19xhte2bCSBxR30KjaQ6fUYHIQltTdS1vEMu41U8b0iYwSeIsjtUt12 X-Received: by 2002:a05:6402:3053:: with SMTP id bu19mr1378367edb.138.1589401995560; Wed, 13 May 2020 13:33:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589401995; cv=none; d=google.com; s=arc-20160816; b=OPPmreccLWJ1HnaHUVQXH263iBmmFUhihir5rJlrK5CvTYdIZiiIySvYoSSIo1E65o /7hV8ruhU/0SS2Uj3APra+hXv4CrP7vWLmZEZRPHFBsU7S/XN4AMEg8lmxS+XHhJQ5tl Z7w3DVZheS4dzDCqrx7/OgL0ZxBcswc2KWUuKZvilCsi8LZQ6/YmQUVjxvZChX6zfBbI 2v72twOIw1MqOHmZEarobNPGd8Pgln88gHGqQmWfKDy9WxjEyasJrauIRexvMT1iKLf4 Z6NttouPgfoba/dRq5+TP9AXxh3I72kFz7LIXUbykw6l8zGzPx+ZgmFJwO+JvfXM62OV 6INw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0u9HZL52n0Om+7h3kL6JAIYc2Odz7DwUTmfp/Lg+BfQ=; b=Bg1bZ6IMOzL7cXBRJupPjOehOdKb7jlRxstpRZCCktoSdxOBFM5pPlCv1hePo+b+Qn 81mlptOo1cIv6j6lJGTfQNcg8bh2SWehbgCTDz/PD8CFtB/CoRBGTAes93xmXbn9kxV5 zoSlCb08PhfMbnpk/fb/63+CjxyoB5vOEdQIvhmopCC83SE8+sM3rTIdmJ4du35bKjtA +N2ZjhS+sWNDZ7f6Dt0Ze0TA6FTwJdRK/+pw1r5UcD8chcYcli2gfaHh4xAq0T4uMXOf 8ecCsFr7fARFnhG2xfRh1+uKUSi0dPRjcwDvKVwhwBRYoEP7oM4g+yxm3qbHFWT0r42p Z8Wg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=sS5etvhv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d9si524783ejy.431.2020.05.13.13.32.52; Wed, 13 May 2020 13:33:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=sS5etvhv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388373AbgEMKBP (ORCPT + 99 others); Wed, 13 May 2020 06:01:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:51822 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387624AbgEMJvP (ORCPT ); Wed, 13 May 2020 05:51:15 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5A5EA20740; Wed, 13 May 2020 09:51:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589363474; bh=iiOvWsJz9xiC3AmULUmzoArSo4nHTVHWNQqV589ZIEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sS5etvhv3B8NJ4LhfMxrvmCt6c8Idoak1L+tdwwIoqZO8FBS5jOmb/wke2cGmh3vJ JrdOk9mYwm4lFOaPVHkBe2MCnc7+NirmDadwMYp5vGsleB57VJUbEBcTRV6czdMXZT RiK7Os2myGTx5268N7gWS+vspYct/NpYhq6cJkfI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Amir Goldstein , Jan Kara , Sasha Levin Subject: [PATCH 5.4 90/90] fanotify: merge duplicate events on parent and child Date: Wed, 13 May 2020 11:45:26 +0200 Message-Id: <20200513094418.515684247@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200513094408.810028856@linuxfoundation.org> References: <20200513094408.810028856@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Amir Goldstein [ Upstream commit f367a62a7cad2447d835a9f14fc63997a9137246 ] With inotify, when a watch is set on a directory and on its child, an event on the child is reported twice, once with wd of the parent watch and once with wd of the child watch without the filename. With fanotify, when a watch is set on a directory and on its child, an event on the child is reported twice, but it has the exact same information - either an open file descriptor of the child or an encoded fid of the child. The reason that the two identical events are not merged is because the object id used for merging events in the queue is the child inode in one event and parent inode in the other. For events with path or dentry data, use the victim inode instead of the watched inode as the object id for event merging, so that the event reported on parent will be merged with the event reported on the child. Link: https://lore.kernel.org/r/20200319151022.31456-9-amir73il@gmail.com Signed-off-by: Amir Goldstein Signed-off-by: Jan Kara Signed-off-by: Sasha Levin --- fs/notify/fanotify/fanotify.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 14d0ac4664595..f5d30573f4a99 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -314,7 +314,12 @@ struct fanotify_event *fanotify_alloc_event(struct fsnotify_group *group, if (!event) goto out; init: __maybe_unused - fsnotify_init_event(&event->fse, (unsigned long)inode); + /* + * Use the victim inode instead of the watching inode as the id for + * event queue, so event reported on parent is merged with event + * reported on child when both directory and child watches exist. + */ + fsnotify_init_event(&event->fse, (unsigned long)id); event->mask = mask; if (FAN_GROUP_FLAG(group, FAN_REPORT_TID)) event->pid = get_pid(task_pid(current)); -- 2.20.1