| From: Charan Teja Kalla <quic_charante@quicinc.com> |
| Subject: mm: fadvise: move 'endbyte' calculations to helper function |
| Date: Tue, 14 Feb 2023 18:21:49 +0530 |
| |
| Patch series "mm: shmem: support POSIX_FADV_[WILL|DONT]NEED for shmem |
| files", v7. |
| |
| This patchset aims to implement POSIX_FADV_WILLNEED and |
| POSIX_FADV_DONTNEED advices to shmem files which can be helpful for the |
| drivers who may want to manage the pages of shmem files on their own, |
| like, that are created through shmem_file_setup[_with_mnt](). |
| |
| |
| This patch (of 2): |
| |
| Move the 'endbyte' calculations that determines last byte that fadvise can |
| to a helper function. This is a preparatory change made for |
| shmem_fadvise() functionality in the next patch. No functional changes in |
| this patch. |
| |
| Link: https://lkml.kernel.org/r/cover.1676378702.git.quic_charante@quicinc.com |
| Link: https://lkml.kernel.org/r/22de7e716051abbafc01fab9f479f4d5b03745ca.1676378702.git.quic_charante@quicinc.com |
| Signed-off-by: Charan Teja Kalla <quic_charante@quicinc.com> |
| Cc: David Rientjes <rientjes@google.com> |
| Cc: Hugh Dickins <hughd@google.com> |
| Cc: Mark Hemment <markhemm@googlemail.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: Pavankumar Kondeti <quic_pkondeti@quicinc.com> |
| Cc: Shakeel Butt <shakeelb@google.com> |
| Cc: Suren Baghdasaryan <surenb@google.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/fadvise.c | 11 +---------- |
| mm/internal.h | 21 +++++++++++++++++++++ |
| 2 files changed, 22 insertions(+), 10 deletions(-) |
| |
| --- a/mm/fadvise.c~mm-fadvise-move-endbyte-calculations-to-helper-function |
| +++ a/mm/fadvise.c |
| @@ -65,16 +65,7 @@ int generic_fadvise(struct file *file, l |
| return 0; |
| } |
| |
| - /* |
| - * Careful about overflows. Len == 0 means "as much as possible". Use |
| - * unsigned math because signed overflows are undefined and UBSan |
| - * complains. |
| - */ |
| - endbyte = (u64)offset + (u64)len; |
| - if (!len || endbyte < len) |
| - endbyte = LLONG_MAX; |
| - else |
| - endbyte--; /* inclusive */ |
| + endbyte = fadvise_calc_endbyte(offset, len); |
| |
| switch (advice) { |
| case POSIX_FADV_NORMAL: |
| --- a/mm/internal.h~mm-fadvise-move-endbyte-calculations-to-helper-function |
| +++ a/mm/internal.h |
| @@ -701,6 +701,27 @@ static inline void vunmap_range_noflush( |
| } |
| #endif /* !CONFIG_MMU */ |
| |
| +/* |
| + * Helper function to get the endbyte of a file that fadvise can operate on. |
| + */ |
| +static inline loff_t fadvise_calc_endbyte(loff_t offset, loff_t len) |
| +{ |
| + loff_t endbyte; |
| + |
| + /* |
| + * Careful about overflows. Len == 0 means "as much as possible". Use |
| + * unsigned math because signed overflows are undefined and UBSan |
| + * complains. |
| + */ |
| + endbyte = (u64)offset + (u64)len; |
| + if (!len || endbyte < len) |
| + endbyte = LLONG_MAX; |
| + else |
| + endbyte--; /* inclusive */ |
| + |
| + return endbyte; |
| +} |
| + |
| /* Memory initialisation debug and verification */ |
| #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT |
| DECLARE_STATIC_KEY_TRUE(deferred_pages); |
| _ |