On Tue, 18 Feb 2025 23:25:31 +0000 Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> wrote: > With the future goal of preventing deadlocks with the shrinker when reclaiming > GEM-allocated memory, a variant of shmem_read_mapping_page_gfp() that does not > sleep when enough memory isn't available, therefore potentially triggering the > shrinker on same driver, is introduced. > > Signed-off-by: Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> > --- > include/linux/shmem_fs.h | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h > index 0b273a7b9f01..5735728aeda2 100644 > --- a/include/linux/shmem_fs.h > +++ b/include/linux/shmem_fs.h > @@ -167,6 +167,13 @@ static inline struct page *shmem_read_mapping_page( > mapping_gfp_mask(mapping)); > } > > +static inline struct page *shmem_read_mapping_page_nonblocking( > + struct address_space *mapping, pgoff_t index) > +{ > + return shmem_read_mapping_page_gfp(mapping, index, > + mapping_gfp_mask(mapping) | GFP_NOWAIT); > +} Just my 2 cents, but I'm not entirely sure it's worth adding a helper for the non-blocking case given we can pretty easily call shmem_read_mapping_page_gfp() with the GFP_NOWAIT addition where needed. > + > static inline bool shmem_file(struct file *file) > { > if (!IS_ENABLED(CONFIG_SHMEM))