diff
+#define WITH_SHARED_LOCK(mapping, code) \
+    do { \
+        if (filemap_invalidate_lock_shared(mapping) == 0) { \
+            code; \
+            filemap_invalidate_unlock_shared(mapping); \
+        } else { \
+            // Handle lock acquisition failure \
+        } \
+    } while (0)
+
 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);
+    WITH_SHARED_LOCK(mapping, {
+        // ... (loop and related code)
+    });
 }
