]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/nfs/super.c
NFSv4: Ensure we reference the inode for return-on-close in delegreturn
[karo-tx-linux.git] / fs / nfs / super.c
index 31a11b0e885debd8706ceaf9e5957702f809a7f0..368d9395d2e7f064c9539ff01d9353659ad5197e 100644 (file)
@@ -405,12 +405,15 @@ void __exit unregister_nfs_fs(void)
        unregister_filesystem(&nfs_fs_type);
 }
 
-void nfs_sb_active(struct super_block *sb)
+bool nfs_sb_active(struct super_block *sb)
 {
        struct nfs_server *server = NFS_SB(sb);
 
-       if (atomic_inc_return(&server->active) == 1)
-               atomic_inc(&sb->s_active);
+       if (!atomic_inc_not_zero(&sb->s_active))
+               return false;
+       if (atomic_inc_return(&server->active) != 1)
+               atomic_dec(&sb->s_active);
+       return true;
 }
 EXPORT_SYMBOL_GPL(nfs_sb_active);