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 BD6B4C47074 for ; Sun, 7 Jan 2024 16:09:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E112F6B0071; Sun, 7 Jan 2024 11:09:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DC0D46B0072; Sun, 7 Jan 2024 11:09:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C897B6B0074; Sun, 7 Jan 2024 11:09:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B28016B0071 for ; Sun, 7 Jan 2024 11:09:32 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 75625806B1 for ; Sun, 7 Jan 2024 16:09:32 +0000 (UTC) X-FDA: 81653000184.19.EA94607 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf05.hostedemail.com (Postfix) with ESMTP id 1763F100021 for ; Sun, 7 Jan 2024 16:09:28 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Je4QSk1X; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf05.hostedemail.com: domain of horms@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=horms@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704643769; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=h+oasDXAXyPeTpE3l+Jn7vwU0OtsAxsVNH6ZS+6AoWI=; b=NidQ0VOHuxWWITNLoV99iX4q8NDM4fXdRZzRarndrXVwq403uc5JYlpCZcSd8+G1mg6cUM xyO1JgUDt9KeUiPmo+2kfbnMUMlkA1i4pCL5i642YHkcm/hHCwU5stSZuybUtjPbwRxD99 3Jk4c5q0xiqx4JgzTnNBGdNACevxoGc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Je4QSk1X; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf05.hostedemail.com: domain of horms@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=horms@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704643769; a=rsa-sha256; cv=none; b=QXNtdStUrHt6uFQKwwwjxy6OEraCZ+Ygf2KMadyq+gm88a6RDfvryVc5Rn3RvfPBn7+b0W L2LEPt0iBmFf7hr2JPpz7PJXboXfSwy/qHGzZKZxjkrG+1Zy6b7h6W0yQnsFHW8dqBqIlZ sOelupiXOEO2PVlWISXq4EA1oFAd9bA= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 63A35CE0B6E; Sun, 7 Jan 2024 16:09:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3CDAAC433C8; Sun, 7 Jan 2024 16:09:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704643764; bh=vtEdJ8x0t9Cig7F/OQ58765CvJpN5U3pnuPNn8bEtX0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Je4QSk1Xsi5jvomPOikxCGlVFwk8iqkAbNF6aVYGaBGYI1jkUw+CADMBs0/wZQr36 xy22SDkRZMP5sMid5EvoeH3h/Kwf68Tcbn77GX8EDm+cjFQlFTs6TguY93Et6BFDPv UlIs+e2Jheeb2/ck0biFbtZrf0Vw9LMCbIX3TaJmqJZgdrEhhfSfxUMIfjU8lZxJF7 Q+aCdvG3kA6VLZkjLHS+Vga8pwGe2Z6VghL3LobYtAq3sM2rUGAW8uNlztGT7uqIEc x+WdUyce0Wh+SeZcYOdm2MG39rO2B8pkIyqp3viKoDClILrK1BwA1eJJXlvP2hGICM kq7yyH7rMCZgg== Date: Sun, 7 Jan 2024 16:09:16 +0000 From: Simon Horman To: David Howells Cc: Christian Brauner , Jeff Layton , Gao Xiang , Dominique Martinet , Steve French , Matthew Wilcox , Marc Dionne , Paulo Alcantara , Shyam Prasad N , Tom Talpey , Eric Van Hensbergen , Ilya Dryomov , 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-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Yiqun Leng , Jia Zhu Subject: Re: [PATCH 1/5] cachefiles: Fix __cachefiles_prepare_write() Message-ID: <20240107160916.GA129355@kernel.org> References: <20240103145935.384404-1-dhowells@redhat.com> <20240103145935.384404-2-dhowells@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240103145935.384404-2-dhowells@redhat.com> X-Rspamd-Queue-Id: 1763F100021 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: oedawihoar75h6co6isw7g8dhcmjg8h9 X-HE-Tag: 1704643768-368581 X-HE-Meta: U2FsdGVkX1/S4YDQMoDXlQrB5jTEVojgbWfRpKJuKp8xkHOh9n64ijQQQnTVpO1g7W4+3Zbv++U1CD9sqMz3zNe9FGpevobOO4AQ7lvji+G8oyrV1M0TB7Y46aQfoTL8AIJcy2FUpsL7F3cp00o5fOU+9RQNxOfOjfaOckEARoDa/bB+UVPCU6yNe038QBbKgDRCiHp76go/bxRMgxxpnNcbRatmL0pJTvXUWik60O7Yj/JlTayltvQSxuUmB04C9VYVPdKuthCGk+XS9SKzjtVMpONGvp0goLsJJGZLkMH8qp8evfXq1n41NcnoYMd1oaQEa8GoLZ/pXfFEF4AzoK2PlPY7CiXddyEZmSf8xx1JE90vrtP5ZYIW2CQqBCuZxgoKowAfEdz72yekqSX8idNReFyiZMUtQAgermX8FOkdIxrRDIWoJu7/2pYytZLeYRD31jNA6VilH+L4tx4KMTXxVdsUqrPg4FQzrnStOW1UgDLAYIwJJXfg9VTNuVXzbXhBlQZZn7rxZtEG0LSEYbb18PdHFu/5XLulDHdeuHO+CvgeFg7xsZOkTHEanFZ05uKZGeejIwIX016CDZTLhi39i2+hCFiZ01KDLGdRwqDzy3obNAQI8lNpTSW0c1EKmVQydSl+3BECIKPeOeM2om5vbnVZebbsLQH6w7l5gWziuxVYKaqkjkVmmwzV3yUlt0v054gLKjoehTqOndhQKDivhQKRVyjIrxKKmw0c5MkxLH2RYsC3i5KqCEaK6xutsYq7L6khIFrCET6LiB75CBb4r6ISjJ+6/c4z1bh/qRGeOlbNCAe0SKEoLP2Ik6+mCS+Zvdfex7x3rQ8ZjSUBCgbPhEUt1DoRHBvCK9sX6twRKBEyHE6SjtBJRyNAw2oVkIFeH6sa+XFEEWHYIC/+EHl+YgbZQdnjEwOInlBAMkm+0xt9uMZl0mAJUp20wdqHLrLtfXXUZFtngIIJzLp MyrJpClE zO2S7bHj9RIQmBe7E9jPS7eQnaog9IGtOBemrKD+Q9epin0PfrYKDUaEwBben+e8EdYnnqB7amLl3KFCXb1eZfv9j1XIsxRUY4M6nCM839irCnsJGfd8fFMAN0eLq/VB72QqZ9zy2Ds/TfKl8VsNcNGhU737So3eVNQOW/w53R5su/2OSMLC9rbtL02SuGmaiUTUOccbjyZzj5bBdeJKU/oyk1RvrrPxSgebn3WKlYyI8V1M1q2rB1fnDm83DFjIndwZ3wbrnkC6BAWuN/L5eu11pxyqaN4jSSldJhZPoMaiX8Cm64N0/TfZk5YtaZ50zRWyR2oWnvnX1dT9IY7rMi1LIzGqDEAydb6s+cTaR4sgR0IWXZsDDaJ/GUiyAnp1eV0w4wxxy7SVJe3R8YdkHKPLiscS/YyZ5HdeM9YaZLAaDpdvwL/7/CtpUlMEz8yZfB+g7rYBeVYZaKAvMdcjWOITUplhLEzn4s0JqKs0v9aoZUIRb2Qb0eyHnWVOnvd0T0x1F4WOJy7Y9KGM= 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 Wed, Jan 03, 2024 at 02:59:25PM +0000, David Howells wrote: > Fix __cachefiles_prepare_write() to correctly determine whether the > requested write will fit correctly with the DIO alignment. > > Reported-by: Gao Xiang > Signed-off-by: David Howells > Tested-by: Yiqun Leng > Tested-by: Jia Zhu > cc: Jeff Layton > cc: linux-cachefs@redhat.com > cc: linux-erofs@lists.ozlabs.org > cc: linux-fsdevel@vger.kernel.org > cc: linux-mm@kvack.org > --- > fs/cachefiles/io.c | 28 +++++++++++++++++----------- > 1 file changed, 17 insertions(+), 11 deletions(-) > > 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) { Hi David, I realise these patches have been accepted, but I have a minor nit: pos is now unsigned, and so cannot be less than zero. Flagged by Smatch and Coccinelle. > 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) { Ditto. > 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); >