diff
+static void do_locked_operations(struct readahead_control *ractl,
+                                 struct file_ra_state *ra,
+                                 struct address_space *mapping,
+                                 pgoff_t index, pgoff_t limit, pgoff_t mark,
+                                 unsigned int new_order, gfp_t gfp)
+{
+    // ... (move the loop and related code here)
+}
+
 void page_cache_ra_order(struct readahead_control *ractl,
 		struct file_ra_state *ra, unsigned int new_order)
 {
     // ... (existing code)
-    filemap_invalidate_lock_shared(mapping);
-    // ... (loop and related code)
-    filemap_invalidate_unlock_shared(mapping);
+    if (filemap_invalidate_lock_shared(mapping) == 0) {
+        do_locked_operations(ractl, ra, mapping, index, limit, mark, new_order, gfp);
+        filemap_invalidate_unlock_shared(mapping);
+    } else {
+        // Handle lock acquisition failure
+    }
 }
