/*
  * When we get a swap entry, if there aren't some other ways to
- * prevent swapoff, such as the folio in swap cache is locked, page
- * table lock is held, etc., the swap entry may become invalid because
- * of swapoff.  Then, we need to enclose all swap related functions
- * with get_swap_device() and put_swap_device(), unless the swap
- * functions call get/put_swap_device() by themselves.
+ * prevent swapoff, such as the folio in swap cache is locked, RCU
+ * reader side is locked, etc., the swap entry may become invalid
+ * because of swapoff.  Then, we need to enclose all swap related
+ * functions with get_swap_device() and put_swap_device(), unless the
+ * swap functions call get/put_swap_device() by themselves.
  *
- * Note that when only holding the PTL, swapoff might succeed immediately
- * after freeing a swap entry. Therefore, immediately after
- * __swap_entry_free(), the swap info might become stale and should not
- * be touched without a prior get_swap_device().
+ * RCU reader side lock (including any spinlock) is sufficient to
+ * prevent swapoff, because synchronize_rcu() is called in swapoff()
+ * before freeing data structures.
  *
  * Check whether swap entry is valid in the swap device.  If so,
  * return pointer to swap_info_struct, and keep the swap entry valid
 
        /*
         * Wait for swap operations protected by get/put_swap_device()
-        * to complete.
-        *
-        * We need synchronize_rcu() here to protect the accessing to
-        * the swap cache data structure.
+        * to complete.  Because of synchronize_rcu() here, all swap
+        * operations protected by RCU reader side lock (including any
+        * spinlock) will be waited too.  This makes it easy to
+        * prevent folio_test_swapcache() and the following swap cache
+        * operations from racing with swapoff.
         */
        percpu_ref_kill(&p->users);
        synchronize_rcu();