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