Merge remote-tracking branch 'jk/vfs' into work.misc
[cascardo/linux.git] / fs / posix_acl.c
index bfc3ec3..da3f760 100644 (file)
@@ -598,13 +598,14 @@ posix_acl_create(struct inode *dir, umode_t *mode,
        if (IS_ERR(p))
                return PTR_ERR(p);
 
+       ret = -ENOMEM;
        clone = posix_acl_clone(p, GFP_NOFS);
        if (!clone)
-               goto no_mem;
+               goto err_release;
 
        ret = posix_acl_create_masq(clone, mode);
        if (ret < 0)
-               goto no_mem_clone;
+               goto err_release_clone;
 
        if (ret == 0)
                posix_acl_release(clone);
@@ -618,11 +619,11 @@ posix_acl_create(struct inode *dir, umode_t *mode,
 
        return 0;
 
-no_mem_clone:
+err_release_clone:
        posix_acl_release(clone);
-no_mem:
+err_release:
        posix_acl_release(p);
-       return -ENOMEM;
+       return ret;
 }
 EXPORT_SYMBOL_GPL(posix_acl_create);
 
@@ -664,15 +665,15 @@ static void posix_acl_fix_xattr_userns(
        struct user_namespace *to, struct user_namespace *from,
        void *value, size_t size)
 {
-       posix_acl_xattr_header *header = (posix_acl_xattr_header *)value;
-       posix_acl_xattr_entry *entry = (posix_acl_xattr_entry *)(header+1), *end;
+       struct posix_acl_xattr_header *header = value;
+       struct posix_acl_xattr_entry *entry = (void *)(header + 1), *end;
        int count;
        kuid_t uid;
        kgid_t gid;
 
        if (!value)
                return;
-       if (size < sizeof(posix_acl_xattr_header))
+       if (size < sizeof(struct posix_acl_xattr_header))
                return;
        if (header->a_version != cpu_to_le32(POSIX_ACL_XATTR_VERSION))
                return;
@@ -722,15 +723,15 @@ struct posix_acl *
 posix_acl_from_xattr(struct user_namespace *user_ns,
                     const void *value, size_t size)
 {
-       posix_acl_xattr_header *header = (posix_acl_xattr_header *)value;
-       posix_acl_xattr_entry *entry = (posix_acl_xattr_entry *)(header+1), *end;
+       const struct posix_acl_xattr_header *header = value;
+       const struct posix_acl_xattr_entry *entry = (const void *)(header + 1), *end;
        int count;
        struct posix_acl *acl;
        struct posix_acl_entry *acl_e;
 
        if (!value)
                return NULL;
-       if (size < sizeof(posix_acl_xattr_header))
+       if (size < sizeof(struct posix_acl_xattr_header))
                 return ERR_PTR(-EINVAL);
        if (header->a_version != cpu_to_le32(POSIX_ACL_XATTR_VERSION))
                return ERR_PTR(-EOPNOTSUPP);
@@ -791,8 +792,8 @@ int
 posix_acl_to_xattr(struct user_namespace *user_ns, const struct posix_acl *acl,
                   void *buffer, size_t size)
 {
-       posix_acl_xattr_header *ext_acl = (posix_acl_xattr_header *)buffer;
-       posix_acl_xattr_entry *ext_entry;
+       struct posix_acl_xattr_header *ext_acl = buffer;
+       struct posix_acl_xattr_entry *ext_entry;
        int real_size, n;
 
        real_size = posix_acl_xattr_size(acl->a_count);
@@ -801,7 +802,7 @@ posix_acl_to_xattr(struct user_namespace *user_ns, const struct posix_acl *acl,
        if (real_size > size)
                return -ERANGE;
 
-       ext_entry = ext_acl->a_entries;
+       ext_entry = (void *)(ext_acl + 1);
        ext_acl->a_version = cpu_to_le32(POSIX_ACL_XATTR_VERSION);
 
        for (n=0; n < acl->a_count; n++, ext_entry++) {