From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59180C46CD2 for ; Tue, 2 Jan 2024 20:37:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D952E6B025A; Tue, 2 Jan 2024 15:37:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D1E246B025F; Tue, 2 Jan 2024 15:37:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BBEEF6B026A; Tue, 2 Jan 2024 15:37:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id A9E146B025A for ; Tue, 2 Jan 2024 15:37:34 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 7BAFC1A08AF for ; Tue, 2 Jan 2024 20:37:34 +0000 (UTC) X-FDA: 81635531628.09.302ABEA Received: from out30-99.freemail.mail.aliyun.com (out30-99.freemail.mail.aliyun.com [115.124.30.99]) by imf27.hostedemail.com (Postfix) with ESMTP id 4A0AC40010 for ; Tue, 2 Jan 2024 20:37:29 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf27.hostedemail.com: domain of hsiangkao@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=hsiangkao@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704227851; h=from:from:sender:reply-to:subject:subject: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=Ecs7Pd1oZ0RMqk2CqEFJ9DnjS0hihONiLG8VLGRjLJU=; b=yrXUIIVvmOi8U8cqunVMhB8HCdJ9hGiLiP/X3ALbfsGYfOD9A4fS5FPlxoMtIN8nwzUq+y SzRgfr7/Hhr+yqgVqp9dUWBuEittKoer0qFdALuUGyaHvgWYQqCmL7qz527OBT6DVdLeyz TJBEuJwrq5LlxtyfDNgJ1hsFiHxroc8= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=alibaba.com; spf=pass (imf27.hostedemail.com: domain of hsiangkao@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=hsiangkao@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704227851; a=rsa-sha256; cv=none; b=UgprcBlVpugQKHaDN7pIeRvS25r/zokUPu2w2a/u7E8G4ReYHBCqWjNs8K12JJ4KEVvGqS dnqLkoHGqLhFyfX+kkiYznfwLxeRmMyFokH27uGm/pu93nzxC4sm+FjTiyiHrycf32taWY M/InTOCzBoIDEzQa8BLl8VPXkmK3zR8= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R951e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046049;MF=hsiangkao@linux.alibaba.com;NM=1;PH=DS;RN=26;SR=0;TI=SMTPD_---0VzrTmRn_1704227842; Received: from 30.25.242.23(mailfrom:hsiangkao@linux.alibaba.com fp:SMTPD_---0VzrTmRn_1704227842) by smtp.aliyun-inc.com; Wed, 03 Jan 2024 04:37:25 +0800 Message-ID: Date: Wed, 3 Jan 2024 04:37:22 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 33/40] netfs, cachefiles: Pass upper bound length to allow expansion To: David Howells Cc: Matthew Wilcox , Marc Dionne , Paulo Alcantara , Shyam Prasad N , Tom Talpey , Dominique Martinet , Eric Van Hensbergen , Ilya Dryomov , Christian Brauner , linux-cachefs@redhat.com, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton , Steve French , Jeffle Xu , Jia Zhu , Xin Yin , Yiqun Leng References: <750e8251-ba30-4f53-a17b-73c79e3739ce@linux.alibaba.com> <20231221132400.1601991-1-dhowells@redhat.com> <20231221132400.1601991-34-dhowells@redhat.com> <198744.1704215477@warthog.procyon.org.uk> From: Gao Xiang In-Reply-To: <198744.1704215477@warthog.procyon.org.uk> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: doiqxdxcn7iawg6k9zrqi5cw17axsmhb X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 4A0AC40010 X-HE-Tag: 1704227849-658482 X-HE-Meta: U2FsdGVkX19RPBvtEfcy5QfgYpSLPdqPLBEM9IrKSatF/4eB+XzEYeXpnUSlGadF+cIGf/BUgrWH6n7/gAJaJMfoTcY1Xb4EBXVJwBjq0HAeJauRbnKOCVyVsg2VdPGv/1APC0DfkQSLa2A17UOSzMU3khuXKNAiBep68KE55MVFPFlDs15mOz1jvdPWzdWtvt3o7cZggCpPcNNrWI/cqiXpQdYv92fvxQh7Syp4Wf5pVQ2aaYUX4Vmp/dYamI84kWyYvn78tFXwJUCViNPzHoHYlxo5Yh6qIjofADddhOJgTYXz7QwQz2Md+Bv8+ypPFnSsX1oYM8z8ZqK76wVj5CcnrTD6p6gLEBZf4pXqza5tKp8fkMP5Cfh56x5EQBETXHLoc2VyvPrZ52aW/cgvhcLm0Kpqd1EzdKhSG1FfoUcg0vmr6NFmgtEl2JxCHTbXR3kqz2NbefXum8i6FEl1JC+H5+hDPT/3UiKXVcunuer0ZRG0y6hGzac+RvZcvPz+6gELIGSpRRJiTBO52HwYQRhUyN+eoj/16HR4f7FnjXRylu0aBzkdS4A65/5dD7cLxKbUyJwOmx/o3TrLYtpHxRUF+URaUHmsF1v5neCOx/1wiS/Wn5FIo262hUKMlt/GqNlfFpUVonY21QggGWPtolxXOjjAPVQi1zECCRu9eToW8AU6qUbnATySG4EXR0PeqDi3Tyd0NcyS2975DuOWZ0J6JRsjBjAkmOfs2IDe5g4S9mS7FArrdI7zQNgJhZ1uEmc5LxNCtjZj06r3pOdB/tiDW2wlv+CvWHvklKj4HtpcCKyhvMzDWrJH2j+1lilMLPaGIpZl3DQpOKjjMlxgoOKtUZ7IYnXlM4KqlyCwvQkZ+FQKeaDE3LaAFftvnJ3BmMaIFvXH7eyrfAa+x+0h5YIDzPOmdPrN5znEunAODaoU7u1DX28MWfEgpNSMK6zFBWBRkdi35wgdiQ4JU3n 8QwfMuQP 9QR48fzAArEerkX+6ODXrkoToU3kcp+TOOiudADev3Mukf85ZdGsyHmMYWsxXU1LE5eh/qGW2tJCU2JRyibPypmtkqewXBubTTRf/LiNsdkiGbajbVZPXsSF6/ofivHenlUBjW7nuAkEKsZutNQej4Vli/Zqd68cJfHt3utDGl5kpFuW2ltnPf7LVo5OC04BtoSUM2iiWXijOpO6gzdHUKfYllgYR9R2QLKlmG6HhzIEoG8U= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 2024/1/3 01:11, David Howells wrote: > Gao Xiang wrote: > >>> down = start - round_down(start, PAGE_SIZE); >>> *_start = start - down; >>> *_len = round_up(down + len, PAGE_SIZE); >>> + if (down < start || *_len > upper_len) >>> + return -ENOBUFS; >> >> Sorry for bothering. We just found some strange when testing >> today-next EROFS over fscache. >> >> I'm not sure the meaning of >> if (down < start >> >> For example, if start is page-aligned, down == 0. >> >> so as long as start > 0 and page-aligned, it will return >> -ENOBUFS. Does it an intended behavior? > > Yeah, I think that's wrong. > > Does the attached help? (+cc more people for testing) Will test and feedback later. Thanks, Gao Xiang > > David > --- > > diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c > index bffffedce4a9..7529b40bc95a 100644 > --- a/fs/cachefiles/io.c > +++ b/fs/cachefiles/io.c > @@ -522,16 +522,22 @@ int __cachefiles_prepare_write(struct cachefiles_object *object, > bool no_space_allocated_yet) > { > struct cachefiles_cache *cache = object->volume->cache; > - loff_t start = *_start, pos; > - size_t len = *_len, down; > + unsigned long long start = *_start, pos; > + size_t len = *_len; > int ret; > > /* Round to DIO size */ > - down = start - round_down(start, PAGE_SIZE); > - *_start = start - down; > - *_len = round_up(down + len, PAGE_SIZE); > - if (down < start || *_len > upper_len) > + start = round_down(*_start, PAGE_SIZE); > + if (start != *_start) { > + kleave(" = -ENOBUFS [down]"); > + return -ENOBUFS; > + } > + if (*_len > upper_len) { > + kleave(" = -ENOBUFS [up]"); > return -ENOBUFS; > + } > + > + *_len = round_up(len, PAGE_SIZE); > > /* We need to work out whether there's sufficient disk space to perform > * the write - but we can skip that check if we have space already > @@ -542,7 +548,7 @@ int __cachefiles_prepare_write(struct cachefiles_object *object, > > pos = cachefiles_inject_read_error(); > if (pos == 0) > - pos = vfs_llseek(file, *_start, SEEK_DATA); > + pos = vfs_llseek(file, start, SEEK_DATA); > if (pos < 0 && pos >= (loff_t)-MAX_ERRNO) { > if (pos == -ENXIO) > goto check_space; /* Unallocated tail */ > @@ -550,7 +556,7 @@ int __cachefiles_prepare_write(struct cachefiles_object *object, > cachefiles_trace_seek_error); > return pos; > } > - if ((u64)pos >= (u64)*_start + *_len) > + if (pos >= start + *_len) > goto check_space; /* Unallocated region */ > > /* We have a block that's at least partially filled - if we're low on > @@ -563,13 +569,13 @@ int __cachefiles_prepare_write(struct cachefiles_object *object, > > pos = cachefiles_inject_read_error(); > if (pos == 0) > - pos = vfs_llseek(file, *_start, SEEK_HOLE); > + pos = vfs_llseek(file, start, SEEK_HOLE); > if (pos < 0 && pos >= (loff_t)-MAX_ERRNO) { > trace_cachefiles_io_error(object, file_inode(file), pos, > cachefiles_trace_seek_error); > return pos; > } > - if ((u64)pos >= (u64)*_start + *_len) > + if (pos >= start + *_len) > return 0; /* Fully allocated */ > > /* Partially allocated, but insufficient space: cull. */ > @@ -577,7 +583,7 @@ int __cachefiles_prepare_write(struct cachefiles_object *object, > ret = cachefiles_inject_remove_error(); > if (ret == 0) > ret = vfs_fallocate(file, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, > - *_start, *_len); > + start, *_len); > if (ret < 0) { > trace_cachefiles_io_error(object, file_inode(file), ret, > cachefiles_trace_fallocate_error); >