return ret;
 }
 
-/*
- * For background writeback the caller does not have the sb pinned
- * before calling writeback. So make sure that we do pin it, so it doesn't
- * go away while we are writing inodes from it.
- */
-static bool pin_sb_for_writeback(struct super_block *sb)
-{
-       spin_lock(&sb_lock);
-       if (list_empty(&sb->s_instances)) {
-               spin_unlock(&sb_lock);
-               return false;
-       }
-
-       sb->s_count++;
-       spin_unlock(&sb_lock);
-
-       if (down_read_trylock(&sb->s_umount)) {
-               if (sb->s_root)
-                       return true;
-               up_read(&sb->s_umount);
-       }
-
-       put_super(sb);
-       return false;
-}
-
 /*
  * Write a portion of b_io inodes which belong to @sb.
  *
                struct inode *inode = wb_inode(wb->b_io.prev);
                struct super_block *sb = inode->i_sb;
 
-               if (!pin_sb_for_writeback(sb)) {
+               if (!grab_super_passive(sb)) {
                        requeue_io(inode);
                        continue;
                }
 
  * super.c
  */
 extern int do_remount_sb(struct super_block *, int, void *, int);
+extern bool grab_super_passive(struct super_block *sb);
 extern void __put_super(struct super_block *sb);
 extern void put_super(struct super_block *sb);
 extern struct dentry *mount_fs(struct file_system_type *,
 
        return 0;
 }
 
+/*
+ *     grab_super_passive - acquire a passive reference
+ *     @s: reference we are trying to grab
+ *
+ *     Tries to acquire a passive reference. This is used in places where we
+ *     cannot take an active reference but we need to ensure that the
+ *     superblock does not go away while we are working on it. It returns
+ *     false if a reference was not gained, and returns true with the s_umount
+ *     lock held in read mode if a reference is gained. On successful return,
+ *     the caller must drop the s_umount lock and the passive reference when
+ *     done.
+ */
+bool grab_super_passive(struct super_block *sb)
+{
+       spin_lock(&sb_lock);
+       if (list_empty(&sb->s_instances)) {
+               spin_unlock(&sb_lock);
+               return false;
+       }
+
+       sb->s_count++;
+       spin_unlock(&sb_lock);
+
+       if (down_read_trylock(&sb->s_umount)) {
+               if (sb->s_root)
+                       return true;
+               up_read(&sb->s_umount);
+       }
+
+       put_super(sb);
+       return false;
+}
+
 /*
  * Superblock locking.  We really ought to get rid of these two.
  */