diff options
author | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
commit | 871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch) | |
tree | 8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/fs/jfs/acl.c | |
parent | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff) | |
download | FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2 FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip |
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized.
Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/fs/jfs/acl.c')
-rw-r--r-- | ANDROID_3.4.5/fs/jfs/acl.c | 178 |
1 files changed, 0 insertions, 178 deletions
diff --git a/ANDROID_3.4.5/fs/jfs/acl.c b/ANDROID_3.4.5/fs/jfs/acl.c deleted file mode 100644 index 45559dc3..00000000 --- a/ANDROID_3.4.5/fs/jfs/acl.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (C) International Business Machines Corp., 2002-2004 - * Copyright (C) Andreas Gruenbacher, 2001 - * Copyright (C) Linus Torvalds, 1991, 1992 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include <linux/sched.h> -#include <linux/slab.h> -#include <linux/fs.h> -#include <linux/posix_acl_xattr.h> -#include "jfs_incore.h" -#include "jfs_txnmgr.h" -#include "jfs_xattr.h" -#include "jfs_acl.h" - -struct posix_acl *jfs_get_acl(struct inode *inode, int type) -{ - struct posix_acl *acl; - char *ea_name; - int size; - char *value = NULL; - - acl = get_cached_acl(inode, type); - if (acl != ACL_NOT_CACHED) - return acl; - - switch(type) { - case ACL_TYPE_ACCESS: - ea_name = POSIX_ACL_XATTR_ACCESS; - break; - case ACL_TYPE_DEFAULT: - ea_name = POSIX_ACL_XATTR_DEFAULT; - break; - default: - return ERR_PTR(-EINVAL); - } - - size = __jfs_getxattr(inode, ea_name, NULL, 0); - - if (size > 0) { - value = kmalloc(size, GFP_KERNEL); - if (!value) - return ERR_PTR(-ENOMEM); - size = __jfs_getxattr(inode, ea_name, value, size); - } - - if (size < 0) { - if (size == -ENODATA) - acl = NULL; - else - acl = ERR_PTR(size); - } else { - acl = posix_acl_from_xattr(value, size); - } - kfree(value); - if (!IS_ERR(acl)) - set_cached_acl(inode, type, acl); - return acl; -} - -static int jfs_set_acl(tid_t tid, struct inode *inode, int type, - struct posix_acl *acl) -{ - char *ea_name; - int rc; - int size = 0; - char *value = NULL; - - if (S_ISLNK(inode->i_mode)) - return -EOPNOTSUPP; - - switch(type) { - case ACL_TYPE_ACCESS: - ea_name = POSIX_ACL_XATTR_ACCESS; - break; - case ACL_TYPE_DEFAULT: - ea_name = POSIX_ACL_XATTR_DEFAULT; - if (!S_ISDIR(inode->i_mode)) - return acl ? -EACCES : 0; - break; - default: - return -EINVAL; - } - if (acl) { - size = posix_acl_xattr_size(acl->a_count); - value = kmalloc(size, GFP_KERNEL); - if (!value) - return -ENOMEM; - rc = posix_acl_to_xattr(acl, value, size); - if (rc < 0) - goto out; - } - rc = __jfs_setxattr(tid, inode, ea_name, value, size, 0); -out: - kfree(value); - - if (!rc) - set_cached_acl(inode, type, acl); - - return rc; -} - -int jfs_init_acl(tid_t tid, struct inode *inode, struct inode *dir) -{ - struct posix_acl *acl = NULL; - int rc = 0; - - if (S_ISLNK(inode->i_mode)) - return 0; - - acl = jfs_get_acl(dir, ACL_TYPE_DEFAULT); - if (IS_ERR(acl)) - return PTR_ERR(acl); - - if (acl) { - if (S_ISDIR(inode->i_mode)) { - rc = jfs_set_acl(tid, inode, ACL_TYPE_DEFAULT, acl); - if (rc) - goto cleanup; - } - rc = posix_acl_create(&acl, GFP_KERNEL, &inode->i_mode); - if (rc < 0) - goto cleanup; /* posix_acl_release(NULL) is no-op */ - if (rc > 0) - rc = jfs_set_acl(tid, inode, ACL_TYPE_ACCESS, acl); -cleanup: - posix_acl_release(acl); - } else - inode->i_mode &= ~current_umask(); - - JFS_IP(inode)->mode2 = (JFS_IP(inode)->mode2 & 0xffff0000) | - inode->i_mode; - - return rc; -} - -int jfs_acl_chmod(struct inode *inode) -{ - struct posix_acl *acl; - int rc; - tid_t tid; - - if (S_ISLNK(inode->i_mode)) - return -EOPNOTSUPP; - - acl = jfs_get_acl(inode, ACL_TYPE_ACCESS); - if (IS_ERR(acl) || !acl) - return PTR_ERR(acl); - - rc = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); - if (rc) - return rc; - - tid = txBegin(inode->i_sb, 0); - mutex_lock(&JFS_IP(inode)->commit_mutex); - rc = jfs_set_acl(tid, inode, ACL_TYPE_ACCESS, acl); - if (!rc) - rc = txCommit(tid, 1, &inode, 0); - txEnd(tid); - mutex_unlock(&JFS_IP(inode)->commit_mutex); - - posix_acl_release(acl); - return rc; -} |