]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/9p/acl.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[karo-tx-linux.git] / fs / 9p / acl.c
index 15b6791662011ed9c1269095c4c80d84c461c958..7af425f53beef91a6d21dc86b76e161ff7ed1696 100644 (file)
@@ -23,6 +23,7 @@
 #include "acl.h"
 #include "v9fs.h"
 #include "v9fs_vfs.h"
+#include "fid.h"
 
 static struct posix_acl *__v9fs_get_acl(struct p9_fid *fid, char *name)
 {
@@ -113,16 +114,12 @@ struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type)
 
 }
 
-static int v9fs_set_acl(struct dentry *dentry, int type, struct posix_acl *acl)
+static int v9fs_set_acl(struct p9_fid *fid, int type, struct posix_acl *acl)
 {
        int retval;
        char *name;
        size_t size;
        void *buffer;
-       struct inode *inode = dentry->d_inode;
-
-       set_cached_acl(inode, type, acl);
-
        if (!acl)
                return 0;
 
@@ -144,17 +141,16 @@ static int v9fs_set_acl(struct dentry *dentry, int type, struct posix_acl *acl)
        default:
                BUG();
        }
-       retval = v9fs_xattr_set(dentry, name, buffer, size, 0);
+       retval = v9fs_fid_xattr_set(fid, name, buffer, size, 0);
 err_free_out:
        kfree(buffer);
        return retval;
 }
 
-int v9fs_acl_chmod(struct dentry *dentry)
+int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid)
 {
        int retval = 0;
        struct posix_acl *acl;
-       struct inode *inode = dentry->d_inode;
 
        if (S_ISLNK(inode->i_mode))
                return -EOPNOTSUPP;
@@ -163,25 +159,30 @@ int v9fs_acl_chmod(struct dentry *dentry)
                retval = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode);
                if (retval)
                        return retval;
-               retval = v9fs_set_acl(dentry, ACL_TYPE_ACCESS, acl);
+               set_cached_acl(inode, ACL_TYPE_ACCESS, acl);
+               retval = v9fs_set_acl(fid, ACL_TYPE_ACCESS, acl);
                posix_acl_release(acl);
        }
        return retval;
 }
 
-int v9fs_set_create_acl(struct dentry *dentry,
-                       struct posix_acl **dpacl, struct posix_acl **pacl)
+int v9fs_set_create_acl(struct inode *inode, struct p9_fid *fid,
+                       struct posix_acl *dacl, struct posix_acl *acl)
 {
-       if (dentry) {
-               v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, *dpacl);
-               v9fs_set_acl(dentry, ACL_TYPE_ACCESS, *pacl);
-       }
-       posix_acl_release(*dpacl);
-       posix_acl_release(*pacl);
-       *dpacl = *pacl = NULL;
+       set_cached_acl(inode, ACL_TYPE_DEFAULT, dacl);
+       set_cached_acl(inode, ACL_TYPE_ACCESS, acl);
+       v9fs_set_acl(fid, ACL_TYPE_DEFAULT, dacl);
+       v9fs_set_acl(fid, ACL_TYPE_ACCESS, acl);
        return 0;
 }
 
+void v9fs_put_acl(struct posix_acl *dacl,
+                 struct posix_acl *acl)
+{
+       posix_acl_release(dacl);
+       posix_acl_release(acl);
+}
+
 int v9fs_acl_mode(struct inode *dir, umode_t *modep,
                  struct posix_acl **dpacl, struct posix_acl **pacl)
 {