From: "Darrick J. Wong" <djwong@kernel.org>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>, Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH] fs: Add uoff_t
Date: Tue, 18 Nov 2025 07:57:54 -0800 [thread overview]
Message-ID: <20251118155754.GC196362@frogsfrogsfrogs> (raw)
In-Reply-To: <20251118152935.3735484-1-willy@infradead.org>
On Tue, Nov 18, 2025 at 03:29:33PM +0000, Matthew Wilcox (Oracle) wrote:
> In a recent commit, I inadvertently changed a comparison from being an
> unsigned comparison (on 64-bit systems) to being a signed comparison
> (which it had always been on 32-bit systems). This led to a sporadic
> fstests failure.
>
> To make sure this comparison is always unsigned, introduce a new type,
> uoff_t which is the unsigned version of loff_t. Generally file sizes
> are restricted to being a signed integer, but in these two places it is
> convenient to pass -1 to indicate "up to the end of the file".
Soo... truncate_inode_pages passes 16EB as the lend parameter to
truncate_inode_pages_range now? I suppose that makes sense, though the
casting to loff_t by that caller no longer does...
--D
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
> include/linux/mm.h | 8 ++++----
> include/linux/shmem_fs.h | 2 +-
> include/linux/types.h | 1 +
> include/uapi/asm-generic/posix_types.h | 1 +
> mm/shmem.c | 4 ++--
> mm/truncate.c | 2 +-
> 6 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index fe995cc3ba5c..a69ab017c370 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -3650,10 +3650,10 @@ struct vm_unmapped_area_info {
> extern unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info);
>
> /* truncate.c */
> -extern void truncate_inode_pages(struct address_space *, loff_t);
> -extern void truncate_inode_pages_range(struct address_space *,
> - loff_t lstart, loff_t lend);
> -extern void truncate_inode_pages_final(struct address_space *);
> +void truncate_inode_pages(struct address_space *mapping, loff_t lstart);
> +void truncate_inode_pages_range(struct address_space *mapping, loff_t lstart,
> + uoff_t lend);
> +void truncate_inode_pages_final(struct address_space *mapping);
>
> /* generic vm_area_ops exported for stackable file systems */
> extern vm_fault_t filemap_fault(struct vm_fault *vmf);
> diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
> index 08f497673b06..94c6237acdc9 100644
> --- a/include/linux/shmem_fs.h
> +++ b/include/linux/shmem_fs.h
> @@ -126,7 +126,7 @@ struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
> pgoff_t index, gfp_t gfp_mask);
> int shmem_writeout(struct folio *folio, struct swap_iocb **plug,
> struct list_head *folio_list);
> -void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
> +void shmem_truncate_range(struct inode *inode, loff_t start, uoff_t end);
> int shmem_unuse(unsigned int type);
>
> #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> diff --git a/include/linux/types.h b/include/linux/types.h
> index 6dfdb8e8e4c3..d4437e9c452c 100644
> --- a/include/linux/types.h
> +++ b/include/linux/types.h
> @@ -50,6 +50,7 @@ typedef __kernel_old_gid_t old_gid_t;
>
> #if defined(__GNUC__)
> typedef __kernel_loff_t loff_t;
> +typedef __kernel_uoff_t uoff_t;
> #endif
>
> /*
> diff --git a/include/uapi/asm-generic/posix_types.h b/include/uapi/asm-generic/posix_types.h
> index b5f7594eee7a..0a90ad92dbf3 100644
> --- a/include/uapi/asm-generic/posix_types.h
> +++ b/include/uapi/asm-generic/posix_types.h
> @@ -86,6 +86,7 @@ typedef struct {
> */
> typedef __kernel_long_t __kernel_off_t;
> typedef long long __kernel_loff_t;
> +typedef unsigned long long __kernel_uoff_t;
> typedef __kernel_long_t __kernel_old_time_t;
> #ifndef __KERNEL__
> typedef __kernel_long_t __kernel_time_t;
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 0a25ee095b86..728f2e04911e 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1105,7 +1105,7 @@ static struct folio *shmem_get_partial_folio(struct inode *inode, pgoff_t index)
> * Remove range of pages and swap entries from page cache, and free them.
> * If !unfalloc, truncate or punch hole; if unfalloc, undo failed fallocate.
> */
> -static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
> +static void shmem_undo_range(struct inode *inode, loff_t lstart, uoff_t lend,
> bool unfalloc)
> {
> struct address_space *mapping = inode->i_mapping;
> @@ -1256,7 +1256,7 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
> shmem_recalc_inode(inode, 0, -nr_swaps_freed);
> }
>
> -void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
> +void shmem_truncate_range(struct inode *inode, loff_t lstart, uoff_t lend)
> {
> shmem_undo_range(inode, lstart, lend, false);
> inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
> diff --git a/mm/truncate.c b/mm/truncate.c
> index d08340afc768..12467c1bd711 100644
> --- a/mm/truncate.c
> +++ b/mm/truncate.c
> @@ -364,7 +364,7 @@ long mapping_evict_folio(struct address_space *mapping, struct folio *folio)
> * page aligned properly.
> */
> void truncate_inode_pages_range(struct address_space *mapping,
> - loff_t lstart, loff_t lend)
> + loff_t lstart, uoff_t lend)
> {
> pgoff_t start; /* inclusive */
> pgoff_t end; /* exclusive */
> --
> 2.47.2
>
>
next prev parent reply other threads:[~2025-11-18 15:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-18 15:29 [PATCH] fs: Add uoff_t Matthew Wilcox (Oracle)
2025-11-18 15:57 ` Darrick J. Wong [this message]
2025-11-18 16:46 ` kernel test robot
2025-11-19 2:19 ` kernel test robot
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=20251118155754.GC196362@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=brauner@kernel.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
/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.