All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Luís Henriques" <lhenriques@suse.de>
To: Xiubo Li <xiubli@redhat.com>
Cc: Jeff Layton <jlayton@kernel.org>,
	Ilya Dryomov <idryomov@gmail.com>,
	ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] ceph: invalidate pages when doing direct/sync writes
Date: Thu, 07 Apr 2022 16:05:04 +0100	[thread overview]
Message-ID: <87fsmp7x3z.fsf@brahms.olymp> (raw)
In-Reply-To: <253c9edf-01c5-40a3-3a11-738f29df8142@redhat.com> (Xiubo Li's message of "Thu, 7 Apr 2022 22:48:20 +0800")

Xiubo Li <xiubli@redhat.com> writes:

> On 4/7/22 10:38 PM, Luís Henriques wrote:
>> When doing a direct/sync write, we need to invalidate the page cache in
>> the range being written to.  If we don't do this, the cache will include
>> invalid data as we just did a write that avoided the page cache.
>>
>> Signed-off-by: Luís Henriques <lhenriques@suse.de>
>> ---
>>   fs/ceph/file.c | 9 +++++++++
>>   1 file changed, 9 insertions(+)
>>
>> Ok, here's a new attempt.  After discussion in this thread and on IRC, I
>> think this is the right fix.  generic/647 now passes with and without
>> encryption.  Thanks!
>>
>> Changes since v2:
>> - Invalidation needs to be done after a write
>>
>> Changes since v1:
>> - Replaced truncate_inode_pages_range() by invalidate_inode_pages2_range
>> - Call fscache_invalidate with FSCACHE_INVAL_DIO_WRITE if we're doing DIO
>>
>> diff --git a/fs/ceph/file.c b/fs/ceph/file.c
>> index 5072570c2203..63e67eb60310 100644
>> --- a/fs/ceph/file.c
>> +++ b/fs/ceph/file.c
>> @@ -1938,6 +1938,15 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
>>   			break;
>>   		}
>>   		ceph_clear_error_write(ci);
>> +		ret = invalidate_inode_pages2_range(
>> +				inode->i_mapping,
>> +				pos >> PAGE_SHIFT,
>> +				(pos + len - 1) >> PAGE_SHIFT);
>> +		if (ret < 0) {
>> +			dout("invalidate_inode_pages2_range returned %d\n",
>> +			     ret);
>> +			ret = 0;
>> +		}
>>   		pos += len;
>>   		written += len;
>>   		dout("sync_write written %d\n", written);
>>
> LGTM.
>
> Maybe it worth adding a comment to explain why we need this and where the
> mapping come from ?
>
> Reviewed-by: Xiubo Li <xiubli@redhat.com>
>

Sure, I'll send out v4 with an extra comment.  Thanks.

Cheers,
-- 
Luís

      reply	other threads:[~2022-04-07 15:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-07 14:38 [PATCH v3] ceph: invalidate pages when doing direct/sync writes Luís Henriques
2022-04-07 14:42 ` Jeff Layton
2022-04-07 15:03   ` Luís Henriques
2022-04-07 14:48 ` Xiubo Li
2022-04-07 15:05   ` Luís Henriques [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fsmp7x3z.fsf@brahms.olymp \
    --to=lhenriques@suse.de \
    --cc=ceph-devel@vger.kernel.org \
    --cc=idryomov@gmail.com \
    --cc=jlayton@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=xiubli@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.