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