Merge branch 'next-evm' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/ima...
[linux-3.10.git] / fs / gfs2 / inode.c
index 1d3a1a6..6525b80 100644 (file)
@@ -307,7 +307,7 @@ struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
        }
 
        if (!is_root) {
-               error = gfs2_permission(dir, MAY_EXEC, 0);
+               error = gfs2_permission(dir, MAY_EXEC);
                if (error)
                        goto out;
        }
@@ -337,7 +337,7 @@ static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
 {
        int error;
 
-       error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0);
+       error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
        if (error)
                return error;
 
@@ -790,13 +790,8 @@ static int gfs2_create(struct inode *dir, struct dentry *dentry,
 static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
                                  struct nameidata *nd)
 {
-       struct inode *inode = NULL;
-
-       inode = gfs2_lookupi(dir, &dentry->d_name, 0);
-       if (inode && IS_ERR(inode))
-               return ERR_CAST(inode);
-
-       if (inode) {
+       struct inode *inode = gfs2_lookupi(dir, &dentry->d_name, 0);
+       if (inode && !IS_ERR(inode)) {
                struct gfs2_glock *gl = GFS2_I(inode)->i_gl;
                struct gfs2_holder gh;
                int error;
@@ -806,11 +801,8 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
                        return ERR_PTR(error);
                }
                gfs2_glock_dq_uninit(&gh);
-               return d_splice_alias(inode, dentry);
        }
-       d_add(dentry, inode);
-
-       return NULL;
+       return d_splice_alias(inode, dentry);
 }
 
 /**
@@ -855,7 +847,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
        if (inode->i_nlink == 0)
                goto out_gunlock;
 
-       error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC, 0);
+       error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC);
        if (error)
                goto out_gunlock;
 
@@ -988,7 +980,7 @@ static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
        if (IS_APPEND(&dip->i_inode))
                return -EPERM;
 
-       error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0);
+       error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
        if (error)
                return error;
 
@@ -1334,7 +1326,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
                        }
                }
        } else {
-               error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC, 0);
+               error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC);
                if (error)
                        goto out_gunlock;
 
@@ -1369,7 +1361,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
        /* Check out the dir to be renamed */
 
        if (dir_rename) {
-               error = gfs2_permission(odentry->d_inode, MAY_WRITE, 0);
+               error = gfs2_permission(odentry->d_inode, MAY_WRITE);
                if (error)
                        goto out_gunlock;
        }
@@ -1541,7 +1533,7 @@ static void gfs2_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
  * Returns: errno
  */
 
-int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
+int gfs2_permission(struct inode *inode, int mask)
 {
        struct gfs2_inode *ip;
        struct gfs2_holder i_gh;
@@ -1551,7 +1543,7 @@ int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
 
        ip = GFS2_I(inode);
        if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
-               if (flags & IPERM_FLAG_RCU)
+               if (mask & MAY_NOT_BLOCK)
                        return -ECHILD;
                error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
                if (error)
@@ -1562,7 +1554,7 @@ int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
        if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
                error = -EACCES;
        else
-               error = generic_permission(inode, mask, flags, gfs2_check_acl);
+               error = generic_permission(inode, mask);
        if (unlock)
                gfs2_glock_dq_uninit(&i_gh);
 
@@ -1852,6 +1844,7 @@ const struct inode_operations gfs2_file_iops = {
        .listxattr = gfs2_listxattr,
        .removexattr = gfs2_removexattr,
        .fiemap = gfs2_fiemap,
+       .get_acl = gfs2_get_acl,
 };
 
 const struct inode_operations gfs2_dir_iops = {
@@ -1872,6 +1865,7 @@ const struct inode_operations gfs2_dir_iops = {
        .listxattr = gfs2_listxattr,
        .removexattr = gfs2_removexattr,
        .fiemap = gfs2_fiemap,
+       .get_acl = gfs2_get_acl,
 };
 
 const struct inode_operations gfs2_symlink_iops = {
@@ -1886,5 +1880,6 @@ const struct inode_operations gfs2_symlink_iops = {
        .listxattr = gfs2_listxattr,
        .removexattr = gfs2_removexattr,
        .fiemap = gfs2_fiemap,
+       .get_acl = gfs2_get_acl,
 };