cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

inode.c (52752B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
      4 * Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved.
      5 */
      6
      7#include <linux/slab.h>
      8#include <linux/spinlock.h>
      9#include <linux/completion.h>
     10#include <linux/buffer_head.h>
     11#include <linux/namei.h>
     12#include <linux/mm.h>
     13#include <linux/cred.h>
     14#include <linux/xattr.h>
     15#include <linux/posix_acl.h>
     16#include <linux/gfs2_ondisk.h>
     17#include <linux/crc32.h>
     18#include <linux/iomap.h>
     19#include <linux/security.h>
     20#include <linux/fiemap.h>
     21#include <linux/uaccess.h>
     22
     23#include "gfs2.h"
     24#include "incore.h"
     25#include "acl.h"
     26#include "bmap.h"
     27#include "dir.h"
     28#include "xattr.h"
     29#include "glock.h"
     30#include "inode.h"
     31#include "meta_io.h"
     32#include "quota.h"
     33#include "rgrp.h"
     34#include "trans.h"
     35#include "util.h"
     36#include "super.h"
     37#include "glops.h"
     38
     39static const struct inode_operations gfs2_file_iops;
     40static const struct inode_operations gfs2_dir_iops;
     41static const struct inode_operations gfs2_symlink_iops;
     42
     43/**
     44 * gfs2_set_iop - Sets inode operations
     45 * @inode: The inode with correct i_mode filled in
     46 *
     47 * GFS2 lookup code fills in vfs inode contents based on info obtained
     48 * from directory entry inside gfs2_inode_lookup().
     49 */
     50
     51static void gfs2_set_iop(struct inode *inode)
     52{
     53	struct gfs2_sbd *sdp = GFS2_SB(inode);
     54	umode_t mode = inode->i_mode;
     55
     56	if (S_ISREG(mode)) {
     57		inode->i_op = &gfs2_file_iops;
     58		if (gfs2_localflocks(sdp))
     59			inode->i_fop = &gfs2_file_fops_nolock;
     60		else
     61			inode->i_fop = &gfs2_file_fops;
     62	} else if (S_ISDIR(mode)) {
     63		inode->i_op = &gfs2_dir_iops;
     64		if (gfs2_localflocks(sdp))
     65			inode->i_fop = &gfs2_dir_fops_nolock;
     66		else
     67			inode->i_fop = &gfs2_dir_fops;
     68	} else if (S_ISLNK(mode)) {
     69		inode->i_op = &gfs2_symlink_iops;
     70	} else {
     71		inode->i_op = &gfs2_file_iops;
     72		init_special_inode(inode, inode->i_mode, inode->i_rdev);
     73	}
     74}
     75
     76static int iget_test(struct inode *inode, void *opaque)
     77{
     78	u64 no_addr = *(u64 *)opaque;
     79
     80	return GFS2_I(inode)->i_no_addr == no_addr;
     81}
     82
     83static int iget_set(struct inode *inode, void *opaque)
     84{
     85	u64 no_addr = *(u64 *)opaque;
     86
     87	GFS2_I(inode)->i_no_addr = no_addr;
     88	inode->i_ino = no_addr;
     89	return 0;
     90}
     91
     92/**
     93 * gfs2_inode_lookup - Lookup an inode
     94 * @sb: The super block
     95 * @type: The type of the inode
     96 * @no_addr: The inode number
     97 * @no_formal_ino: The inode generation number
     98 * @blktype: Requested block type (GFS2_BLKST_DINODE or GFS2_BLKST_UNLINKED;
     99 *           GFS2_BLKST_FREE to indicate not to verify)
    100 *
    101 * If @type is DT_UNKNOWN, the inode type is fetched from disk.
    102 *
    103 * If @blktype is anything other than GFS2_BLKST_FREE (which is used as a
    104 * placeholder because it doesn't otherwise make sense), the on-disk block type
    105 * is verified to be @blktype.
    106 *
    107 * When @no_formal_ino is non-zero, this function will return ERR_PTR(-ESTALE)
    108 * if it detects that @no_formal_ino doesn't match the actual inode generation
    109 * number.  However, it doesn't always know unless @type is DT_UNKNOWN.
    110 *
    111 * Returns: A VFS inode, or an error
    112 */
    113
    114struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type,
    115				u64 no_addr, u64 no_formal_ino,
    116				unsigned int blktype)
    117{
    118	struct inode *inode;
    119	struct gfs2_inode *ip;
    120	struct gfs2_holder i_gh;
    121	int error;
    122
    123	gfs2_holder_mark_uninitialized(&i_gh);
    124	inode = iget5_locked(sb, no_addr, iget_test, iget_set, &no_addr);
    125	if (!inode)
    126		return ERR_PTR(-ENOMEM);
    127
    128	ip = GFS2_I(inode);
    129
    130	if (inode->i_state & I_NEW) {
    131		struct gfs2_sbd *sdp = GFS2_SB(inode);
    132		struct gfs2_glock *io_gl;
    133
    134		error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE,
    135				       &ip->i_gl);
    136		if (unlikely(error))
    137			goto fail;
    138
    139		error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE,
    140				       &io_gl);
    141		if (unlikely(error))
    142			goto fail;
    143
    144		if (blktype != GFS2_BLKST_UNLINKED)
    145			gfs2_cancel_delete_work(io_gl);
    146		error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT,
    147					   &ip->i_iopen_gh);
    148		gfs2_glock_put(io_gl);
    149		if (unlikely(error))
    150			goto fail;
    151
    152		if (type == DT_UNKNOWN || blktype != GFS2_BLKST_FREE) {
    153			/*
    154			 * The GL_SKIP flag indicates to skip reading the inode
    155			 * block.  We read the inode when instantiating it
    156			 * after possibly checking the block type.
    157			 */
    158			error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE,
    159						   GL_SKIP, &i_gh);
    160			if (error)
    161				goto fail;
    162
    163			error = -ESTALE;
    164			if (no_formal_ino &&
    165			    gfs2_inode_already_deleted(ip->i_gl, no_formal_ino))
    166				goto fail;
    167
    168			if (blktype != GFS2_BLKST_FREE) {
    169				error = gfs2_check_blk_type(sdp, no_addr,
    170							    blktype);
    171				if (error)
    172					goto fail;
    173			}
    174		}
    175
    176		set_bit(GLF_INSTANTIATE_NEEDED, &ip->i_gl->gl_flags);
    177
    178		/* Lowest possible timestamp; will be overwritten in gfs2_dinode_in. */
    179		inode->i_atime.tv_sec = 1LL << (8 * sizeof(inode->i_atime.tv_sec) - 1);
    180		inode->i_atime.tv_nsec = 0;
    181
    182		glock_set_object(ip->i_gl, ip);
    183
    184		if (type == DT_UNKNOWN) {
    185			/* Inode glock must be locked already */
    186			error = gfs2_instantiate(&i_gh);
    187			if (error) {
    188				glock_clear_object(ip->i_gl, ip);
    189				goto fail;
    190			}
    191		} else {
    192			ip->i_no_formal_ino = no_formal_ino;
    193			inode->i_mode = DT2IF(type);
    194		}
    195
    196		if (gfs2_holder_initialized(&i_gh))
    197			gfs2_glock_dq_uninit(&i_gh);
    198		glock_set_object(ip->i_iopen_gh.gh_gl, ip);
    199
    200		gfs2_set_iop(inode);
    201		unlock_new_inode(inode);
    202	}
    203
    204	if (no_formal_ino && ip->i_no_formal_ino &&
    205	    no_formal_ino != ip->i_no_formal_ino) {
    206		iput(inode);
    207		return ERR_PTR(-ESTALE);
    208	}
    209
    210	return inode;
    211
    212fail:
    213	if (gfs2_holder_initialized(&ip->i_iopen_gh))
    214		gfs2_glock_dq_uninit(&ip->i_iopen_gh);
    215	if (gfs2_holder_initialized(&i_gh))
    216		gfs2_glock_dq_uninit(&i_gh);
    217	iget_failed(inode);
    218	return ERR_PTR(error);
    219}
    220
    221/**
    222 * gfs2_lookup_by_inum - look up an inode by inode number
    223 * @sdp: The super block
    224 * @no_addr: The inode number
    225 * @no_formal_ino: The inode generation number (0 for any)
    226 * @blktype: Requested block type (see gfs2_inode_lookup)
    227 */
    228struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
    229				  u64 no_formal_ino, unsigned int blktype)
    230{
    231	struct super_block *sb = sdp->sd_vfs;
    232	struct inode *inode;
    233	int error;
    234
    235	inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, no_formal_ino,
    236				  blktype);
    237	if (IS_ERR(inode))
    238		return inode;
    239
    240	if (no_formal_ino) {
    241		error = -EIO;
    242		if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM)
    243			goto fail_iput;
    244	}
    245	return inode;
    246
    247fail_iput:
    248	iput(inode);
    249	return ERR_PTR(error);
    250}
    251
    252
    253struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
    254{
    255	struct qstr qstr;
    256	struct inode *inode;
    257	gfs2_str2qstr(&qstr, name);
    258	inode = gfs2_lookupi(dip, &qstr, 1);
    259	/* gfs2_lookupi has inconsistent callers: vfs
    260	 * related routines expect NULL for no entry found,
    261	 * gfs2_lookup_simple callers expect ENOENT
    262	 * and do not check for NULL.
    263	 */
    264	if (inode == NULL)
    265		return ERR_PTR(-ENOENT);
    266	else
    267		return inode;
    268}
    269
    270
    271/**
    272 * gfs2_lookupi - Look up a filename in a directory and return its inode
    273 * @dir: The inode of the directory containing the inode to look-up
    274 * @name: The name of the inode to look for
    275 * @is_root: If 1, ignore the caller's permissions
    276 *
    277 * This can be called via the VFS filldir function when NFS is doing
    278 * a readdirplus and the inode which its intending to stat isn't
    279 * already in cache. In this case we must not take the directory glock
    280 * again, since the readdir call will have already taken that lock.
    281 *
    282 * Returns: errno
    283 */
    284
    285struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
    286			   int is_root)
    287{
    288	struct super_block *sb = dir->i_sb;
    289	struct gfs2_inode *dip = GFS2_I(dir);
    290	struct gfs2_holder d_gh;
    291	int error = 0;
    292	struct inode *inode = NULL;
    293
    294	gfs2_holder_mark_uninitialized(&d_gh);
    295	if (!name->len || name->len > GFS2_FNAMESIZE)
    296		return ERR_PTR(-ENAMETOOLONG);
    297
    298	if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) ||
    299	    (name->len == 2 && memcmp(name->name, "..", 2) == 0 &&
    300	     dir == d_inode(sb->s_root))) {
    301		igrab(dir);
    302		return dir;
    303	}
    304
    305	if (gfs2_glock_is_locked_by_me(dip->i_gl) == NULL) {
    306		error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
    307		if (error)
    308			return ERR_PTR(error);
    309	}
    310
    311	if (!is_root) {
    312		error = gfs2_permission(&init_user_ns, dir, MAY_EXEC);
    313		if (error)
    314			goto out;
    315	}
    316
    317	inode = gfs2_dir_search(dir, name, false);
    318	if (IS_ERR(inode))
    319		error = PTR_ERR(inode);
    320out:
    321	if (gfs2_holder_initialized(&d_gh))
    322		gfs2_glock_dq_uninit(&d_gh);
    323	if (error == -ENOENT)
    324		return NULL;
    325	return inode ? inode : ERR_PTR(error);
    326}
    327
    328/**
    329 * create_ok - OK to create a new on-disk inode here?
    330 * @dip:  Directory in which dinode is to be created
    331 * @name:  Name of new dinode
    332 * @mode:
    333 *
    334 * Returns: errno
    335 */
    336
    337static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
    338		     umode_t mode)
    339{
    340	int error;
    341
    342	error = gfs2_permission(&init_user_ns, &dip->i_inode,
    343				MAY_WRITE | MAY_EXEC);
    344	if (error)
    345		return error;
    346
    347	/*  Don't create entries in an unlinked directory  */
    348	if (!dip->i_inode.i_nlink)
    349		return -ENOENT;
    350
    351	if (dip->i_entries == (u32)-1)
    352		return -EFBIG;
    353	if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1)
    354		return -EMLINK;
    355
    356	return 0;
    357}
    358
    359static void munge_mode_uid_gid(const struct gfs2_inode *dip,
    360			       struct inode *inode)
    361{
    362	if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
    363	    (dip->i_inode.i_mode & S_ISUID) &&
    364	    !uid_eq(dip->i_inode.i_uid, GLOBAL_ROOT_UID)) {
    365		if (S_ISDIR(inode->i_mode))
    366			inode->i_mode |= S_ISUID;
    367		else if (!uid_eq(dip->i_inode.i_uid, current_fsuid()))
    368			inode->i_mode &= ~07111;
    369		inode->i_uid = dip->i_inode.i_uid;
    370	} else
    371		inode->i_uid = current_fsuid();
    372
    373	if (dip->i_inode.i_mode & S_ISGID) {
    374		if (S_ISDIR(inode->i_mode))
    375			inode->i_mode |= S_ISGID;
    376		inode->i_gid = dip->i_inode.i_gid;
    377	} else
    378		inode->i_gid = current_fsgid();
    379}
    380
    381static int alloc_dinode(struct gfs2_inode *ip, u32 flags, unsigned *dblocks)
    382{
    383	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
    384	struct gfs2_alloc_parms ap = { .target = *dblocks, .aflags = flags, };
    385	int error;
    386
    387	error = gfs2_quota_lock_check(ip, &ap);
    388	if (error)
    389		goto out;
    390
    391	error = gfs2_inplace_reserve(ip, &ap);
    392	if (error)
    393		goto out_quota;
    394
    395	error = gfs2_trans_begin(sdp, (*dblocks * RES_RG_BIT) + RES_STATFS + RES_QUOTA, 0);
    396	if (error)
    397		goto out_ipreserv;
    398
    399	error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation);
    400	ip->i_no_formal_ino = ip->i_generation;
    401	ip->i_inode.i_ino = ip->i_no_addr;
    402	ip->i_goal = ip->i_no_addr;
    403
    404	gfs2_trans_end(sdp);
    405
    406out_ipreserv:
    407	gfs2_inplace_release(ip);
    408out_quota:
    409	gfs2_quota_unlock(ip);
    410out:
    411	return error;
    412}
    413
    414static void gfs2_init_dir(struct buffer_head *dibh,
    415			  const struct gfs2_inode *parent)
    416{
    417	struct gfs2_dinode *di = (struct gfs2_dinode *)dibh->b_data;
    418	struct gfs2_dirent *dent = (struct gfs2_dirent *)(di+1);
    419
    420	gfs2_qstr2dirent(&gfs2_qdot, GFS2_DIRENT_SIZE(gfs2_qdot.len), dent);
    421	dent->de_inum = di->di_num; /* already GFS2 endian */
    422	dent->de_type = cpu_to_be16(DT_DIR);
    423
    424	dent = (struct gfs2_dirent *)((char*)dent + GFS2_DIRENT_SIZE(1));
    425	gfs2_qstr2dirent(&gfs2_qdotdot, dibh->b_size - GFS2_DIRENT_SIZE(1) - sizeof(struct gfs2_dinode), dent);
    426	gfs2_inum_out(parent, dent);
    427	dent->de_type = cpu_to_be16(DT_DIR);
    428	
    429}
    430
    431/**
    432 * gfs2_init_xattr - Initialise an xattr block for a new inode
    433 * @ip: The inode in question
    434 *
    435 * This sets up an empty xattr block for a new inode, ready to
    436 * take any ACLs, LSM xattrs, etc.
    437 */
    438
    439static void gfs2_init_xattr(struct gfs2_inode *ip)
    440{
    441	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
    442	struct buffer_head *bh;
    443	struct gfs2_ea_header *ea;
    444
    445	bh = gfs2_meta_new(ip->i_gl, ip->i_eattr);
    446	gfs2_trans_add_meta(ip->i_gl, bh);
    447	gfs2_metatype_set(bh, GFS2_METATYPE_EA, GFS2_FORMAT_EA);
    448	gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
    449
    450	ea = GFS2_EA_BH2FIRST(bh);
    451	ea->ea_rec_len = cpu_to_be32(sdp->sd_jbsize);
    452	ea->ea_type = GFS2_EATYPE_UNUSED;
    453	ea->ea_flags = GFS2_EAFLAG_LAST;
    454
    455	brelse(bh);
    456}
    457
    458/**
    459 * init_dinode - Fill in a new dinode structure
    460 * @dip: The directory this inode is being created in
    461 * @ip: The inode
    462 * @symname: The symlink destination (if a symlink)
    463 *
    464 */
    465
    466static void init_dinode(struct gfs2_inode *dip, struct gfs2_inode *ip,
    467			const char *symname)
    468{
    469	struct gfs2_dinode *di;
    470	struct buffer_head *dibh;
    471
    472	dibh = gfs2_meta_new(ip->i_gl, ip->i_no_addr);
    473	gfs2_trans_add_meta(ip->i_gl, dibh);
    474	di = (struct gfs2_dinode *)dibh->b_data;
    475	gfs2_dinode_out(ip, di);
    476
    477	di->di_major = cpu_to_be32(imajor(&ip->i_inode));
    478	di->di_minor = cpu_to_be32(iminor(&ip->i_inode));
    479	di->__pad1 = 0;
    480	di->__pad2 = 0;
    481	di->__pad3 = 0;
    482	memset(&di->__pad4, 0, sizeof(di->__pad4));
    483	memset(&di->di_reserved, 0, sizeof(di->di_reserved));
    484	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
    485
    486	switch(ip->i_inode.i_mode & S_IFMT) {
    487	case S_IFDIR:
    488		gfs2_init_dir(dibh, dip);
    489		break;
    490	case S_IFLNK:
    491		memcpy(dibh->b_data + sizeof(struct gfs2_dinode), symname, ip->i_inode.i_size);
    492		break;
    493	}
    494
    495	set_buffer_uptodate(dibh);
    496	brelse(dibh);
    497}
    498
    499/**
    500 * gfs2_trans_da_blks - Calculate number of blocks to link inode
    501 * @dip: The directory we are linking into
    502 * @da: The dir add information
    503 * @nr_inodes: The number of inodes involved
    504 *
    505 * This calculate the number of blocks we need to reserve in a
    506 * transaction to link @nr_inodes into a directory. In most cases
    507 * @nr_inodes will be 2 (the directory plus the inode being linked in)
    508 * but in case of rename, 4 may be required.
    509 *
    510 * Returns: Number of blocks
    511 */
    512
    513static unsigned gfs2_trans_da_blks(const struct gfs2_inode *dip,
    514				   const struct gfs2_diradd *da,
    515				   unsigned nr_inodes)
    516{
    517	return da->nr_blocks + gfs2_rg_blocks(dip, da->nr_blocks) +
    518	       (nr_inodes * RES_DINODE) + RES_QUOTA + RES_STATFS;
    519}
    520
    521static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
    522		       struct gfs2_inode *ip, struct gfs2_diradd *da)
    523{
    524	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
    525	struct gfs2_alloc_parms ap = { .target = da->nr_blocks, };
    526	int error;
    527
    528	if (da->nr_blocks) {
    529		error = gfs2_quota_lock_check(dip, &ap);
    530		if (error)
    531			goto fail_quota_locks;
    532
    533		error = gfs2_inplace_reserve(dip, &ap);
    534		if (error)
    535			goto fail_quota_locks;
    536
    537		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(dip, da, 2), 0);
    538		if (error)
    539			goto fail_ipreserv;
    540	} else {
    541		error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0);
    542		if (error)
    543			goto fail_quota_locks;
    544	}
    545
    546	error = gfs2_dir_add(&dip->i_inode, name, ip, da);
    547
    548	gfs2_trans_end(sdp);
    549fail_ipreserv:
    550	gfs2_inplace_release(dip);
    551fail_quota_locks:
    552	gfs2_quota_unlock(dip);
    553	return error;
    554}
    555
    556static int gfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
    557		    void *fs_info)
    558{
    559	const struct xattr *xattr;
    560	int err = 0;
    561
    562	for (xattr = xattr_array; xattr->name != NULL; xattr++) {
    563		err = __gfs2_xattr_set(inode, xattr->name, xattr->value,
    564				       xattr->value_len, 0,
    565				       GFS2_EATYPE_SECURITY);
    566		if (err < 0)
    567			break;
    568	}
    569	return err;
    570}
    571
    572/**
    573 * gfs2_create_inode - Create a new inode
    574 * @dir: The parent directory
    575 * @dentry: The new dentry
    576 * @file: If non-NULL, the file which is being opened
    577 * @mode: The permissions on the new inode
    578 * @dev: For device nodes, this is the device number
    579 * @symname: For symlinks, this is the link destination
    580 * @size: The initial size of the inode (ignored for directories)
    581 * @excl: Force fail if inode exists
    582 *
    583 * Returns: 0 on success, or error code
    584 */
    585
    586static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
    587			     struct file *file,
    588			     umode_t mode, dev_t dev, const char *symname,
    589			     unsigned int size, int excl)
    590{
    591	const struct qstr *name = &dentry->d_name;
    592	struct posix_acl *default_acl, *acl;
    593	struct gfs2_holder ghs[2];
    594	struct inode *inode = NULL;
    595	struct gfs2_inode *dip = GFS2_I(dir), *ip;
    596	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
    597	struct gfs2_glock *io_gl;
    598	int error, free_vfs_inode = 1;
    599	u32 aflags = 0;
    600	unsigned blocks = 1;
    601	struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
    602
    603	if (!name->len || name->len > GFS2_FNAMESIZE)
    604		return -ENAMETOOLONG;
    605
    606	error = gfs2_qa_get(dip);
    607	if (error)
    608		return error;
    609
    610	error = gfs2_rindex_update(sdp);
    611	if (error)
    612		goto fail;
    613
    614	error = gfs2_glock_nq_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
    615	if (error)
    616		goto fail;
    617	gfs2_holder_mark_uninitialized(ghs + 1);
    618
    619	error = create_ok(dip, name, mode);
    620	if (error)
    621		goto fail_gunlock;
    622
    623	inode = gfs2_dir_search(dir, &dentry->d_name, !S_ISREG(mode) || excl);
    624	error = PTR_ERR(inode);
    625	if (!IS_ERR(inode)) {
    626		if (S_ISDIR(inode->i_mode)) {
    627			iput(inode);
    628			inode = ERR_PTR(-EISDIR);
    629			goto fail_gunlock;
    630		}
    631		d_instantiate(dentry, inode);
    632		error = 0;
    633		if (file) {
    634			if (S_ISREG(inode->i_mode))
    635				error = finish_open(file, dentry, gfs2_open_common);
    636			else
    637				error = finish_no_open(file, NULL);
    638		}
    639		gfs2_glock_dq_uninit(ghs);
    640		goto fail;
    641	} else if (error != -ENOENT) {
    642		goto fail_gunlock;
    643	}
    644
    645	error = gfs2_diradd_alloc_required(dir, name, &da);
    646	if (error < 0)
    647		goto fail_gunlock;
    648
    649	inode = new_inode(sdp->sd_vfs);
    650	error = -ENOMEM;
    651	if (!inode)
    652		goto fail_gunlock;
    653
    654	error = posix_acl_create(dir, &mode, &default_acl, &acl);
    655	if (error)
    656		goto fail_gunlock;
    657
    658	ip = GFS2_I(inode);
    659	error = gfs2_qa_get(ip);
    660	if (error)
    661		goto fail_free_acls;
    662
    663	inode->i_mode = mode;
    664	set_nlink(inode, S_ISDIR(mode) ? 2 : 1);
    665	inode->i_rdev = dev;
    666	inode->i_size = size;
    667	inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
    668	munge_mode_uid_gid(dip, inode);
    669	check_and_update_goal(dip);
    670	ip->i_goal = dip->i_goal;
    671	ip->i_diskflags = 0;
    672	ip->i_eattr = 0;
    673	ip->i_height = 0;
    674	ip->i_depth = 0;
    675	ip->i_entries = 0;
    676	ip->i_no_addr = 0; /* Temporarily zero until real addr is assigned */
    677
    678	switch(mode & S_IFMT) {
    679	case S_IFREG:
    680		if ((dip->i_diskflags & GFS2_DIF_INHERIT_JDATA) ||
    681		    gfs2_tune_get(sdp, gt_new_files_jdata))
    682			ip->i_diskflags |= GFS2_DIF_JDATA;
    683		gfs2_set_aops(inode);
    684		break;
    685	case S_IFDIR:
    686		ip->i_diskflags |= (dip->i_diskflags & GFS2_DIF_INHERIT_JDATA);
    687		ip->i_diskflags |= GFS2_DIF_JDATA;
    688		ip->i_entries = 2;
    689		break;
    690	}
    691
    692	/* Force SYSTEM flag on all files and subdirs of a SYSTEM directory */
    693	if (dip->i_diskflags & GFS2_DIF_SYSTEM)
    694		ip->i_diskflags |= GFS2_DIF_SYSTEM;
    695
    696	gfs2_set_inode_flags(inode);
    697
    698	if ((GFS2_I(d_inode(sdp->sd_root_dir)) == dip) ||
    699	    (dip->i_diskflags & GFS2_DIF_TOPDIR))
    700		aflags |= GFS2_AF_ORLOV;
    701
    702	if (default_acl || acl)
    703		blocks++;
    704
    705	error = alloc_dinode(ip, aflags, &blocks);
    706	if (error)
    707		goto fail_free_inode;
    708
    709	gfs2_set_inode_blocks(inode, blocks);
    710
    711	error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
    712	if (error)
    713		goto fail_free_inode;
    714
    715	error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
    716	if (error)
    717		goto fail_free_inode;
    718	gfs2_cancel_delete_work(io_gl);
    719
    720	error = insert_inode_locked4(inode, ip->i_no_addr, iget_test, &ip->i_no_addr);
    721	BUG_ON(error);
    722
    723	error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
    724	if (error)
    725		goto fail_gunlock2;
    726
    727	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
    728	if (error)
    729		goto fail_gunlock3;
    730
    731	error = gfs2_trans_begin(sdp, blocks, 0);
    732	if (error)
    733		goto fail_gunlock3;
    734
    735	if (blocks > 1) {
    736		ip->i_eattr = ip->i_no_addr + 1;
    737		gfs2_init_xattr(ip);
    738	}
    739	init_dinode(dip, ip, symname);
    740	gfs2_trans_end(sdp);
    741
    742	glock_set_object(ip->i_gl, ip);
    743	glock_set_object(io_gl, ip);
    744	gfs2_set_iop(inode);
    745
    746	free_vfs_inode = 0; /* After this point, the inode is no longer
    747			       considered free. Any failures need to undo
    748			       the gfs2 structures. */
    749	if (default_acl) {
    750		error = __gfs2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
    751		if (error)
    752			goto fail_gunlock4;
    753		posix_acl_release(default_acl);
    754		default_acl = NULL;
    755	}
    756	if (acl) {
    757		error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
    758		if (error)
    759			goto fail_gunlock4;
    760		posix_acl_release(acl);
    761		acl = NULL;
    762	}
    763
    764	error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name,
    765					     &gfs2_initxattrs, NULL);
    766	if (error)
    767		goto fail_gunlock4;
    768
    769	error = link_dinode(dip, name, ip, &da);
    770	if (error)
    771		goto fail_gunlock4;
    772
    773	mark_inode_dirty(inode);
    774	d_instantiate(dentry, inode);
    775	/* After instantiate, errors should result in evict which will destroy
    776	 * both inode and iopen glocks properly. */
    777	if (file) {
    778		file->f_mode |= FMODE_CREATED;
    779		error = finish_open(file, dentry, gfs2_open_common);
    780	}
    781	gfs2_glock_dq_uninit(ghs);
    782	gfs2_qa_put(ip);
    783	gfs2_glock_dq_uninit(ghs + 1);
    784	gfs2_glock_put(io_gl);
    785	gfs2_qa_put(dip);
    786	unlock_new_inode(inode);
    787	return error;
    788
    789fail_gunlock4:
    790	glock_clear_object(ip->i_gl, ip);
    791	glock_clear_object(io_gl, ip);
    792fail_gunlock3:
    793	gfs2_glock_dq_uninit(&ip->i_iopen_gh);
    794fail_gunlock2:
    795	gfs2_glock_put(io_gl);
    796fail_free_inode:
    797	if (ip->i_gl) {
    798		if (free_vfs_inode) /* else evict will do the put for us */
    799			gfs2_glock_put(ip->i_gl);
    800	}
    801	gfs2_rs_deltree(&ip->i_res);
    802	gfs2_qa_put(ip);
    803fail_free_acls:
    804	posix_acl_release(default_acl);
    805	posix_acl_release(acl);
    806fail_gunlock:
    807	gfs2_dir_no_add(&da);
    808	gfs2_glock_dq_uninit(ghs);
    809	if (!IS_ERR_OR_NULL(inode)) {
    810		clear_nlink(inode);
    811		if (!free_vfs_inode)
    812			mark_inode_dirty(inode);
    813		set_bit(free_vfs_inode ? GIF_FREE_VFS_INODE : GIF_ALLOC_FAILED,
    814			&GFS2_I(inode)->i_flags);
    815		if (inode->i_state & I_NEW)
    816			iget_failed(inode);
    817		else
    818			iput(inode);
    819	}
    820	if (gfs2_holder_initialized(ghs + 1))
    821		gfs2_glock_dq_uninit(ghs + 1);
    822fail:
    823	gfs2_qa_put(dip);
    824	return error;
    825}
    826
    827/**
    828 * gfs2_create - Create a file
    829 * @mnt_userns: User namespace of the mount the inode was found from
    830 * @dir: The directory in which to create the file
    831 * @dentry: The dentry of the new file
    832 * @mode: The mode of the new file
    833 * @excl: Force fail if inode exists
    834 *
    835 * Returns: errno
    836 */
    837
    838static int gfs2_create(struct user_namespace *mnt_userns, struct inode *dir,
    839		       struct dentry *dentry, umode_t mode, bool excl)
    840{
    841	return gfs2_create_inode(dir, dentry, NULL, S_IFREG | mode, 0, NULL, 0, excl);
    842}
    843
    844/**
    845 * __gfs2_lookup - Look up a filename in a directory and return its inode
    846 * @dir: The directory inode
    847 * @dentry: The dentry of the new inode
    848 * @file: File to be opened
    849 *
    850 *
    851 * Returns: errno
    852 */
    853
    854static struct dentry *__gfs2_lookup(struct inode *dir, struct dentry *dentry,
    855				    struct file *file)
    856{
    857	struct inode *inode;
    858	struct dentry *d;
    859	struct gfs2_holder gh;
    860	struct gfs2_glock *gl;
    861	int error;
    862
    863	inode = gfs2_lookupi(dir, &dentry->d_name, 0);
    864	if (inode == NULL) {
    865		d_add(dentry, NULL);
    866		return NULL;
    867	}
    868	if (IS_ERR(inode))
    869		return ERR_CAST(inode);
    870
    871	gl = GFS2_I(inode)->i_gl;
    872	error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
    873	if (error) {
    874		iput(inode);
    875		return ERR_PTR(error);
    876	}
    877
    878	d = d_splice_alias(inode, dentry);
    879	if (IS_ERR(d)) {
    880		gfs2_glock_dq_uninit(&gh);
    881		return d;
    882	}
    883	if (file && S_ISREG(inode->i_mode))
    884		error = finish_open(file, dentry, gfs2_open_common);
    885
    886	gfs2_glock_dq_uninit(&gh);
    887	if (error) {
    888		dput(d);
    889		return ERR_PTR(error);
    890	}
    891	return d;
    892}
    893
    894static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
    895				  unsigned flags)
    896{
    897	return __gfs2_lookup(dir, dentry, NULL);
    898}
    899
    900/**
    901 * gfs2_link - Link to a file
    902 * @old_dentry: The inode to link
    903 * @dir: Add link to this directory
    904 * @dentry: The name of the link
    905 *
    906 * Link the inode in "old_dentry" into the directory "dir" with the
    907 * name in "dentry".
    908 *
    909 * Returns: errno
    910 */
    911
    912static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
    913		     struct dentry *dentry)
    914{
    915	struct gfs2_inode *dip = GFS2_I(dir);
    916	struct gfs2_sbd *sdp = GFS2_SB(dir);
    917	struct inode *inode = d_inode(old_dentry);
    918	struct gfs2_inode *ip = GFS2_I(inode);
    919	struct gfs2_holder ghs[2];
    920	struct buffer_head *dibh;
    921	struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
    922	int error;
    923
    924	if (S_ISDIR(inode->i_mode))
    925		return -EPERM;
    926
    927	error = gfs2_qa_get(dip);
    928	if (error)
    929		return error;
    930
    931	gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
    932	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
    933
    934	error = gfs2_glock_nq(ghs); /* parent */
    935	if (error)
    936		goto out_parent;
    937
    938	error = gfs2_glock_nq(ghs + 1); /* child */
    939	if (error)
    940		goto out_child;
    941
    942	error = -ENOENT;
    943	if (inode->i_nlink == 0)
    944		goto out_gunlock;
    945
    946	error = gfs2_permission(&init_user_ns, dir, MAY_WRITE | MAY_EXEC);
    947	if (error)
    948		goto out_gunlock;
    949
    950	error = gfs2_dir_check(dir, &dentry->d_name, NULL);
    951	switch (error) {
    952	case -ENOENT:
    953		break;
    954	case 0:
    955		error = -EEXIST;
    956		goto out_gunlock;
    957	default:
    958		goto out_gunlock;
    959	}
    960
    961	error = -EINVAL;
    962	if (!dip->i_inode.i_nlink)
    963		goto out_gunlock;
    964	error = -EFBIG;
    965	if (dip->i_entries == (u32)-1)
    966		goto out_gunlock;
    967	error = -EPERM;
    968	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
    969		goto out_gunlock;
    970	error = -EINVAL;
    971	if (!ip->i_inode.i_nlink)
    972		goto out_gunlock;
    973	error = -EMLINK;
    974	if (ip->i_inode.i_nlink == (u32)-1)
    975		goto out_gunlock;
    976
    977	error = gfs2_diradd_alloc_required(dir, &dentry->d_name, &da);
    978	if (error < 0)
    979		goto out_gunlock;
    980
    981	if (da.nr_blocks) {
    982		struct gfs2_alloc_parms ap = { .target = da.nr_blocks, };
    983		error = gfs2_quota_lock_check(dip, &ap);
    984		if (error)
    985			goto out_gunlock;
    986
    987		error = gfs2_inplace_reserve(dip, &ap);
    988		if (error)
    989			goto out_gunlock_q;
    990
    991		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(dip, &da, 2), 0);
    992		if (error)
    993			goto out_ipres;
    994	} else {
    995		error = gfs2_trans_begin(sdp, 2 * RES_DINODE + RES_LEAF, 0);
    996		if (error)
    997			goto out_ipres;
    998	}
    999
   1000	error = gfs2_meta_inode_buffer(ip, &dibh);
   1001	if (error)
   1002		goto out_end_trans;
   1003
   1004	error = gfs2_dir_add(dir, &dentry->d_name, ip, &da);
   1005	if (error)
   1006		goto out_brelse;
   1007
   1008	gfs2_trans_add_meta(ip->i_gl, dibh);
   1009	inc_nlink(&ip->i_inode);
   1010	ip->i_inode.i_ctime = current_time(&ip->i_inode);
   1011	ihold(inode);
   1012	d_instantiate(dentry, inode);
   1013	mark_inode_dirty(inode);
   1014
   1015out_brelse:
   1016	brelse(dibh);
   1017out_end_trans:
   1018	gfs2_trans_end(sdp);
   1019out_ipres:
   1020	if (da.nr_blocks)
   1021		gfs2_inplace_release(dip);
   1022out_gunlock_q:
   1023	if (da.nr_blocks)
   1024		gfs2_quota_unlock(dip);
   1025out_gunlock:
   1026	gfs2_dir_no_add(&da);
   1027	gfs2_glock_dq(ghs + 1);
   1028out_child:
   1029	gfs2_glock_dq(ghs);
   1030out_parent:
   1031	gfs2_qa_put(dip);
   1032	gfs2_holder_uninit(ghs);
   1033	gfs2_holder_uninit(ghs + 1);
   1034	return error;
   1035}
   1036
   1037/*
   1038 * gfs2_unlink_ok - check to see that a inode is still in a directory
   1039 * @dip: the directory
   1040 * @name: the name of the file
   1041 * @ip: the inode
   1042 *
   1043 * Assumes that the lock on (at least) @dip is held.
   1044 *
   1045 * Returns: 0 if the parent/child relationship is correct, errno if it isn't
   1046 */
   1047
   1048static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
   1049			  const struct gfs2_inode *ip)
   1050{
   1051	int error;
   1052
   1053	if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
   1054		return -EPERM;
   1055
   1056	if ((dip->i_inode.i_mode & S_ISVTX) &&
   1057	    !uid_eq(dip->i_inode.i_uid, current_fsuid()) &&
   1058	    !uid_eq(ip->i_inode.i_uid, current_fsuid()) && !capable(CAP_FOWNER))
   1059		return -EPERM;
   1060
   1061	if (IS_APPEND(&dip->i_inode))
   1062		return -EPERM;
   1063
   1064	error = gfs2_permission(&init_user_ns, &dip->i_inode,
   1065				MAY_WRITE | MAY_EXEC);
   1066	if (error)
   1067		return error;
   1068
   1069	return gfs2_dir_check(&dip->i_inode, name, ip);
   1070}
   1071
   1072/**
   1073 * gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
   1074 * @dip: The parent directory
   1075 * @dentry: The dentry to unlink
   1076 *
   1077 * Called with all the locks and in a transaction. This will only be
   1078 * called for a directory after it has been checked to ensure it is empty.
   1079 *
   1080 * Returns: 0 on success, or an error
   1081 */
   1082
   1083static int gfs2_unlink_inode(struct gfs2_inode *dip,
   1084			     const struct dentry *dentry)
   1085{
   1086	struct inode *inode = d_inode(dentry);
   1087	struct gfs2_inode *ip = GFS2_I(inode);
   1088	int error;
   1089
   1090	error = gfs2_dir_del(dip, dentry);
   1091	if (error)
   1092		return error;
   1093
   1094	ip->i_entries = 0;
   1095	inode->i_ctime = current_time(inode);
   1096	if (S_ISDIR(inode->i_mode))
   1097		clear_nlink(inode);
   1098	else
   1099		drop_nlink(inode);
   1100	mark_inode_dirty(inode);
   1101	if (inode->i_nlink == 0)
   1102		gfs2_unlink_di(inode);
   1103	return 0;
   1104}
   1105
   1106
   1107/**
   1108 * gfs2_unlink - Unlink an inode (this does rmdir as well)
   1109 * @dir: The inode of the directory containing the inode to unlink
   1110 * @dentry: The file itself
   1111 *
   1112 * This routine uses the type of the inode as a flag to figure out
   1113 * whether this is an unlink or an rmdir.
   1114 *
   1115 * Returns: errno
   1116 */
   1117
   1118static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
   1119{
   1120	struct gfs2_inode *dip = GFS2_I(dir);
   1121	struct gfs2_sbd *sdp = GFS2_SB(dir);
   1122	struct inode *inode = d_inode(dentry);
   1123	struct gfs2_inode *ip = GFS2_I(inode);
   1124	struct gfs2_holder ghs[3];
   1125	struct gfs2_rgrpd *rgd;
   1126	int error;
   1127
   1128	error = gfs2_rindex_update(sdp);
   1129	if (error)
   1130		return error;
   1131
   1132	error = -EROFS;
   1133
   1134	gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
   1135	gfs2_holder_init(ip->i_gl,  LM_ST_EXCLUSIVE, 0, ghs + 1);
   1136
   1137	rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1);
   1138	if (!rgd)
   1139		goto out_inodes;
   1140
   1141	gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, LM_FLAG_NODE_SCOPE, ghs + 2);
   1142
   1143
   1144	error = gfs2_glock_nq(ghs); /* parent */
   1145	if (error)
   1146		goto out_parent;
   1147
   1148	error = gfs2_glock_nq(ghs + 1); /* child */
   1149	if (error)
   1150		goto out_child;
   1151
   1152	error = -ENOENT;
   1153	if (inode->i_nlink == 0)
   1154		goto out_rgrp;
   1155
   1156	if (S_ISDIR(inode->i_mode)) {
   1157		error = -ENOTEMPTY;
   1158		if (ip->i_entries > 2 || inode->i_nlink > 2)
   1159			goto out_rgrp;
   1160	}
   1161
   1162	error = gfs2_glock_nq(ghs + 2); /* rgrp */
   1163	if (error)
   1164		goto out_rgrp;
   1165
   1166	error = gfs2_unlink_ok(dip, &dentry->d_name, ip);
   1167	if (error)
   1168		goto out_gunlock;
   1169
   1170	error = gfs2_trans_begin(sdp, 2*RES_DINODE + 3*RES_LEAF + RES_RG_BIT, 0);
   1171	if (error)
   1172		goto out_gunlock;
   1173
   1174	error = gfs2_unlink_inode(dip, dentry);
   1175	gfs2_trans_end(sdp);
   1176
   1177out_gunlock:
   1178	gfs2_glock_dq(ghs + 2);
   1179out_rgrp:
   1180	gfs2_glock_dq(ghs + 1);
   1181out_child:
   1182	gfs2_glock_dq(ghs);
   1183out_parent:
   1184	gfs2_holder_uninit(ghs + 2);
   1185out_inodes:
   1186	gfs2_holder_uninit(ghs + 1);
   1187	gfs2_holder_uninit(ghs);
   1188	return error;
   1189}
   1190
   1191/**
   1192 * gfs2_symlink - Create a symlink
   1193 * @mnt_userns: User namespace of the mount the inode was found from
   1194 * @dir: The directory to create the symlink in
   1195 * @dentry: The dentry to put the symlink in
   1196 * @symname: The thing which the link points to
   1197 *
   1198 * Returns: errno
   1199 */
   1200
   1201static int gfs2_symlink(struct user_namespace *mnt_userns, struct inode *dir,
   1202			struct dentry *dentry, const char *symname)
   1203{
   1204	unsigned int size;
   1205
   1206	size = strlen(symname);
   1207	if (size >= gfs2_max_stuffed_size(GFS2_I(dir)))
   1208		return -ENAMETOOLONG;
   1209
   1210	return gfs2_create_inode(dir, dentry, NULL, S_IFLNK | S_IRWXUGO, 0, symname, size, 0);
   1211}
   1212
   1213/**
   1214 * gfs2_mkdir - Make a directory
   1215 * @mnt_userns: User namespace of the mount the inode was found from
   1216 * @dir: The parent directory of the new one
   1217 * @dentry: The dentry of the new directory
   1218 * @mode: The mode of the new directory
   1219 *
   1220 * Returns: errno
   1221 */
   1222
   1223static int gfs2_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
   1224		      struct dentry *dentry, umode_t mode)
   1225{
   1226	unsigned dsize = gfs2_max_stuffed_size(GFS2_I(dir));
   1227	return gfs2_create_inode(dir, dentry, NULL, S_IFDIR | mode, 0, NULL, dsize, 0);
   1228}
   1229
   1230/**
   1231 * gfs2_mknod - Make a special file
   1232 * @mnt_userns: User namespace of the mount the inode was found from
   1233 * @dir: The directory in which the special file will reside
   1234 * @dentry: The dentry of the special file
   1235 * @mode: The mode of the special file
   1236 * @dev: The device specification of the special file
   1237 *
   1238 */
   1239
   1240static int gfs2_mknod(struct user_namespace *mnt_userns, struct inode *dir,
   1241		      struct dentry *dentry, umode_t mode, dev_t dev)
   1242{
   1243	return gfs2_create_inode(dir, dentry, NULL, mode, dev, NULL, 0, 0);
   1244}
   1245
   1246/**
   1247 * gfs2_atomic_open - Atomically open a file
   1248 * @dir: The directory
   1249 * @dentry: The proposed new entry
   1250 * @file: The proposed new struct file
   1251 * @flags: open flags
   1252 * @mode: File mode
   1253 *
   1254 * Returns: error code or 0 for success
   1255 */
   1256
   1257static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry,
   1258			    struct file *file, unsigned flags,
   1259			    umode_t mode)
   1260{
   1261	struct dentry *d;
   1262	bool excl = !!(flags & O_EXCL);
   1263
   1264	if (!d_in_lookup(dentry))
   1265		goto skip_lookup;
   1266
   1267	d = __gfs2_lookup(dir, dentry, file);
   1268	if (IS_ERR(d))
   1269		return PTR_ERR(d);
   1270	if (d != NULL)
   1271		dentry = d;
   1272	if (d_really_is_positive(dentry)) {
   1273		if (!(file->f_mode & FMODE_OPENED))
   1274			return finish_no_open(file, d);
   1275		dput(d);
   1276		return excl && (flags & O_CREAT) ? -EEXIST : 0;
   1277	}
   1278
   1279	BUG_ON(d != NULL);
   1280
   1281skip_lookup:
   1282	if (!(flags & O_CREAT))
   1283		return -ENOENT;
   1284
   1285	return gfs2_create_inode(dir, dentry, file, S_IFREG | mode, 0, NULL, 0, excl);
   1286}
   1287
   1288/*
   1289 * gfs2_ok_to_move - check if it's ok to move a directory to another directory
   1290 * @this: move this
   1291 * @to: to here
   1292 *
   1293 * Follow @to back to the root and make sure we don't encounter @this
   1294 * Assumes we already hold the rename lock.
   1295 *
   1296 * Returns: errno
   1297 */
   1298
   1299static int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
   1300{
   1301	struct inode *dir = &to->i_inode;
   1302	struct super_block *sb = dir->i_sb;
   1303	struct inode *tmp;
   1304	int error = 0;
   1305
   1306	igrab(dir);
   1307
   1308	for (;;) {
   1309		if (dir == &this->i_inode) {
   1310			error = -EINVAL;
   1311			break;
   1312		}
   1313		if (dir == d_inode(sb->s_root)) {
   1314			error = 0;
   1315			break;
   1316		}
   1317
   1318		tmp = gfs2_lookupi(dir, &gfs2_qdotdot, 1);
   1319		if (!tmp) {
   1320			error = -ENOENT;
   1321			break;
   1322		}
   1323		if (IS_ERR(tmp)) {
   1324			error = PTR_ERR(tmp);
   1325			break;
   1326		}
   1327
   1328		iput(dir);
   1329		dir = tmp;
   1330	}
   1331
   1332	iput(dir);
   1333
   1334	return error;
   1335}
   1336
   1337/**
   1338 * update_moved_ino - Update an inode that's being moved
   1339 * @ip: The inode being moved
   1340 * @ndip: The parent directory of the new filename
   1341 * @dir_rename: True of ip is a directory
   1342 *
   1343 * Returns: errno
   1344 */
   1345
   1346static int update_moved_ino(struct gfs2_inode *ip, struct gfs2_inode *ndip,
   1347			    int dir_rename)
   1348{
   1349	if (dir_rename)
   1350		return gfs2_dir_mvino(ip, &gfs2_qdotdot, ndip, DT_DIR);
   1351
   1352	ip->i_inode.i_ctime = current_time(&ip->i_inode);
   1353	mark_inode_dirty_sync(&ip->i_inode);
   1354	return 0;
   1355}
   1356
   1357
   1358/**
   1359 * gfs2_rename - Rename a file
   1360 * @odir: Parent directory of old file name
   1361 * @odentry: The old dentry of the file
   1362 * @ndir: Parent directory of new file name
   1363 * @ndentry: The new dentry of the file
   1364 *
   1365 * Returns: errno
   1366 */
   1367
   1368static int gfs2_rename(struct inode *odir, struct dentry *odentry,
   1369		       struct inode *ndir, struct dentry *ndentry)
   1370{
   1371	struct gfs2_inode *odip = GFS2_I(odir);
   1372	struct gfs2_inode *ndip = GFS2_I(ndir);
   1373	struct gfs2_inode *ip = GFS2_I(d_inode(odentry));
   1374	struct gfs2_inode *nip = NULL;
   1375	struct gfs2_sbd *sdp = GFS2_SB(odir);
   1376	struct gfs2_holder ghs[4], r_gh, rd_gh;
   1377	struct gfs2_rgrpd *nrgd;
   1378	unsigned int num_gh;
   1379	int dir_rename = 0;
   1380	struct gfs2_diradd da = { .nr_blocks = 0, .save_loc = 0, };
   1381	unsigned int x;
   1382	int error;
   1383
   1384	gfs2_holder_mark_uninitialized(&r_gh);
   1385	gfs2_holder_mark_uninitialized(&rd_gh);
   1386	if (d_really_is_positive(ndentry)) {
   1387		nip = GFS2_I(d_inode(ndentry));
   1388		if (ip == nip)
   1389			return 0;
   1390	}
   1391
   1392	error = gfs2_rindex_update(sdp);
   1393	if (error)
   1394		return error;
   1395
   1396	error = gfs2_qa_get(ndip);
   1397	if (error)
   1398		return error;
   1399
   1400	if (odip != ndip) {
   1401		error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
   1402					   0, &r_gh);
   1403		if (error)
   1404			goto out;
   1405
   1406		if (S_ISDIR(ip->i_inode.i_mode)) {
   1407			dir_rename = 1;
   1408			/* don't move a directory into its subdir */
   1409			error = gfs2_ok_to_move(ip, ndip);
   1410			if (error)
   1411				goto out_gunlock_r;
   1412		}
   1413	}
   1414
   1415	num_gh = 1;
   1416	gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
   1417	if (odip != ndip) {
   1418		gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE,GL_ASYNC,
   1419				 ghs + num_gh);
   1420		num_gh++;
   1421	}
   1422	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
   1423	num_gh++;
   1424
   1425	if (nip) {
   1426		gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
   1427				 ghs + num_gh);
   1428		num_gh++;
   1429	}
   1430
   1431	for (x = 0; x < num_gh; x++) {
   1432		error = gfs2_glock_nq(ghs + x);
   1433		if (error)
   1434			goto out_gunlock;
   1435	}
   1436	error = gfs2_glock_async_wait(num_gh, ghs);
   1437	if (error)
   1438		goto out_gunlock;
   1439
   1440	if (nip) {
   1441		/* Grab the resource group glock for unlink flag twiddling.
   1442		 * This is the case where the target dinode already exists
   1443		 * so we unlink before doing the rename.
   1444		 */
   1445		nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1);
   1446		if (!nrgd) {
   1447			error = -ENOENT;
   1448			goto out_gunlock;
   1449		}
   1450		error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE,
   1451					   LM_FLAG_NODE_SCOPE, &rd_gh);
   1452		if (error)
   1453			goto out_gunlock;
   1454	}
   1455
   1456	error = -ENOENT;
   1457	if (ip->i_inode.i_nlink == 0)
   1458		goto out_gunlock;
   1459
   1460	/* Check out the old directory */
   1461
   1462	error = gfs2_unlink_ok(odip, &odentry->d_name, ip);
   1463	if (error)
   1464		goto out_gunlock;
   1465
   1466	/* Check out the new directory */
   1467
   1468	if (nip) {
   1469		error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
   1470		if (error)
   1471			goto out_gunlock;
   1472
   1473		if (nip->i_inode.i_nlink == 0) {
   1474			error = -EAGAIN;
   1475			goto out_gunlock;
   1476		}
   1477
   1478		if (S_ISDIR(nip->i_inode.i_mode)) {
   1479			if (nip->i_entries < 2) {
   1480				gfs2_consist_inode(nip);
   1481				error = -EIO;
   1482				goto out_gunlock;
   1483			}
   1484			if (nip->i_entries > 2) {
   1485				error = -ENOTEMPTY;
   1486				goto out_gunlock;
   1487			}
   1488		}
   1489	} else {
   1490		error = gfs2_permission(&init_user_ns, ndir,
   1491					MAY_WRITE | MAY_EXEC);
   1492		if (error)
   1493			goto out_gunlock;
   1494
   1495		error = gfs2_dir_check(ndir, &ndentry->d_name, NULL);
   1496		switch (error) {
   1497		case -ENOENT:
   1498			error = 0;
   1499			break;
   1500		case 0:
   1501			error = -EEXIST;
   1502			goto out_gunlock;
   1503		default:
   1504			goto out_gunlock;
   1505		}
   1506
   1507		if (odip != ndip) {
   1508			if (!ndip->i_inode.i_nlink) {
   1509				error = -ENOENT;
   1510				goto out_gunlock;
   1511			}
   1512			if (ndip->i_entries == (u32)-1) {
   1513				error = -EFBIG;
   1514				goto out_gunlock;
   1515			}
   1516			if (S_ISDIR(ip->i_inode.i_mode) &&
   1517			    ndip->i_inode.i_nlink == (u32)-1) {
   1518				error = -EMLINK;
   1519				goto out_gunlock;
   1520			}
   1521		}
   1522	}
   1523
   1524	/* Check out the dir to be renamed */
   1525
   1526	if (dir_rename) {
   1527		error = gfs2_permission(&init_user_ns, d_inode(odentry),
   1528					MAY_WRITE);
   1529		if (error)
   1530			goto out_gunlock;
   1531	}
   1532
   1533	if (nip == NULL) {
   1534		error = gfs2_diradd_alloc_required(ndir, &ndentry->d_name, &da);
   1535		if (error)
   1536			goto out_gunlock;
   1537	}
   1538
   1539	if (da.nr_blocks) {
   1540		struct gfs2_alloc_parms ap = { .target = da.nr_blocks, };
   1541		error = gfs2_quota_lock_check(ndip, &ap);
   1542		if (error)
   1543			goto out_gunlock;
   1544
   1545		error = gfs2_inplace_reserve(ndip, &ap);
   1546		if (error)
   1547			goto out_gunlock_q;
   1548
   1549		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(ndip, &da, 4) +
   1550					 4 * RES_LEAF + 4, 0);
   1551		if (error)
   1552			goto out_ipreserv;
   1553	} else {
   1554		error = gfs2_trans_begin(sdp, 4 * RES_DINODE +
   1555					 5 * RES_LEAF + 4, 0);
   1556		if (error)
   1557			goto out_gunlock;
   1558	}
   1559
   1560	/* Remove the target file, if it exists */
   1561
   1562	if (nip)
   1563		error = gfs2_unlink_inode(ndip, ndentry);
   1564
   1565	error = update_moved_ino(ip, ndip, dir_rename);
   1566	if (error)
   1567		goto out_end_trans;
   1568
   1569	error = gfs2_dir_del(odip, odentry);
   1570	if (error)
   1571		goto out_end_trans;
   1572
   1573	error = gfs2_dir_add(ndir, &ndentry->d_name, ip, &da);
   1574	if (error)
   1575		goto out_end_trans;
   1576
   1577out_end_trans:
   1578	gfs2_trans_end(sdp);
   1579out_ipreserv:
   1580	if (da.nr_blocks)
   1581		gfs2_inplace_release(ndip);
   1582out_gunlock_q:
   1583	if (da.nr_blocks)
   1584		gfs2_quota_unlock(ndip);
   1585out_gunlock:
   1586	gfs2_dir_no_add(&da);
   1587	if (gfs2_holder_initialized(&rd_gh))
   1588		gfs2_glock_dq_uninit(&rd_gh);
   1589
   1590	while (x--) {
   1591		if (gfs2_holder_queued(ghs + x))
   1592			gfs2_glock_dq(ghs + x);
   1593		gfs2_holder_uninit(ghs + x);
   1594	}
   1595out_gunlock_r:
   1596	if (gfs2_holder_initialized(&r_gh))
   1597		gfs2_glock_dq_uninit(&r_gh);
   1598out:
   1599	gfs2_qa_put(ndip);
   1600	return error;
   1601}
   1602
   1603/**
   1604 * gfs2_exchange - exchange two files
   1605 * @odir: Parent directory of old file name
   1606 * @odentry: The old dentry of the file
   1607 * @ndir: Parent directory of new file name
   1608 * @ndentry: The new dentry of the file
   1609 * @flags: The rename flags
   1610 *
   1611 * Returns: errno
   1612 */
   1613
   1614static int gfs2_exchange(struct inode *odir, struct dentry *odentry,
   1615			 struct inode *ndir, struct dentry *ndentry,
   1616			 unsigned int flags)
   1617{
   1618	struct gfs2_inode *odip = GFS2_I(odir);
   1619	struct gfs2_inode *ndip = GFS2_I(ndir);
   1620	struct gfs2_inode *oip = GFS2_I(odentry->d_inode);
   1621	struct gfs2_inode *nip = GFS2_I(ndentry->d_inode);
   1622	struct gfs2_sbd *sdp = GFS2_SB(odir);
   1623	struct gfs2_holder ghs[4], r_gh;
   1624	unsigned int num_gh;
   1625	unsigned int x;
   1626	umode_t old_mode = oip->i_inode.i_mode;
   1627	umode_t new_mode = nip->i_inode.i_mode;
   1628	int error;
   1629
   1630	gfs2_holder_mark_uninitialized(&r_gh);
   1631	error = gfs2_rindex_update(sdp);
   1632	if (error)
   1633		return error;
   1634
   1635	if (odip != ndip) {
   1636		error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
   1637					   0, &r_gh);
   1638		if (error)
   1639			goto out;
   1640
   1641		if (S_ISDIR(old_mode)) {
   1642			/* don't move a directory into its subdir */
   1643			error = gfs2_ok_to_move(oip, ndip);
   1644			if (error)
   1645				goto out_gunlock_r;
   1646		}
   1647
   1648		if (S_ISDIR(new_mode)) {
   1649			/* don't move a directory into its subdir */
   1650			error = gfs2_ok_to_move(nip, odip);
   1651			if (error)
   1652				goto out_gunlock_r;
   1653		}
   1654	}
   1655
   1656	num_gh = 1;
   1657	gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
   1658	if (odip != ndip) {
   1659		gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
   1660				 ghs + num_gh);
   1661		num_gh++;
   1662	}
   1663	gfs2_holder_init(oip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
   1664	num_gh++;
   1665
   1666	gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
   1667	num_gh++;
   1668
   1669	for (x = 0; x < num_gh; x++) {
   1670		error = gfs2_glock_nq(ghs + x);
   1671		if (error)
   1672			goto out_gunlock;
   1673	}
   1674
   1675	error = gfs2_glock_async_wait(num_gh, ghs);
   1676	if (error)
   1677		goto out_gunlock;
   1678
   1679	error = -ENOENT;
   1680	if (oip->i_inode.i_nlink == 0 || nip->i_inode.i_nlink == 0)
   1681		goto out_gunlock;
   1682
   1683	error = gfs2_unlink_ok(odip, &odentry->d_name, oip);
   1684	if (error)
   1685		goto out_gunlock;
   1686	error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
   1687	if (error)
   1688		goto out_gunlock;
   1689
   1690	if (S_ISDIR(old_mode)) {
   1691		error = gfs2_permission(&init_user_ns, odentry->d_inode,
   1692					MAY_WRITE);
   1693		if (error)
   1694			goto out_gunlock;
   1695	}
   1696	if (S_ISDIR(new_mode)) {
   1697		error = gfs2_permission(&init_user_ns, ndentry->d_inode,
   1698					MAY_WRITE);
   1699		if (error)
   1700			goto out_gunlock;
   1701	}
   1702	error = gfs2_trans_begin(sdp, 4 * RES_DINODE + 4 * RES_LEAF, 0);
   1703	if (error)
   1704		goto out_gunlock;
   1705
   1706	error = update_moved_ino(oip, ndip, S_ISDIR(old_mode));
   1707	if (error)
   1708		goto out_end_trans;
   1709
   1710	error = update_moved_ino(nip, odip, S_ISDIR(new_mode));
   1711	if (error)
   1712		goto out_end_trans;
   1713
   1714	error = gfs2_dir_mvino(ndip, &ndentry->d_name, oip,
   1715			       IF2DT(old_mode));
   1716	if (error)
   1717		goto out_end_trans;
   1718
   1719	error = gfs2_dir_mvino(odip, &odentry->d_name, nip,
   1720			       IF2DT(new_mode));
   1721	if (error)
   1722		goto out_end_trans;
   1723
   1724	if (odip != ndip) {
   1725		if (S_ISDIR(new_mode) && !S_ISDIR(old_mode)) {
   1726			inc_nlink(&odip->i_inode);
   1727			drop_nlink(&ndip->i_inode);
   1728		} else if (S_ISDIR(old_mode) && !S_ISDIR(new_mode)) {
   1729			inc_nlink(&ndip->i_inode);
   1730			drop_nlink(&odip->i_inode);
   1731		}
   1732	}
   1733	mark_inode_dirty(&ndip->i_inode);
   1734	if (odip != ndip)
   1735		mark_inode_dirty(&odip->i_inode);
   1736
   1737out_end_trans:
   1738	gfs2_trans_end(sdp);
   1739out_gunlock:
   1740	while (x--) {
   1741		if (gfs2_holder_queued(ghs + x))
   1742			gfs2_glock_dq(ghs + x);
   1743		gfs2_holder_uninit(ghs + x);
   1744	}
   1745out_gunlock_r:
   1746	if (gfs2_holder_initialized(&r_gh))
   1747		gfs2_glock_dq_uninit(&r_gh);
   1748out:
   1749	return error;
   1750}
   1751
   1752static int gfs2_rename2(struct user_namespace *mnt_userns, struct inode *odir,
   1753			struct dentry *odentry, struct inode *ndir,
   1754			struct dentry *ndentry, unsigned int flags)
   1755{
   1756	flags &= ~RENAME_NOREPLACE;
   1757
   1758	if (flags & ~RENAME_EXCHANGE)
   1759		return -EINVAL;
   1760
   1761	if (flags & RENAME_EXCHANGE)
   1762		return gfs2_exchange(odir, odentry, ndir, ndentry, flags);
   1763
   1764	return gfs2_rename(odir, odentry, ndir, ndentry);
   1765}
   1766
   1767/**
   1768 * gfs2_get_link - Follow a symbolic link
   1769 * @dentry: The dentry of the link
   1770 * @inode: The inode of the link
   1771 * @done: destructor for return value
   1772 *
   1773 * This can handle symlinks of any size.
   1774 *
   1775 * Returns: 0 on success or error code
   1776 */
   1777
   1778static const char *gfs2_get_link(struct dentry *dentry,
   1779				 struct inode *inode,
   1780				 struct delayed_call *done)
   1781{
   1782	struct gfs2_inode *ip = GFS2_I(inode);
   1783	struct gfs2_holder i_gh;
   1784	struct buffer_head *dibh;
   1785	unsigned int size;
   1786	char *buf;
   1787	int error;
   1788
   1789	if (!dentry)
   1790		return ERR_PTR(-ECHILD);
   1791
   1792	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
   1793	error = gfs2_glock_nq(&i_gh);
   1794	if (error) {
   1795		gfs2_holder_uninit(&i_gh);
   1796		return ERR_PTR(error);
   1797	}
   1798
   1799	size = (unsigned int)i_size_read(&ip->i_inode);
   1800	if (size == 0) {
   1801		gfs2_consist_inode(ip);
   1802		buf = ERR_PTR(-EIO);
   1803		goto out;
   1804	}
   1805
   1806	error = gfs2_meta_inode_buffer(ip, &dibh);
   1807	if (error) {
   1808		buf = ERR_PTR(error);
   1809		goto out;
   1810	}
   1811
   1812	buf = kzalloc(size + 1, GFP_NOFS);
   1813	if (!buf)
   1814		buf = ERR_PTR(-ENOMEM);
   1815	else
   1816		memcpy(buf, dibh->b_data + sizeof(struct gfs2_dinode), size);
   1817	brelse(dibh);
   1818out:
   1819	gfs2_glock_dq_uninit(&i_gh);
   1820	if (!IS_ERR(buf))
   1821		set_delayed_call(done, kfree_link, buf);
   1822	return buf;
   1823}
   1824
   1825/**
   1826 * gfs2_permission
   1827 * @mnt_userns: User namespace of the mount the inode was found from
   1828 * @inode: The inode
   1829 * @mask: The mask to be tested
   1830 *
   1831 * This may be called from the VFS directly, or from within GFS2 with the
   1832 * inode locked, so we look to see if the glock is already locked and only
   1833 * lock the glock if its not already been done.
   1834 *
   1835 * Returns: errno
   1836 */
   1837
   1838int gfs2_permission(struct user_namespace *mnt_userns, struct inode *inode,
   1839		    int mask)
   1840{
   1841	struct gfs2_inode *ip;
   1842	struct gfs2_holder i_gh;
   1843	int error;
   1844
   1845	gfs2_holder_mark_uninitialized(&i_gh);
   1846	ip = GFS2_I(inode);
   1847	if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
   1848		if (mask & MAY_NOT_BLOCK)
   1849			return -ECHILD;
   1850		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
   1851		if (error)
   1852			return error;
   1853	}
   1854
   1855	if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
   1856		error = -EPERM;
   1857	else
   1858		error = generic_permission(&init_user_ns, inode, mask);
   1859	if (gfs2_holder_initialized(&i_gh))
   1860		gfs2_glock_dq_uninit(&i_gh);
   1861
   1862	return error;
   1863}
   1864
   1865static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
   1866{
   1867	setattr_copy(&init_user_ns, inode, attr);
   1868	mark_inode_dirty(inode);
   1869	return 0;
   1870}
   1871
   1872static int gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
   1873{
   1874	int error;
   1875
   1876	if (current->journal_info)
   1877		return __gfs2_setattr_simple(inode, attr);
   1878
   1879	error = gfs2_trans_begin(GFS2_SB(inode), RES_DINODE, 0);
   1880	if (error)
   1881		return error;
   1882
   1883	error = __gfs2_setattr_simple(inode, attr);
   1884	gfs2_trans_end(GFS2_SB(inode));
   1885	return error;
   1886}
   1887
   1888static int setattr_chown(struct inode *inode, struct iattr *attr)
   1889{
   1890	struct gfs2_inode *ip = GFS2_I(inode);
   1891	struct gfs2_sbd *sdp = GFS2_SB(inode);
   1892	kuid_t ouid, nuid;
   1893	kgid_t ogid, ngid;
   1894	int error;
   1895	struct gfs2_alloc_parms ap;
   1896
   1897	ouid = inode->i_uid;
   1898	ogid = inode->i_gid;
   1899	nuid = attr->ia_uid;
   1900	ngid = attr->ia_gid;
   1901
   1902	if (!(attr->ia_valid & ATTR_UID) || uid_eq(ouid, nuid))
   1903		ouid = nuid = NO_UID_QUOTA_CHANGE;
   1904	if (!(attr->ia_valid & ATTR_GID) || gid_eq(ogid, ngid))
   1905		ogid = ngid = NO_GID_QUOTA_CHANGE;
   1906	error = gfs2_qa_get(ip);
   1907	if (error)
   1908		return error;
   1909
   1910	error = gfs2_rindex_update(sdp);
   1911	if (error)
   1912		goto out;
   1913
   1914	error = gfs2_quota_lock(ip, nuid, ngid);
   1915	if (error)
   1916		goto out;
   1917
   1918	ap.target = gfs2_get_inode_blocks(&ip->i_inode);
   1919
   1920	if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
   1921	    !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
   1922		error = gfs2_quota_check(ip, nuid, ngid, &ap);
   1923		if (error)
   1924			goto out_gunlock_q;
   1925	}
   1926
   1927	error = gfs2_trans_begin(sdp, RES_DINODE + 2 * RES_QUOTA, 0);
   1928	if (error)
   1929		goto out_gunlock_q;
   1930
   1931	error = gfs2_setattr_simple(inode, attr);
   1932	if (error)
   1933		goto out_end_trans;
   1934
   1935	if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
   1936	    !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
   1937		gfs2_quota_change(ip, -(s64)ap.target, ouid, ogid);
   1938		gfs2_quota_change(ip, ap.target, nuid, ngid);
   1939	}
   1940
   1941out_end_trans:
   1942	gfs2_trans_end(sdp);
   1943out_gunlock_q:
   1944	gfs2_quota_unlock(ip);
   1945out:
   1946	gfs2_qa_put(ip);
   1947	return error;
   1948}
   1949
   1950/**
   1951 * gfs2_setattr - Change attributes on an inode
   1952 * @mnt_userns: User namespace of the mount the inode was found from
   1953 * @dentry: The dentry which is changing
   1954 * @attr: The structure describing the change
   1955 *
   1956 * The VFS layer wants to change one or more of an inodes attributes.  Write
   1957 * that change out to disk.
   1958 *
   1959 * Returns: errno
   1960 */
   1961
   1962static int gfs2_setattr(struct user_namespace *mnt_userns,
   1963			struct dentry *dentry, struct iattr *attr)
   1964{
   1965	struct inode *inode = d_inode(dentry);
   1966	struct gfs2_inode *ip = GFS2_I(inode);
   1967	struct gfs2_holder i_gh;
   1968	int error;
   1969
   1970	error = gfs2_qa_get(ip);
   1971	if (error)
   1972		return error;
   1973
   1974	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
   1975	if (error)
   1976		goto out;
   1977
   1978	error = may_setattr(&init_user_ns, inode, attr->ia_valid);
   1979	if (error)
   1980		goto error;
   1981
   1982	error = setattr_prepare(&init_user_ns, dentry, attr);
   1983	if (error)
   1984		goto error;
   1985
   1986	if (attr->ia_valid & ATTR_SIZE)
   1987		error = gfs2_setattr_size(inode, attr->ia_size);
   1988	else if (attr->ia_valid & (ATTR_UID | ATTR_GID))
   1989		error = setattr_chown(inode, attr);
   1990	else {
   1991		error = gfs2_setattr_simple(inode, attr);
   1992		if (!error && attr->ia_valid & ATTR_MODE)
   1993			error = posix_acl_chmod(&init_user_ns, inode,
   1994						inode->i_mode);
   1995	}
   1996
   1997error:
   1998	if (!error)
   1999		mark_inode_dirty(inode);
   2000	gfs2_glock_dq_uninit(&i_gh);
   2001out:
   2002	gfs2_qa_put(ip);
   2003	return error;
   2004}
   2005
   2006/**
   2007 * gfs2_getattr - Read out an inode's attributes
   2008 * @mnt_userns:	user namespace of the mount the inode was found from
   2009 * @path: Object to query
   2010 * @stat: The inode's stats
   2011 * @request_mask: Mask of STATX_xxx flags indicating the caller's interests
   2012 * @flags: AT_STATX_xxx setting
   2013 *
   2014 * This may be called from the VFS directly, or from within GFS2 with the
   2015 * inode locked, so we look to see if the glock is already locked and only
   2016 * lock the glock if its not already been done. Note that its the NFS
   2017 * readdirplus operation which causes this to be called (from filldir)
   2018 * with the glock already held.
   2019 *
   2020 * Returns: errno
   2021 */
   2022
   2023static int gfs2_getattr(struct user_namespace *mnt_userns,
   2024			const struct path *path, struct kstat *stat,
   2025			u32 request_mask, unsigned int flags)
   2026{
   2027	struct inode *inode = d_inode(path->dentry);
   2028	struct gfs2_inode *ip = GFS2_I(inode);
   2029	struct gfs2_holder gh;
   2030	u32 gfsflags;
   2031	int error;
   2032
   2033	gfs2_holder_mark_uninitialized(&gh);
   2034	if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
   2035		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
   2036		if (error)
   2037			return error;
   2038	}
   2039
   2040	gfsflags = ip->i_diskflags;
   2041	if (gfsflags & GFS2_DIF_APPENDONLY)
   2042		stat->attributes |= STATX_ATTR_APPEND;
   2043	if (gfsflags & GFS2_DIF_IMMUTABLE)
   2044		stat->attributes |= STATX_ATTR_IMMUTABLE;
   2045
   2046	stat->attributes_mask |= (STATX_ATTR_APPEND |
   2047				  STATX_ATTR_COMPRESSED |
   2048				  STATX_ATTR_ENCRYPTED |
   2049				  STATX_ATTR_IMMUTABLE |
   2050				  STATX_ATTR_NODUMP);
   2051
   2052	generic_fillattr(&init_user_ns, inode, stat);
   2053
   2054	if (gfs2_holder_initialized(&gh))
   2055		gfs2_glock_dq_uninit(&gh);
   2056
   2057	return 0;
   2058}
   2059
   2060static int gfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
   2061		       u64 start, u64 len)
   2062{
   2063	struct gfs2_inode *ip = GFS2_I(inode);
   2064	struct gfs2_holder gh;
   2065	int ret;
   2066
   2067	inode_lock_shared(inode);
   2068
   2069	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
   2070	if (ret)
   2071		goto out;
   2072
   2073	ret = iomap_fiemap(inode, fieinfo, start, len, &gfs2_iomap_ops);
   2074
   2075	gfs2_glock_dq_uninit(&gh);
   2076
   2077out:
   2078	inode_unlock_shared(inode);
   2079	return ret;
   2080}
   2081
   2082loff_t gfs2_seek_data(struct file *file, loff_t offset)
   2083{
   2084	struct inode *inode = file->f_mapping->host;
   2085	struct gfs2_inode *ip = GFS2_I(inode);
   2086	struct gfs2_holder gh;
   2087	loff_t ret;
   2088
   2089	inode_lock_shared(inode);
   2090	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
   2091	if (!ret)
   2092		ret = iomap_seek_data(inode, offset, &gfs2_iomap_ops);
   2093	gfs2_glock_dq_uninit(&gh);
   2094	inode_unlock_shared(inode);
   2095
   2096	if (ret < 0)
   2097		return ret;
   2098	return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
   2099}
   2100
   2101loff_t gfs2_seek_hole(struct file *file, loff_t offset)
   2102{
   2103	struct inode *inode = file->f_mapping->host;
   2104	struct gfs2_inode *ip = GFS2_I(inode);
   2105	struct gfs2_holder gh;
   2106	loff_t ret;
   2107
   2108	inode_lock_shared(inode);
   2109	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
   2110	if (!ret)
   2111		ret = iomap_seek_hole(inode, offset, &gfs2_iomap_ops);
   2112	gfs2_glock_dq_uninit(&gh);
   2113	inode_unlock_shared(inode);
   2114
   2115	if (ret < 0)
   2116		return ret;
   2117	return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
   2118}
   2119
   2120static int gfs2_update_time(struct inode *inode, struct timespec64 *time,
   2121			    int flags)
   2122{
   2123	struct gfs2_inode *ip = GFS2_I(inode);
   2124	struct gfs2_glock *gl = ip->i_gl;
   2125	struct gfs2_holder *gh;
   2126	int error;
   2127
   2128	gh = gfs2_glock_is_locked_by_me(gl);
   2129	if (gh && !gfs2_glock_is_held_excl(gl)) {
   2130		gfs2_glock_dq(gh);
   2131		gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, gh);
   2132		error = gfs2_glock_nq(gh);
   2133		if (error)
   2134			return error;
   2135	}
   2136	return generic_update_time(inode, time, flags);
   2137}
   2138
   2139static const struct inode_operations gfs2_file_iops = {
   2140	.permission = gfs2_permission,
   2141	.setattr = gfs2_setattr,
   2142	.getattr = gfs2_getattr,
   2143	.listxattr = gfs2_listxattr,
   2144	.fiemap = gfs2_fiemap,
   2145	.get_acl = gfs2_get_acl,
   2146	.set_acl = gfs2_set_acl,
   2147	.update_time = gfs2_update_time,
   2148	.fileattr_get = gfs2_fileattr_get,
   2149	.fileattr_set = gfs2_fileattr_set,
   2150};
   2151
   2152static const struct inode_operations gfs2_dir_iops = {
   2153	.create = gfs2_create,
   2154	.lookup = gfs2_lookup,
   2155	.link = gfs2_link,
   2156	.unlink = gfs2_unlink,
   2157	.symlink = gfs2_symlink,
   2158	.mkdir = gfs2_mkdir,
   2159	.rmdir = gfs2_unlink,
   2160	.mknod = gfs2_mknod,
   2161	.rename = gfs2_rename2,
   2162	.permission = gfs2_permission,
   2163	.setattr = gfs2_setattr,
   2164	.getattr = gfs2_getattr,
   2165	.listxattr = gfs2_listxattr,
   2166	.fiemap = gfs2_fiemap,
   2167	.get_acl = gfs2_get_acl,
   2168	.set_acl = gfs2_set_acl,
   2169	.update_time = gfs2_update_time,
   2170	.atomic_open = gfs2_atomic_open,
   2171	.fileattr_get = gfs2_fileattr_get,
   2172	.fileattr_set = gfs2_fileattr_set,
   2173};
   2174
   2175static const struct inode_operations gfs2_symlink_iops = {
   2176	.get_link = gfs2_get_link,
   2177	.permission = gfs2_permission,
   2178	.setattr = gfs2_setattr,
   2179	.getattr = gfs2_getattr,
   2180	.listxattr = gfs2_listxattr,
   2181	.fiemap = gfs2_fiemap,
   2182};
   2183