Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp1110220pxb; Wed, 6 Apr 2022 08:58:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyjGmeqJuOpD5/VALd2N8VlGa81dBSaXqEyld5KZVp1y3sCodJnC97ftIvQ+KkiW1e3nn8r X-Received: by 2002:a17:902:d482:b0:154:6f46:a602 with SMTP id c2-20020a170902d48200b001546f46a602mr9335234plg.155.1649260731672; Wed, 06 Apr 2022 08:58:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649260731; cv=none; d=google.com; s=arc-20160816; b=lX+rIcwc4n/lhrQ9JNc03kd9hsBmo18It/QU2pMIuM332kUGJfuKbWoe+SGRojRx2r I30ImT2vMXCpNiOzMPwE09iSV8Gf8VDLI51LHQ8ON4mlSxmiovfI5SPBVn22d6MStTzV I6uP1vZU+Ghv+kcxUPRpeaSil/DsdyHSHRJV90RQqBsyvj8OYP8YDICetwrBGC6gAevz upivUcH9HIDxajI+HM4OUhWP5Ndr8ruNnDU/4R+dA2TAyW3t+bePDNN9ITdBCHf8GZIF /g8aAmK/Rw13pcHiyoJSgHWLgskhW9zEWeZuxHneltfbK9fF7VGbXMcT6ghEy5ZNbFfY cklQ== 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 :message-id:in-reply-to:date:references:subject:cc:to:from :dkim-signature:dkim-signature; bh=3Xisg031nvUyjGa8rCi6g+/z5EvYZTh85G/9xqOb5KY=; b=ajBEMi/PqeNw3to3QWIL6GKvBYSWLNa0U3VxqPzO1qQ/inc+oocvK2iuNweIq6EQhs SGRG1NYubUk2IALXoknqLB16n8hWY4vR5/E3fq7A0z9W5zSa2ijorjH+CQzDq3om0wp4 E2NYrxkBUj5gMOnarkl8JliVzJ645HMFttjxLuTtX56GGpWQnqK3/jlslA78Obs/DwZ1 Zfrr3zLAb83ffzWC/YW0pt+yx1dk1Cp3reqszqwuUvbFbjqI+KL6exeyv9RvZ+DR5UIM yZIDfLNXKjFZpTE5d9fZQOL2lDIh0XnvZXIUJzIlMS5ASiTb6KR6J2SI2cM7q/jW6Hkg 5VOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b="P/2Ym6ZL"; dkim=neutral (no key) header.i=@suse.de header.b=vigZobKf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id b13-20020a63714d000000b003816043efe9si18782419pgn.478.2022.04.06.08.58.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 08:58:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b="P/2Ym6ZL"; dkim=neutral (no key) header.i=@suse.de header.b=vigZobKf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CE2494C2676; Wed, 6 Apr 2022 07:53:09 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235196AbiDFOy6 (ORCPT + 99 others); Wed, 6 Apr 2022 10:54:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235238AbiDFOyW (ORCPT ); Wed, 6 Apr 2022 10:54:22 -0400 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE741608C05; Wed, 6 Apr 2022 04:32:50 -0700 (PDT) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id A39EF1F858; Wed, 6 Apr 2022 11:32:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1649244767; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3Xisg031nvUyjGa8rCi6g+/z5EvYZTh85G/9xqOb5KY=; b=P/2Ym6ZL6GdwRefQpv/AEkV8+b4JtOemLvBrqv7RjuD2PfNcJpOfI564pSYltQEcy5BwsY Eu6IOAw83soFaggPo3L0EPH/DUt22OI4vFkCZaFECXqiPUsGpfH4pF6bPfpqnY7LnvcFED 1ayP1Qwm9A/UrdjRKmxvE7Yfzzonp98= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1649244767; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3Xisg031nvUyjGa8rCi6g+/z5EvYZTh85G/9xqOb5KY=; b=vigZobKfTvpGZEYPPCz/hre6y0dvlKsE+qj6qu4Xqu+34dqKdh1/zdH4dAAVBqd/Ov4KA+ WonnjSEUQfLHxdAQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 3D96A139F5; Wed, 6 Apr 2022 11:32:47 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id ziL9C196TWIkRgAAMHmgww (envelope-from ); Wed, 06 Apr 2022 11:32:47 +0000 Received: from localhost (brahms.olymp [local]) by brahms.olymp (OpenSMTPD) with ESMTPA id b51e56ad; Wed, 6 Apr 2022 11:33:11 +0000 (UTC) From: =?utf-8?Q?Lu=C3=ADs_Henriques?= To: Xiubo Li Cc: Jeff Layton , Ilya Dryomov , ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] ceph: invalidate pages when doing DIO in encrypted inodes References: <20220401133243.1075-1-lhenriques@suse.de> <878rsia391.fsf@brahms.olymp> <6ba91390-83e8-8702-2729-dc432abd3cc5@redhat.com> Date: Wed, 06 Apr 2022 12:33:11 +0100 In-Reply-To: <6ba91390-83e8-8702-2729-dc432abd3cc5@redhat.com> (Xiubo Li's message of "Wed, 6 Apr 2022 19:18:04 +0800") Message-ID: <87zgky8n0o.fsf@brahms.olymp> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Xiubo Li writes: > On 4/6/22 6:57 PM, Lu=C3=ADs Henriques wrote: >> Xiubo Li writes: >> >>> On 4/1/22 9:32 PM, Lu=C3=ADs Henriques wrote: >>>> When doing DIO on an encrypted node, we need to invalidate the page ca= che in >>>> the range being written to, otherwise the cache will include invalid d= ata. >>>> >>>> Signed-off-by: Lu=C3=ADs Henriques >>>> --- >>>> fs/ceph/file.c | 11 ++++++++++- >>>> 1 file changed, 10 insertions(+), 1 deletion(-) >>>> >>>> Changes since v1: >>>> - Replaced truncate_inode_pages_range() by invalidate_inode_pages2_ran= ge >>>> - Call fscache_invalidate with FSCACHE_INVAL_DIO_WRITE if we're doing = DIO >>>> >>>> Note: I'm not really sure this last change is required, it doesn't rea= lly >>>> affect generic/647 result, but seems to be the most correct. >>>> >>>> diff --git a/fs/ceph/file.c b/fs/ceph/file.c >>>> index 5072570c2203..b2743c342305 100644 >>>> --- a/fs/ceph/file.c >>>> +++ b/fs/ceph/file.c >>>> @@ -1605,7 +1605,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_i= ter *from, loff_t pos, >>>> if (ret < 0) >>>> return ret; >>>> - ceph_fscache_invalidate(inode, false); >>>> + ceph_fscache_invalidate(inode, (iocb->ki_flags & IOCB_DIRECT)); >>>> ret =3D invalidate_inode_pages2_range(inode->i_mapping, >>>> pos >> PAGE_SHIFT, >>>> (pos + count - 1) >> PAGE_SHIFT); >>> The above has already invalidated the pages, why doesn't it work ? >> I suspect the reason is because later on we loop through the number of >> pages, call copy_page_from_iter() and then ceph_fscrypt_encrypt_pages(). > > Checked the 'copy_page_from_iter()', it will do the kmap for the pages bu= t will > kunmap them again later. And they shouldn't update the i_mapping if I did= n't > miss something important. > > For 'ceph_fscrypt_encrypt_pages()' it will encrypt/dencrypt the context i= nplace, > IMO if it needs to map the page and it should also unmap it just like in > 'copy_page_from_iter()'. > > I thought it possibly be when we need to do RMW, it may will update the > i_mapping when reading contents, but I checked the code didn't find any=20 > place is doing this. So I am wondering where tha page caches come from ? = If that > page caches really from reading the contents, then we should discard it i= nstead > of flushing it back ? > > BTW, what's the problem without this fixing ? xfstest fails ? Yes, generic/647 fails if you run it with test_dummy_encryption. And I've also checked that the RMW code was never executed in this test. But yeah I have assumed (perhaps wrongly) that the kmap/kunmap could change the inode->i_mapping. In my debugging this seemed to be the case for the O_DIRECT path. That's why I added this extra call here. Cheers, --=20 Lu=C3=ADs