Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1995887pxb; Sun, 17 Oct 2021 03:10:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyIhTtTIon+Aqodtp3PWOVHPOQoWe91v37gaxmLuaXj0chmRoDvdwuMgrO6IFuheHeOV3dZ X-Received: by 2002:a17:906:8a79:: with SMTP id hy25mr20790198ejc.371.1634465437227; Sun, 17 Oct 2021 03:10:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634465437; cv=none; d=google.com; s=arc-20160816; b=MC36O7wnC4wJJk7KXfe6h4gQ9NiEyuPTTdXTunMm/vaqK9bSVmNY8GZjA+tw6zTMo0 jzL9wqBPXFh8HLkW4sTf4iMpHGykG1alE+FzsUCCeWDicxpms9W3tbpss026FgyQZGlE 9jJKmD7veeuDeQQAUHqFiv6W/88/a/9s8wC0CswFoySShXo5ws9vpiuZji83wfkptZO0 RgdSADW54+o7z0wnJ421WRXEmeawLu8XxW6JmC9YXazxEl3dm2CQ1boFHzWk2XRL1z2O b0mbcKu6mYEDNhOuyNeaYHGPGMLcPeskbD3V/zlhVY6ot4AQnWeTugZ0xW7+ich1Txgf r5Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:message-id:in-reply-to :date:references:organization:subject:cc:to:from; bh=5Jwk6qcCYDxKeyg9EqM7EDBidehhwee3DmVhgS2833s=; b=i2mJtGsK/lU7nMzywk2dQN4KKe/8tpgeUANERRtlLpF2gh1M4/gvkOsTkuyNhw/t4y gvwF8BkU6IVtiUiZcuS/G0GxHd2m0Xncl2vHB6tpBKujma1BlXSngKge3PEYc+FJCIUB gTX0ZtEprUN1GgIH/EywjcVbFS9uVsy1Ewy586sOz8BG9Gn2S7Zcz0gdVDvozLnNxgif Gk0gg14AwZ+5RmVX51EwnN9TSnPimdbvHNPAQotVi1tq2nw3pFfr4n4N2HS5qydsTRrT iOBqV3uL4Ty0EInK33KAbjVNA5BSbXPCWobYtYX8hrPzo1XOniYF9l7Bj5XhOYL9Fl8V eqsA== 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 gb9si18979492ejc.301.2021.10.17.03.10.13; Sun, 17 Oct 2021 03:10:37 -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 S237609AbhJOQ4q (ORCPT + 99 others); Fri, 15 Oct 2021 12:56:46 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:36458 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237622AbhJOQ4p (ORCPT ); Fri, 15 Oct 2021 12:56:45 -0400 Received: from localhost (unknown [IPv6:2804:14c:124:8a08::1007]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: krisman) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 4318E1F45452; Fri, 15 Oct 2021 17:54:37 +0100 (BST) From: Gabriel Krisman Bertazi To: Amir Goldstein Cc: Jan Kara , "Darrick J. Wong" , Theodore Tso , David Howells , Khazhismel Kumykov , linux-fsdevel , Ext4 , Linux API , Matthew Bobrowski , kernel@collabora.com Subject: Re: [PATCH v7 21/28] fanotify: Support merging of error events Organization: Collabora References: <20211014213646.1139469-1-krisman@collabora.com> <20211014213646.1139469-22-krisman@collabora.com> Date: Fri, 15 Oct 2021 13:54:31 -0300 In-Reply-To: (Amir Goldstein's message of "Fri, 15 Oct 2021 10:09:36 +0300") Message-ID: <87pms6p6t4.fsf@collabora.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Amir Goldstein writes: > On Fri, Oct 15, 2021 at 12:39 AM Gabriel Krisman Bertazi > wrote: >> >> Error events (FAN_FS_ERROR) against the same file system can be merged >> by simply iterating the error count. The hash is taken from the fsid, >> without considering the FH. This means that only the first error object >> is reported. >> >> Signed-off-by: Gabriel Krisman Bertazi >> --- >> fs/notify/fanotify/fanotify.c | 39 ++++++++++++++++++++++++++++++++--- >> fs/notify/fanotify/fanotify.h | 4 +++- >> 2 files changed, 39 insertions(+), 4 deletions(-) >> >> diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c >> index 9b970359570a..7032083df62a 100644 >> --- a/fs/notify/fanotify/fanotify.c >> +++ b/fs/notify/fanotify/fanotify.c >> @@ -111,6 +111,16 @@ static bool fanotify_name_event_equal(struct fanotify_name_event *fne1, >> return fanotify_info_equal(info1, info2); >> } >> >> +static bool fanotify_error_event_equal(struct fanotify_error_event *fee1, >> + struct fanotify_error_event *fee2) >> +{ >> + /* Error events against the same file system are always merged. */ >> + if (!fanotify_fsid_equal(&fee1->fsid, &fee2->fsid)) >> + return false; >> + >> + return true; >> +} >> + >> static bool fanotify_should_merge(struct fanotify_event *old, >> struct fanotify_event *new) >> { >> @@ -141,6 +151,9 @@ static bool fanotify_should_merge(struct fanotify_event *old, >> case FANOTIFY_EVENT_TYPE_FID_NAME: >> return fanotify_name_event_equal(FANOTIFY_NE(old), >> FANOTIFY_NE(new)); >> + case FANOTIFY_EVENT_TYPE_FS_ERROR: >> + return fanotify_error_event_equal(FANOTIFY_EE(old), >> + FANOTIFY_EE(new)); >> default: >> WARN_ON_ONCE(1); >> } >> @@ -148,6 +161,22 @@ static bool fanotify_should_merge(struct fanotify_event *old, >> return false; >> } >> >> +static void fanotify_merge_error_event(struct fanotify_error_event *dest, >> + struct fanotify_error_event *origin) >> +{ >> + dest->err_count++; >> +} >> + >> +static void fanotify_merge_event(struct fanotify_event *dest, >> + struct fanotify_event *origin) >> +{ >> + dest->mask |= origin->mask; >> + >> + if (origin->type == FANOTIFY_EVENT_TYPE_FS_ERROR) >> + fanotify_merge_error_event(FANOTIFY_EE(dest), >> + FANOTIFY_EE(origin)); >> +} >> + >> /* Limit event merges to limit CPU overhead per event */ >> #define FANOTIFY_MAX_MERGE_EVENTS 128 >> >> @@ -175,7 +204,7 @@ static int fanotify_merge(struct fsnotify_group *group, >> if (++i > FANOTIFY_MAX_MERGE_EVENTS) >> break; >> if (fanotify_should_merge(old, new)) { >> - old->mask |= new->mask; >> + fanotify_merge_event(old, new); >> return 1; >> } >> } >> @@ -577,7 +606,8 @@ static struct fanotify_event *fanotify_alloc_name_event(struct inode *id, >> static struct fanotify_event *fanotify_alloc_error_event( >> struct fsnotify_group *group, >> __kernel_fsid_t *fsid, >> - const void *data, int data_type) >> + const void *data, int data_type, >> + unsigned int *hash) >> { >> struct fs_error_report *report = >> fsnotify_data_error_report(data, data_type); >> @@ -591,6 +621,9 @@ static struct fanotify_event *fanotify_alloc_error_event( >> return NULL; >> >> fee->fae.type = FANOTIFY_EVENT_TYPE_FS_ERROR; >> + fee->err_count = 1; >> + >> + *hash ^= fanotify_hash_fsid(fsid); >> >> return &fee->fae; >> } > > Forgot to store fee->fsid? Not really. this is part of the FID info record support, which is done in patch 23. -- Gabriel Krisman Bertazi