cifs: move cifs_umount() call into ->kill_sb()
Al Viro [Fri, 17 Jun 2011 13:32:10 +0000 (09:32 -0400)]
instead of calling it manually in case if cifs_read_super() fails
to set ->s_root, just call it from ->kill_sb().  cifs_put_super()
is gone now *and* we have cifs_sb shutdown and destruction done
after the superblock is gone from ->s_instances.

Acked-by: Pavel Shilovsky <piastryyy@gmail.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/cifs/cifsfs.c

index 4004bc6..15de456 100644 (file)
@@ -163,30 +163,14 @@ out_no_root:
        if (inode)
                iput(inode);
 
-       cifs_umount(cifs_sb);
        return rc;
 }
 
-static void
-cifs_put_super(struct super_block *sb)
-{
-       int rc = 0;
-       struct cifs_sb_info *cifs_sb;
-
-       cFYI(1, "In cifs_put_super");
-       cifs_sb = CIFS_SB(sb);
-       if (cifs_sb == NULL) {
-               cFYI(1, "Empty cifs superblock info passed to unmount");
-               return;
-       }
-
-       cifs_umount(cifs_sb);
-}
-
 static void cifs_kill_sb(struct super_block *sb)
 {
        struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
        kill_anon_super(sb);
+       cifs_umount(cifs_sb);
        kfree(cifs_sb->mountdata);
        unload_nls(cifs_sb->local_nls);
        kfree(cifs_sb);
@@ -537,7 +521,6 @@ static int cifs_drop_inode(struct inode *inode)
 }
 
 static const struct super_operations cifs_super_ops = {
-       .put_super = cifs_put_super,
        .statfs = cifs_statfs,
        .alloc_inode = cifs_alloc_inode,
        .destroy_inode = cifs_destroy_inode,