cregit-Linux how code gets into the kernel

Release 4.14 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; 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 Kleikamp14588.41%337.50%
Christoph Hellwig95.49%225.00%
Al Viro53.05%112.50%
Eric W. Biedermann31.83%112.50%
Andreas Gruenbacher21.22%112.50%
Total164100.00%8100.00%


int jfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) { int rc; tid_t tid; int update_mode = 0; umode_t mode = inode->i_mode; tid = txBegin(inode->i_sb, 0); mutex_lock(&JFS_IP(inode)->commit_mutex); if (type == ACL_TYPE_ACCESS && acl) { rc = posix_acl_update_mode(inode, &mode, &acl); if (rc) goto end_tx; update_mode = 1; } rc = __jfs_set_acl(tid, inode, type, acl); if (!rc) { if (update_mode) { inode->i_mode = mode; inode->i_ctime = current_time(inode); mark_inode_dirty(inode); } rc = txCommit(tid, 1, &inode, 0); } end_tx: txEnd(tid); mutex_unlock(&JFS_IP(inode)->commit_mutex); return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Dave Kleikamp6336.42%337.50%
Ernesto A. Fernández4324.86%112.50%
Jan Kara3319.08%112.50%
Christoph Hellwig3218.50%112.50%
Al Viro21.16%225.00%
Total173100.00%8100.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 Kleikamp45167.92%531.25%
Christoph Hellwig10716.11%212.50%
Ernesto A. Fernández436.48%16.25%
Jan Kara334.97%16.25%
Al Viro172.56%425.00%
Eric W. Biedermann60.90%16.25%
Andreas Gruenbacher40.60%16.25%
Tejun Heo30.45%16.25%
Total664100.00%16100.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.