/*
         * At first avoid shmem_get_folio(,,,SGP_READ): that fails
-        * beyond i_size, and reports fallocated pages as holes.
+        * beyond i_size, and reports fallocated folios as holes.
         */
-       folio = __filemap_get_folio(inode->i_mapping, index,
-                                       FGP_ENTRY | FGP_LOCK, 0);
-       if (!xa_is_value(folio))
+       folio = filemap_get_entry(inode->i_mapping, index);
+       if (!folio)
                return folio;
+       if (!xa_is_value(folio)) {
+               folio_lock(folio);
+               if (folio->mapping == inode->i_mapping)
+                       return folio;
+               /* The folio has been swapped out */
+               folio_unlock(folio);
+               folio_put(folio);
+       }
        /*
-        * But read a page back from swap if any of it is within i_size
+        * But read a folio back from swap if any of it is within i_size
         * (although in some cases this is just a waste of time).
         */
        folio = NULL;