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