On Thu, Mar 2, 2023 at 3:28 PM Luis Chamberlain <mcgrof@xxxxxxxxxx> wrote: > > In theory when info->flags & VM_LOCKED we should not be getting > shem_writepage() called so we should be verifying this with a > WARN_ON_ONCE(). Since we should not be swapping then best to ensure > we also don't do the folio split earlier too. So just move the check > early to avoid folio splits in case its a dubious call. > > We also have a similar early bail when !total_swap_pages so just move > that earlier to avoid the possible folio split in the same situation. > > Signed-off-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> Reviewed-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > --- > mm/shmem.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index a5a6da51087e..6006dbb7dbcb 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -1352,6 +1352,12 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc) > goto redirty; > } > > + if (WARN_ON_ONCE(info->flags & VM_LOCKED)) > + goto redirty; > + > + if (!total_swap_pages) > + goto redirty; > + > /* > * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "always" or > * "force", drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages, > @@ -1367,10 +1373,6 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc) > } > > index = folio->index; > - if (info->flags & VM_LOCKED) > - goto redirty; > - if (!total_swap_pages) > - goto redirty; > > /* > * This is somewhat ridiculous, but without plumbing a SWAP_MAP_FALLOC > -- > 2.39.1 >