switch reiserfs to usual conventions for caching ACLs
[safe/jmp/linux-2.6] / fs / reiserfs / super.c
index 90dcb7b..b194451 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/mount.h>
 #include <linux/namei.h>
 #include <linux/crc32.h>
+#include <linux/smp_lock.h>
 
 struct file_system_type reiserfs_fs_type;
 
@@ -529,8 +530,8 @@ static void init_once(void *foo)
        INIT_LIST_HEAD(&ei->i_prealloc_list);
        inode_init_once(&ei->vfs_inode);
 #ifdef CONFIG_REISERFS_FS_POSIX_ACL
-       ei->i_acl_access = NULL;
-       ei->i_acl_default = NULL;
+       ei->i_acl_access = ACL_NOT_CACHED;
+       ei->i_acl_default = ACL_NOT_CACHED;
 #endif
 }
 
@@ -585,14 +586,14 @@ static void reiserfs_clear_inode(struct inode *inode)
        struct posix_acl *acl;
 
        acl = REISERFS_I(inode)->i_acl_access;
-       if (acl && !IS_ERR(acl))
+       if (acl && acl != ACL_NOT_CACHED)
                posix_acl_release(acl);
-       REISERFS_I(inode)->i_acl_access = NULL;
+       REISERFS_I(inode)->i_acl_access = ACL_NOT_CACHED;
 
        acl = REISERFS_I(inode)->i_acl_default;
-       if (acl && !IS_ERR(acl))
+       if (acl && acl != ACL_NOT_CACHED)
                posix_acl_release(acl);
-       REISERFS_I(inode)->i_acl_default = NULL;
+       REISERFS_I(inode)->i_acl_default = ACL_NOT_CACHED;
 }
 #else
 #define reiserfs_clear_inode NULL
@@ -1196,6 +1197,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
        memcpy(qf_names, REISERFS_SB(s)->s_qf_names, sizeof(qf_names));
 #endif
 
+       lock_kernel();
        rs = SB_DISK_SUPER_BLOCK(s);
 
        if (!reiserfs_parse_options
@@ -1318,10 +1320,12 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
 
 out_ok:
        replace_mount_options(s, new_opts);
+       unlock_kernel();
        return 0;
 
 out_err:
        kfree(new_opts);
+       unlock_kernel();
        return err;
 }