1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2006 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/sched.h> 11 #include <linux/slab.h> 12 #include <linux/spinlock.h> 13 #include <linux/completion.h> 14 #include <linux/buffer_head.h> 15 #include <linux/posix_acl.h> 16 #include <linux/sort.h> 17 #include <linux/gfs2_ondisk.h> 18 #include <linux/crc32.h> 19 #include <linux/lm_interface.h> 20 #include <linux/security.h> 21 22 #include "gfs2.h" 23 #include "incore.h" 24 #include "acl.h" 25 #include "bmap.h" 26 #include "dir.h" 27 #include "eattr.h" 28 #include "glock.h" 29 #include "glops.h" 30 #include "inode.h" 31 #include "log.h" 32 #include "meta_io.h" 33 #include "ops_address.h" 34 #include "ops_file.h" 35 #include "ops_inode.h" 36 #include "quota.h" 37 #include "rgrp.h" 38 #include "trans.h" 39 #include "util.h" 40 41 static int iget_test(struct inode *inode, void *opaque) 42 { 43 struct gfs2_inode *ip = GFS2_I(inode); 44 u64 *no_addr = opaque; 45 46 if (ip->i_no_addr == *no_addr && 47 inode->i_private != NULL) 48 return 1; 49 50 return 0; 51 } 52 53 static int iget_set(struct inode *inode, void *opaque) 54 { 55 struct gfs2_inode *ip = GFS2_I(inode); 56 u64 *no_addr = opaque; 57 58 inode->i_ino = (unsigned long)*no_addr; 59 ip->i_no_addr = *no_addr; 60 return 0; 61 } 62 63 struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr) 64 { 65 unsigned long hash = (unsigned long)no_addr; 66 return ilookup5(sb, hash, iget_test, &no_addr); 67 } 68 69 static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr) 70 { 71 unsigned long hash = (unsigned long)no_addr; 72 return iget5_locked(sb, hash, iget_test, iget_set, &no_addr); 73 } 74 75 /** 76 * gfs2_inode_lookup - Lookup an inode 77 * @sb: The super block 78 * @no_addr: The inode number 79 * @type: The type of the inode 80 * 81 * Returns: A VFS inode, or an error 82 */ 83 84 struct inode *gfs2_inode_lookup(struct super_block *sb, u64 no_addr, unsigned int type) 85 { 86 struct inode *inode = gfs2_iget(sb, no_addr); 87 struct gfs2_inode *ip = GFS2_I(inode); 88 struct gfs2_glock *io_gl; 89 int error; 90 91 if (!inode) 92 return ERR_PTR(-ENOBUFS); 93 94 if (inode->i_state & I_NEW) { 95 struct gfs2_sbd *sdp = GFS2_SB(inode); 96 umode_t mode = DT2IF(type); 97 inode->i_private = ip; 98 inode->i_mode = mode; 99 100 if (S_ISREG(mode)) { 101 inode->i_op = &gfs2_file_iops; 102 inode->i_fop = &gfs2_file_fops; 103 inode->i_mapping->a_ops = &gfs2_file_aops; 104 } else if (S_ISDIR(mode)) { 105 inode->i_op = &gfs2_dir_iops; 106 inode->i_fop = &gfs2_dir_fops; 107 } else if (S_ISLNK(mode)) { 108 inode->i_op = &gfs2_symlink_iops; 109 } else { 110 inode->i_op = &gfs2_dev_iops; 111 } 112 113 error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); 114 if (unlikely(error)) 115 goto fail; 116 ip->i_gl->gl_object = ip; 117 118 error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl); 119 if (unlikely(error)) 120 goto fail_put; 121 122 set_bit(GIF_INVALID, &ip->i_flags); 123 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); 124 if (unlikely(error)) 125 goto fail_iopen; 126 127 gfs2_glock_put(io_gl); 128 unlock_new_inode(inode); 129 } 130 131 return inode; 132 fail_iopen: 133 gfs2_glock_put(io_gl); 134 fail_put: 135 ip->i_gl->gl_object = NULL; 136 gfs2_glock_put(ip->i_gl); 137 fail: 138 iput(inode); 139 return ERR_PTR(error); 140 } 141 142 static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf) 143 { 144 struct gfs2_dinode_host *di = &ip->i_di; 145 const struct gfs2_dinode *str = buf; 146 147 if (ip->i_no_addr != be64_to_cpu(str->di_num.no_addr)) { 148 if (gfs2_consist_inode(ip)) 149 gfs2_dinode_print(ip); 150 return -EIO; 151 } 152 ip->i_no_formal_ino = be64_to_cpu(str->di_num.no_formal_ino); 153 ip->i_inode.i_mode = be32_to_cpu(str->di_mode); 154 ip->i_inode.i_rdev = 0; 155 switch (ip->i_inode.i_mode & S_IFMT) { 156 case S_IFBLK: 157 case S_IFCHR: 158 ip->i_inode.i_rdev = MKDEV(be32_to_cpu(str->di_major), 159 be32_to_cpu(str->di_minor)); 160 break; 161 }; 162 163 ip->i_inode.i_uid = be32_to_cpu(str->di_uid); 164 ip->i_inode.i_gid = be32_to_cpu(str->di_gid); 165 /* 166 * We will need to review setting the nlink count here in the 167 * light of the forthcoming ro bind mount work. This is a reminder 168 * to do that. 169 */ 170 ip->i_inode.i_nlink = be32_to_cpu(str->di_nlink); 171 di->di_size = be64_to_cpu(str->di_size); 172 i_size_write(&ip->i_inode, di->di_size); 173 di->di_blocks = be64_to_cpu(str->di_blocks); 174 gfs2_set_inode_blocks(&ip->i_inode); 175 ip->i_inode.i_atime.tv_sec = be64_to_cpu(str->di_atime); 176 ip->i_inode.i_atime.tv_nsec = 0; 177 ip->i_inode.i_mtime.tv_sec = be64_to_cpu(str->di_mtime); 178 ip->i_inode.i_mtime.tv_nsec = 0; 179 ip->i_inode.i_ctime.tv_sec = be64_to_cpu(str->di_ctime); 180 ip->i_inode.i_ctime.tv_nsec = 0; 181 182 di->di_goal_meta = be64_to_cpu(str->di_goal_meta); 183 di->di_goal_data = be64_to_cpu(str->di_goal_data); 184 di->di_generation = be64_to_cpu(str->di_generation); 185 186 di->di_flags = be32_to_cpu(str->di_flags); 187 gfs2_set_inode_flags(&ip->i_inode); 188 di->di_height = be16_to_cpu(str->di_height); 189 190 di->di_depth = be16_to_cpu(str->di_depth); 191 di->di_entries = be32_to_cpu(str->di_entries); 192 193 di->di_eattr = be64_to_cpu(str->di_eattr); 194 return 0; 195 } 196 197 /** 198 * gfs2_inode_refresh - Refresh the incore copy of the dinode 199 * @ip: The GFS2 inode 200 * 201 * Returns: errno 202 */ 203 204 int gfs2_inode_refresh(struct gfs2_inode *ip) 205 { 206 struct buffer_head *dibh; 207 int error; 208 209 error = gfs2_meta_inode_buffer(ip, &dibh); 210 if (error) 211 return error; 212 213 if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), dibh, GFS2_METATYPE_DI)) { 214 brelse(dibh); 215 return -EIO; 216 } 217 218 error = gfs2_dinode_in(ip, dibh->b_data); 219 brelse(dibh); 220 clear_bit(GIF_INVALID, &ip->i_flags); 221 222 return error; 223 } 224 225 int gfs2_dinode_dealloc(struct gfs2_inode *ip) 226 { 227 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 228 struct gfs2_alloc *al; 229 struct gfs2_rgrpd *rgd; 230 int error; 231 232 if (ip->i_di.di_blocks != 1) { 233 if (gfs2_consist_inode(ip)) 234 gfs2_dinode_print(ip); 235 return -EIO; 236 } 237 238 al = gfs2_alloc_get(ip); 239 240 error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE); 241 if (error) 242 goto out; 243 244 error = gfs2_rindex_hold(sdp, &al->al_ri_gh); 245 if (error) 246 goto out_qs; 247 248 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr); 249 if (!rgd) { 250 gfs2_consist_inode(ip); 251 error = -EIO; 252 goto out_rindex_relse; 253 } 254 255 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, 256 &al->al_rgd_gh); 257 if (error) 258 goto out_rindex_relse; 259 260 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, 1); 261 if (error) 262 goto out_rg_gunlock; 263 264 gfs2_trans_add_gl(ip->i_gl); 265 266 gfs2_free_di(rgd, ip); 267 268 gfs2_trans_end(sdp); 269 clear_bit(GLF_STICKY, &ip->i_gl->gl_flags); 270 271 out_rg_gunlock: 272 gfs2_glock_dq_uninit(&al->al_rgd_gh); 273 out_rindex_relse: 274 gfs2_glock_dq_uninit(&al->al_ri_gh); 275 out_qs: 276 gfs2_quota_unhold(ip); 277 out: 278 gfs2_alloc_put(ip); 279 return error; 280 } 281 282 /** 283 * gfs2_change_nlink - Change nlink count on inode 284 * @ip: The GFS2 inode 285 * @diff: The change in the nlink count required 286 * 287 * Returns: errno 288 */ 289 int gfs2_change_nlink(struct gfs2_inode *ip, int diff) 290 { 291 struct buffer_head *dibh; 292 u32 nlink; 293 int error; 294 295 BUG_ON(diff != 1 && diff != -1); 296 nlink = ip->i_inode.i_nlink + diff; 297 298 /* If we are reducing the nlink count, but the new value ends up being 299 bigger than the old one, we must have underflowed. */ 300 if (diff < 0 && nlink > ip->i_inode.i_nlink) { 301 if (gfs2_consist_inode(ip)) 302 gfs2_dinode_print(ip); 303 return -EIO; 304 } 305 306 error = gfs2_meta_inode_buffer(ip, &dibh); 307 if (error) 308 return error; 309 310 if (diff > 0) 311 inc_nlink(&ip->i_inode); 312 else 313 drop_nlink(&ip->i_inode); 314 315 ip->i_inode.i_ctime = CURRENT_TIME_SEC; 316 317 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 318 gfs2_dinode_out(ip, dibh->b_data); 319 brelse(dibh); 320 mark_inode_dirty(&ip->i_inode); 321 322 if (ip->i_inode.i_nlink == 0) 323 gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */ 324 325 return error; 326 } 327 328 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name) 329 { 330 struct qstr qstr; 331 struct inode *inode; 332 gfs2_str2qstr(&qstr, name); 333 inode = gfs2_lookupi(dip, &qstr, 1, NULL); 334 /* gfs2_lookupi has inconsistent callers: vfs 335 * related routines expect NULL for no entry found, 336 * gfs2_lookup_simple callers expect ENOENT 337 * and do not check for NULL. 338 */ 339 if (inode == NULL) 340 return ERR_PTR(-ENOENT); 341 else 342 return inode; 343 } 344 345 346 /** 347 * gfs2_lookupi - Look up a filename in a directory and return its inode 348 * @d_gh: An initialized holder for the directory glock 349 * @name: The name of the inode to look for 350 * @is_root: If 1, ignore the caller's permissions 351 * @i_gh: An uninitialized holder for the new inode glock 352 * 353 * This can be called via the VFS filldir function when NFS is doing 354 * a readdirplus and the inode which its intending to stat isn't 355 * already in cache. In this case we must not take the directory glock 356 * again, since the readdir call will have already taken that lock. 357 * 358 * Returns: errno 359 */ 360 361 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name, 362 int is_root, struct nameidata *nd) 363 { 364 struct super_block *sb = dir->i_sb; 365 struct gfs2_inode *dip = GFS2_I(dir); 366 struct gfs2_holder d_gh; 367 int error; 368 struct inode *inode = NULL; 369 int unlock = 0; 370 371 if (!name->len || name->len > GFS2_FNAMESIZE) 372 return ERR_PTR(-ENAMETOOLONG); 373 374 if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) || 375 (name->len == 2 && memcmp(name->name, "..", 2) == 0 && 376 dir == sb->s_root->d_inode)) { 377 igrab(dir); 378 return dir; 379 } 380 381 if (gfs2_glock_is_locked_by_me(dip->i_gl) == 0) { 382 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh); 383 if (error) 384 return ERR_PTR(error); 385 unlock = 1; 386 } 387 388 if (!is_root) { 389 error = permission(dir, MAY_EXEC, NULL); 390 if (error) 391 goto out; 392 } 393 394 inode = gfs2_dir_search(dir, name); 395 if (IS_ERR(inode)) 396 error = PTR_ERR(inode); 397 out: 398 if (unlock) 399 gfs2_glock_dq_uninit(&d_gh); 400 if (error == -ENOENT) 401 return NULL; 402 return inode ? inode : ERR_PTR(error); 403 } 404 405 static int pick_formal_ino_1(struct gfs2_sbd *sdp, u64 *formal_ino) 406 { 407 struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode); 408 struct buffer_head *bh; 409 struct gfs2_inum_range_host ir; 410 int error; 411 412 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 413 if (error) 414 return error; 415 mutex_lock(&sdp->sd_inum_mutex); 416 417 error = gfs2_meta_inode_buffer(ip, &bh); 418 if (error) { 419 mutex_unlock(&sdp->sd_inum_mutex); 420 gfs2_trans_end(sdp); 421 return error; 422 } 423 424 gfs2_inum_range_in(&ir, bh->b_data + sizeof(struct gfs2_dinode)); 425 426 if (ir.ir_length) { 427 *formal_ino = ir.ir_start++; 428 ir.ir_length--; 429 gfs2_trans_add_bh(ip->i_gl, bh, 1); 430 gfs2_inum_range_out(&ir, 431 bh->b_data + sizeof(struct gfs2_dinode)); 432 brelse(bh); 433 mutex_unlock(&sdp->sd_inum_mutex); 434 gfs2_trans_end(sdp); 435 return 0; 436 } 437 438 brelse(bh); 439 440 mutex_unlock(&sdp->sd_inum_mutex); 441 gfs2_trans_end(sdp); 442 443 return 1; 444 } 445 446 static int pick_formal_ino_2(struct gfs2_sbd *sdp, u64 *formal_ino) 447 { 448 struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode); 449 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_inum_inode); 450 struct gfs2_holder gh; 451 struct buffer_head *bh; 452 struct gfs2_inum_range_host ir; 453 int error; 454 455 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); 456 if (error) 457 return error; 458 459 error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0); 460 if (error) 461 goto out; 462 mutex_lock(&sdp->sd_inum_mutex); 463 464 error = gfs2_meta_inode_buffer(ip, &bh); 465 if (error) 466 goto out_end_trans; 467 468 gfs2_inum_range_in(&ir, bh->b_data + sizeof(struct gfs2_dinode)); 469 470 if (!ir.ir_length) { 471 struct buffer_head *m_bh; 472 u64 x, y; 473 __be64 z; 474 475 error = gfs2_meta_inode_buffer(m_ip, &m_bh); 476 if (error) 477 goto out_brelse; 478 479 z = *(__be64 *)(m_bh->b_data + sizeof(struct gfs2_dinode)); 480 x = y = be64_to_cpu(z); 481 ir.ir_start = x; 482 ir.ir_length = GFS2_INUM_QUANTUM; 483 x += GFS2_INUM_QUANTUM; 484 if (x < y) 485 gfs2_consist_inode(m_ip); 486 z = cpu_to_be64(x); 487 gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1); 488 *(__be64 *)(m_bh->b_data + sizeof(struct gfs2_dinode)) = z; 489 490 brelse(m_bh); 491 } 492 493 *formal_ino = ir.ir_start++; 494 ir.ir_length--; 495 496 gfs2_trans_add_bh(ip->i_gl, bh, 1); 497 gfs2_inum_range_out(&ir, bh->b_data + sizeof(struct gfs2_dinode)); 498 499 out_brelse: 500 brelse(bh); 501 out_end_trans: 502 mutex_unlock(&sdp->sd_inum_mutex); 503 gfs2_trans_end(sdp); 504 out: 505 gfs2_glock_dq_uninit(&gh); 506 return error; 507 } 508 509 static int pick_formal_ino(struct gfs2_sbd *sdp, u64 *inum) 510 { 511 int error; 512 513 error = pick_formal_ino_1(sdp, inum); 514 if (error <= 0) 515 return error; 516 517 error = pick_formal_ino_2(sdp, inum); 518 519 return error; 520 } 521 522 /** 523 * create_ok - OK to create a new on-disk inode here? 524 * @dip: Directory in which dinode is to be created 525 * @name: Name of new dinode 526 * @mode: 527 * 528 * Returns: errno 529 */ 530 531 static int create_ok(struct gfs2_inode *dip, const struct qstr *name, 532 unsigned int mode) 533 { 534 int error; 535 536 error = permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, NULL); 537 if (error) 538 return error; 539 540 /* Don't create entries in an unlinked directory */ 541 if (!dip->i_inode.i_nlink) 542 return -EPERM; 543 544 error = gfs2_dir_check(&dip->i_inode, name, NULL); 545 switch (error) { 546 case -ENOENT: 547 error = 0; 548 break; 549 case 0: 550 return -EEXIST; 551 default: 552 return error; 553 } 554 555 if (dip->i_di.di_entries == (u32)-1) 556 return -EFBIG; 557 if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1) 558 return -EMLINK; 559 560 return 0; 561 } 562 563 static void munge_mode_uid_gid(struct gfs2_inode *dip, unsigned int *mode, 564 unsigned int *uid, unsigned int *gid) 565 { 566 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir && 567 (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) { 568 if (S_ISDIR(*mode)) 569 *mode |= S_ISUID; 570 else if (dip->i_inode.i_uid != current->fsuid) 571 *mode &= ~07111; 572 *uid = dip->i_inode.i_uid; 573 } else 574 *uid = current->fsuid; 575 576 if (dip->i_inode.i_mode & S_ISGID) { 577 if (S_ISDIR(*mode)) 578 *mode |= S_ISGID; 579 *gid = dip->i_inode.i_gid; 580 } else 581 *gid = current->fsgid; 582 } 583 584 static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation) 585 { 586 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 587 int error; 588 589 gfs2_alloc_get(dip); 590 591 dip->i_alloc.al_requested = RES_DINODE; 592 error = gfs2_inplace_reserve(dip); 593 if (error) 594 goto out; 595 596 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS, 0); 597 if (error) 598 goto out_ipreserv; 599 600 *no_addr = gfs2_alloc_di(dip, generation); 601 602 gfs2_trans_end(sdp); 603 604 out_ipreserv: 605 gfs2_inplace_release(dip); 606 out: 607 gfs2_alloc_put(dip); 608 return error; 609 } 610 611 /** 612 * init_dinode - Fill in a new dinode structure 613 * @dip: the directory this inode is being created in 614 * @gl: The glock covering the new inode 615 * @inum: the inode number 616 * @mode: the file permissions 617 * @uid: 618 * @gid: 619 * 620 */ 621 622 static void init_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, 623 const struct gfs2_inum_host *inum, unsigned int mode, 624 unsigned int uid, unsigned int gid, 625 const u64 *generation, dev_t dev) 626 { 627 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 628 struct gfs2_dinode *di; 629 struct buffer_head *dibh; 630 631 dibh = gfs2_meta_new(gl, inum->no_addr); 632 gfs2_trans_add_bh(gl, dibh, 1); 633 gfs2_metatype_set(dibh, GFS2_METATYPE_DI, GFS2_FORMAT_DI); 634 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode)); 635 di = (struct gfs2_dinode *)dibh->b_data; 636 637 di->di_num.no_formal_ino = cpu_to_be64(inum->no_formal_ino); 638 di->di_num.no_addr = cpu_to_be64(inum->no_addr); 639 di->di_mode = cpu_to_be32(mode); 640 di->di_uid = cpu_to_be32(uid); 641 di->di_gid = cpu_to_be32(gid); 642 di->di_nlink = 0; 643 di->di_size = 0; 644 di->di_blocks = cpu_to_be64(1); 645 di->di_atime = di->di_mtime = di->di_ctime = cpu_to_be64(get_seconds()); 646 di->di_major = cpu_to_be32(MAJOR(dev)); 647 di->di_minor = cpu_to_be32(MINOR(dev)); 648 di->di_goal_meta = di->di_goal_data = cpu_to_be64(inum->no_addr); 649 di->di_generation = cpu_to_be64(*generation); 650 di->di_flags = 0; 651 652 if (S_ISREG(mode)) { 653 if ((dip->i_di.di_flags & GFS2_DIF_INHERIT_JDATA) || 654 gfs2_tune_get(sdp, gt_new_files_jdata)) 655 di->di_flags |= cpu_to_be32(GFS2_DIF_JDATA); 656 if ((dip->i_di.di_flags & GFS2_DIF_INHERIT_DIRECTIO) || 657 gfs2_tune_get(sdp, gt_new_files_directio)) 658 di->di_flags |= cpu_to_be32(GFS2_DIF_DIRECTIO); 659 } else if (S_ISDIR(mode)) { 660 di->di_flags |= cpu_to_be32(dip->i_di.di_flags & 661 GFS2_DIF_INHERIT_DIRECTIO); 662 di->di_flags |= cpu_to_be32(dip->i_di.di_flags & 663 GFS2_DIF_INHERIT_JDATA); 664 } 665 666 di->__pad1 = 0; 667 di->di_payload_format = cpu_to_be32(S_ISDIR(mode) ? GFS2_FORMAT_DE : 0); 668 di->di_height = 0; 669 di->__pad2 = 0; 670 di->__pad3 = 0; 671 di->di_depth = 0; 672 di->di_entries = 0; 673 memset(&di->__pad4, 0, sizeof(di->__pad4)); 674 di->di_eattr = 0; 675 memset(&di->di_reserved, 0, sizeof(di->di_reserved)); 676 677 brelse(dibh); 678 } 679 680 static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, 681 unsigned int mode, const struct gfs2_inum_host *inum, 682 const u64 *generation, dev_t dev) 683 { 684 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 685 unsigned int uid, gid; 686 int error; 687 688 munge_mode_uid_gid(dip, &mode, &uid, &gid); 689 gfs2_alloc_get(dip); 690 691 error = gfs2_quota_lock(dip, uid, gid); 692 if (error) 693 goto out; 694 695 error = gfs2_quota_check(dip, uid, gid); 696 if (error) 697 goto out_quota; 698 699 error = gfs2_trans_begin(sdp, RES_DINODE + RES_QUOTA, 0); 700 if (error) 701 goto out_quota; 702 703 init_dinode(dip, gl, inum, mode, uid, gid, generation, dev); 704 gfs2_quota_change(dip, +1, uid, gid); 705 gfs2_trans_end(sdp); 706 707 out_quota: 708 gfs2_quota_unlock(dip); 709 out: 710 gfs2_alloc_put(dip); 711 return error; 712 } 713 714 static int link_dinode(struct gfs2_inode *dip, const struct qstr *name, 715 struct gfs2_inode *ip) 716 { 717 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 718 struct gfs2_alloc *al; 719 int alloc_required; 720 struct buffer_head *dibh; 721 int error; 722 723 al = gfs2_alloc_get(dip); 724 725 error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE); 726 if (error) 727 goto fail; 728 729 error = alloc_required = gfs2_diradd_alloc_required(&dip->i_inode, name); 730 if (alloc_required < 0) 731 goto fail; 732 if (alloc_required) { 733 error = gfs2_quota_check(dip, dip->i_inode.i_uid, dip->i_inode.i_gid); 734 if (error) 735 goto fail_quota_locks; 736 737 al->al_requested = sdp->sd_max_dirres; 738 739 error = gfs2_inplace_reserve(dip); 740 if (error) 741 goto fail_quota_locks; 742 743 error = gfs2_trans_begin(sdp, sdp->sd_max_dirres + 744 al->al_rgd->rd_ri.ri_length + 745 2 * RES_DINODE + 746 RES_STATFS + RES_QUOTA, 0); 747 if (error) 748 goto fail_ipreserv; 749 } else { 750 error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0); 751 if (error) 752 goto fail_quota_locks; 753 } 754 755 error = gfs2_dir_add(&dip->i_inode, name, ip, IF2DT(ip->i_inode.i_mode)); 756 if (error) 757 goto fail_end_trans; 758 759 error = gfs2_meta_inode_buffer(ip, &dibh); 760 if (error) 761 goto fail_end_trans; 762 ip->i_inode.i_nlink = 1; 763 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 764 gfs2_dinode_out(ip, dibh->b_data); 765 brelse(dibh); 766 return 0; 767 768 fail_end_trans: 769 gfs2_trans_end(sdp); 770 771 fail_ipreserv: 772 if (dip->i_alloc.al_rgd) 773 gfs2_inplace_release(dip); 774 775 fail_quota_locks: 776 gfs2_quota_unlock(dip); 777 778 fail: 779 gfs2_alloc_put(dip); 780 return error; 781 } 782 783 static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip) 784 { 785 int err; 786 size_t len; 787 void *value; 788 char *name; 789 struct gfs2_ea_request er; 790 791 err = security_inode_init_security(&ip->i_inode, &dip->i_inode, 792 &name, &value, &len); 793 794 if (err) { 795 if (err == -EOPNOTSUPP) 796 return 0; 797 return err; 798 } 799 800 memset(&er, 0, sizeof(struct gfs2_ea_request)); 801 802 er.er_type = GFS2_EATYPE_SECURITY; 803 er.er_name = name; 804 er.er_data = value; 805 er.er_name_len = strlen(name); 806 er.er_data_len = len; 807 808 err = gfs2_ea_set_i(ip, &er); 809 810 kfree(value); 811 kfree(name); 812 813 return err; 814 } 815 816 /** 817 * gfs2_createi - Create a new inode 818 * @ghs: An array of two holders 819 * @name: The name of the new file 820 * @mode: the permissions on the new inode 821 * 822 * @ghs[0] is an initialized holder for the directory 823 * @ghs[1] is the holder for the inode lock 824 * 825 * If the return value is not NULL, the glocks on both the directory and the new 826 * file are held. A transaction has been started and an inplace reservation 827 * is held, as well. 828 * 829 * Returns: An inode 830 */ 831 832 struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name, 833 unsigned int mode, dev_t dev) 834 { 835 struct inode *inode; 836 struct gfs2_inode *dip = ghs->gh_gl->gl_object; 837 struct inode *dir = &dip->i_inode; 838 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 839 struct gfs2_inum_host inum = { .no_addr = 0, .no_formal_ino = 0 }; 840 int error; 841 u64 generation; 842 843 if (!name->len || name->len > GFS2_FNAMESIZE) 844 return ERR_PTR(-ENAMETOOLONG); 845 846 gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, ghs); 847 error = gfs2_glock_nq(ghs); 848 if (error) 849 goto fail; 850 851 error = create_ok(dip, name, mode); 852 if (error) 853 goto fail_gunlock; 854 855 error = pick_formal_ino(sdp, &inum.no_formal_ino); 856 if (error) 857 goto fail_gunlock; 858 859 error = alloc_dinode(dip, &inum.no_addr, &generation); 860 if (error) 861 goto fail_gunlock; 862 863 error = gfs2_glock_nq_num(sdp, inum.no_addr, &gfs2_inode_glops, 864 LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1); 865 if (error) 866 goto fail_gunlock; 867 868 error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev); 869 if (error) 870 goto fail_gunlock2; 871 872 inode = gfs2_inode_lookup(dir->i_sb, inum.no_addr, IF2DT(mode)); 873 if (IS_ERR(inode)) 874 goto fail_gunlock2; 875 876 error = gfs2_inode_refresh(GFS2_I(inode)); 877 if (error) 878 goto fail_iput; 879 880 error = gfs2_acl_create(dip, GFS2_I(inode)); 881 if (error) 882 goto fail_iput; 883 884 error = gfs2_security_init(dip, GFS2_I(inode)); 885 if (error) 886 goto fail_iput; 887 888 error = link_dinode(dip, name, GFS2_I(inode)); 889 if (error) 890 goto fail_iput; 891 892 if (!inode) 893 return ERR_PTR(-ENOMEM); 894 return inode; 895 896 fail_iput: 897 iput(inode); 898 fail_gunlock2: 899 gfs2_glock_dq_uninit(ghs + 1); 900 fail_gunlock: 901 gfs2_glock_dq(ghs); 902 fail: 903 return ERR_PTR(error); 904 } 905 906 /** 907 * gfs2_rmdiri - Remove a directory 908 * @dip: The parent directory of the directory to be removed 909 * @name: The name of the directory to be removed 910 * @ip: The GFS2 inode of the directory to be removed 911 * 912 * Assumes Glocks on dip and ip are held 913 * 914 * Returns: errno 915 */ 916 917 int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name, 918 struct gfs2_inode *ip) 919 { 920 struct qstr dotname; 921 int error; 922 923 if (ip->i_di.di_entries != 2) { 924 if (gfs2_consist_inode(ip)) 925 gfs2_dinode_print(ip); 926 return -EIO; 927 } 928 929 error = gfs2_dir_del(dip, name); 930 if (error) 931 return error; 932 933 error = gfs2_change_nlink(dip, -1); 934 if (error) 935 return error; 936 937 gfs2_str2qstr(&dotname, "."); 938 error = gfs2_dir_del(ip, &dotname); 939 if (error) 940 return error; 941 942 gfs2_str2qstr(&dotname, ".."); 943 error = gfs2_dir_del(ip, &dotname); 944 if (error) 945 return error; 946 947 /* It looks odd, but it really should be done twice */ 948 error = gfs2_change_nlink(ip, -1); 949 if (error) 950 return error; 951 952 error = gfs2_change_nlink(ip, -1); 953 if (error) 954 return error; 955 956 return error; 957 } 958 959 /* 960 * gfs2_unlink_ok - check to see that a inode is still in a directory 961 * @dip: the directory 962 * @name: the name of the file 963 * @ip: the inode 964 * 965 * Assumes that the lock on (at least) @dip is held. 966 * 967 * Returns: 0 if the parent/child relationship is correct, errno if it isn't 968 */ 969 970 int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name, 971 const struct gfs2_inode *ip) 972 { 973 int error; 974 975 if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode)) 976 return -EPERM; 977 978 if ((dip->i_inode.i_mode & S_ISVTX) && 979 dip->i_inode.i_uid != current->fsuid && 980 ip->i_inode.i_uid != current->fsuid && !capable(CAP_FOWNER)) 981 return -EPERM; 982 983 if (IS_APPEND(&dip->i_inode)) 984 return -EPERM; 985 986 error = permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, NULL); 987 if (error) 988 return error; 989 990 error = gfs2_dir_check(&dip->i_inode, name, ip); 991 if (error) 992 return error; 993 994 return 0; 995 } 996 997 /* 998 * gfs2_ok_to_move - check if it's ok to move a directory to another directory 999 * @this: move this 1000 * @to: to here 1001 * 1002 * Follow @to back to the root and make sure we don't encounter @this 1003 * Assumes we already hold the rename lock. 1004 * 1005 * Returns: errno 1006 */ 1007 1008 int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to) 1009 { 1010 struct inode *dir = &to->i_inode; 1011 struct super_block *sb = dir->i_sb; 1012 struct inode *tmp; 1013 struct qstr dotdot; 1014 int error = 0; 1015 1016 gfs2_str2qstr(&dotdot, ".."); 1017 1018 igrab(dir); 1019 1020 for (;;) { 1021 if (dir == &this->i_inode) { 1022 error = -EINVAL; 1023 break; 1024 } 1025 if (dir == sb->s_root->d_inode) { 1026 error = 0; 1027 break; 1028 } 1029 1030 tmp = gfs2_lookupi(dir, &dotdot, 1, NULL); 1031 if (IS_ERR(tmp)) { 1032 error = PTR_ERR(tmp); 1033 break; 1034 } 1035 1036 iput(dir); 1037 dir = tmp; 1038 } 1039 1040 iput(dir); 1041 1042 return error; 1043 } 1044 1045 /** 1046 * gfs2_readlinki - return the contents of a symlink 1047 * @ip: the symlink's inode 1048 * @buf: a pointer to the buffer to be filled 1049 * @len: a pointer to the length of @buf 1050 * 1051 * If @buf is too small, a piece of memory is kmalloc()ed and needs 1052 * to be freed by the caller. 1053 * 1054 * Returns: errno 1055 */ 1056 1057 int gfs2_readlinki(struct gfs2_inode *ip, char **buf, unsigned int *len) 1058 { 1059 struct gfs2_holder i_gh; 1060 struct buffer_head *dibh; 1061 unsigned int x; 1062 int error; 1063 1064 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, GL_ATIME, &i_gh); 1065 error = gfs2_glock_nq_atime(&i_gh); 1066 if (error) { 1067 gfs2_holder_uninit(&i_gh); 1068 return error; 1069 } 1070 1071 if (!ip->i_di.di_size) { 1072 gfs2_consist_inode(ip); 1073 error = -EIO; 1074 goto out; 1075 } 1076 1077 error = gfs2_meta_inode_buffer(ip, &dibh); 1078 if (error) 1079 goto out; 1080 1081 x = ip->i_di.di_size + 1; 1082 if (x > *len) { 1083 *buf = kmalloc(x, GFP_KERNEL); 1084 if (!*buf) { 1085 error = -ENOMEM; 1086 goto out_brelse; 1087 } 1088 } 1089 1090 memcpy(*buf, dibh->b_data + sizeof(struct gfs2_dinode), x); 1091 *len = x; 1092 1093 out_brelse: 1094 brelse(dibh); 1095 out: 1096 gfs2_glock_dq_uninit(&i_gh); 1097 return error; 1098 } 1099 1100 /** 1101 * gfs2_glock_nq_atime - Acquire a hold on an inode's glock, and 1102 * conditionally update the inode's atime 1103 * @gh: the holder to acquire 1104 * 1105 * Tests atime (access time) for gfs2_read, gfs2_readdir and gfs2_mmap 1106 * Update if the difference between the current time and the inode's current 1107 * atime is greater than an interval specified at mount. 1108 * 1109 * Returns: errno 1110 */ 1111 1112 int gfs2_glock_nq_atime(struct gfs2_holder *gh) 1113 { 1114 struct gfs2_glock *gl = gh->gh_gl; 1115 struct gfs2_sbd *sdp = gl->gl_sbd; 1116 struct gfs2_inode *ip = gl->gl_object; 1117 s64 curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum); 1118 unsigned int state; 1119 int flags; 1120 int error; 1121 1122 if (gfs2_assert_warn(sdp, gh->gh_flags & GL_ATIME) || 1123 gfs2_assert_warn(sdp, !(gh->gh_flags & GL_ASYNC)) || 1124 gfs2_assert_warn(sdp, gl->gl_ops == &gfs2_inode_glops)) 1125 return -EINVAL; 1126 1127 state = gh->gh_state; 1128 flags = gh->gh_flags; 1129 1130 error = gfs2_glock_nq(gh); 1131 if (error) 1132 return error; 1133 1134 if (test_bit(SDF_NOATIME, &sdp->sd_flags) || 1135 (sdp->sd_vfs->s_flags & MS_RDONLY)) 1136 return 0; 1137 1138 curtime = get_seconds(); 1139 if (curtime - ip->i_inode.i_atime.tv_sec >= quantum) { 1140 gfs2_glock_dq(gh); 1141 gfs2_holder_reinit(LM_ST_EXCLUSIVE, gh->gh_flags & ~LM_FLAG_ANY, 1142 gh); 1143 error = gfs2_glock_nq(gh); 1144 if (error) 1145 return error; 1146 1147 /* Verify that atime hasn't been updated while we were 1148 trying to get exclusive lock. */ 1149 1150 curtime = get_seconds(); 1151 if (curtime - ip->i_inode.i_atime.tv_sec >= quantum) { 1152 struct buffer_head *dibh; 1153 struct gfs2_dinode *di; 1154 1155 error = gfs2_trans_begin(sdp, RES_DINODE, 0); 1156 if (error == -EROFS) 1157 return 0; 1158 if (error) 1159 goto fail; 1160 1161 error = gfs2_meta_inode_buffer(ip, &dibh); 1162 if (error) 1163 goto fail_end_trans; 1164 1165 ip->i_inode.i_atime.tv_sec = curtime; 1166 1167 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 1168 di = (struct gfs2_dinode *)dibh->b_data; 1169 di->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec); 1170 brelse(dibh); 1171 1172 gfs2_trans_end(sdp); 1173 } 1174 1175 /* If someone else has asked for the glock, 1176 unlock and let them have it. Then reacquire 1177 in the original state. */ 1178 if (gfs2_glock_is_blocking(gl)) { 1179 gfs2_glock_dq(gh); 1180 gfs2_holder_reinit(state, flags, gh); 1181 return gfs2_glock_nq(gh); 1182 } 1183 } 1184 1185 return 0; 1186 1187 fail_end_trans: 1188 gfs2_trans_end(sdp); 1189 fail: 1190 gfs2_glock_dq(gh); 1191 return error; 1192 } 1193 1194 static int 1195 __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr) 1196 { 1197 struct buffer_head *dibh; 1198 int error; 1199 1200 error = gfs2_meta_inode_buffer(ip, &dibh); 1201 if (!error) { 1202 error = inode_setattr(&ip->i_inode, attr); 1203 gfs2_assert_warn(GFS2_SB(&ip->i_inode), !error); 1204 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 1205 gfs2_dinode_out(ip, dibh->b_data); 1206 brelse(dibh); 1207 } 1208 return error; 1209 } 1210 1211 /** 1212 * gfs2_setattr_simple - 1213 * @ip: 1214 * @attr: 1215 * 1216 * Called with a reference on the vnode. 1217 * 1218 * Returns: errno 1219 */ 1220 1221 int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr) 1222 { 1223 int error; 1224 1225 if (current->journal_info) 1226 return __gfs2_setattr_simple(ip, attr); 1227 1228 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE, 0); 1229 if (error) 1230 return error; 1231 1232 error = __gfs2_setattr_simple(ip, attr); 1233 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 1234 return error; 1235 } 1236 1237