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