cregit-Linux how code gets into the kernel

Release 4.11 fs/jfs/acl.c

Directory: fs/jfs
/*
 *   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; switch(type) { case ACL_TYPE_ACCESS: ea_name = XATTR_NAME_POSIX_ACL_ACCESS; break; case ACL_TYPE_DEFAULT: ea_name = XATTR_NAME_POSIX_ACL_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(&init_user_ns, value, size); } kfree(value); return acl; }

Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp15793.45%125.00%
Al Viro63.57%125.00%
Eric W. Biedermann31.79%125.00%
Andreas Gruenbacher21.19%125.00%
Total168100.00%4100.00%


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; switch (type) { case ACL_TYPE_ACCESS: ea_name = XATTR_NAME_POSIX_ACL_ACCESS; if (acl) { rc = posix_acl_update_mode(inode, &inode->i_mode, &acl); if (rc) return rc; inode->i_ctime = current_time(inode); mark_inode_dirty(inode); } break; case ACL_TYPE_DEFAULT: ea_name = XATTR_NAME_POSIX_ACL_DEFAULT; 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(&init_user_ns, 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; }

Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp16479.61%433.33%
Christoph Hellwig178.25%216.67%
William Burrow62.91%18.33%
Jan Kara52.43%18.33%
Al Viro52.43%18.33%
Deepa Dinamani41.94%18.33%
Eric W. Biedermann31.46%18.33%
Andreas Gruenbacher20.97%18.33%
Total206100.00%12100.00%


int jfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) { int rc; tid_t tid; tid = txBegin(inode->i_sb, 0); mutex_lock(&JFS_IP(inode)->commit_mutex); rc = __jfs_set_acl(tid, inode, type, acl); if (!rc) rc = txCommit(tid, 1, &inode, 0); txEnd(tid); mutex_unlock(&JFS_IP(inode)->commit_mutex); return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp6364.95%350.00%
Christoph Hellwig3232.99%116.67%
Al Viro22.06%233.33%
Total97100.00%6100.00%


int jfs_init_acl(tid_t tid, struct inode *inode, struct inode *dir) { struct posix_acl *default_acl, *acl; int rc = 0; rc = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl); if (rc) return rc; if (default_acl) { rc = __jfs_set_acl(tid, inode, ACL_TYPE_DEFAULT, default_acl); posix_acl_release(default_acl); } if (acl) { if (!rc) rc = __jfs_set_acl(tid, inode, ACL_TYPE_ACCESS, acl); posix_acl_release(acl); } JFS_IP(inode)->mode2 = (JFS_IP(inode)->mode2 & 0xffff0000) | inode->i_mode; return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp6750.00%250.00%
Christoph Hellwig6347.01%125.00%
Al Viro42.99%125.00%
Total134100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp47074.60%633.33%
Christoph Hellwig11518.25%211.11%
Al Viro172.70%422.22%
Eric W. Biedermann60.95%15.56%
William Burrow60.95%15.56%
Jan Kara50.79%15.56%
Deepa Dinamani40.63%15.56%
Andreas Gruenbacher40.63%15.56%
Tejun Heo30.48%15.56%
Total630100.00%18100.00%
Directory: fs/jfs
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.