at v2.6.39 1008 lines 25 kB view raw
1/* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2008 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/security.h> 20#include <linux/time.h> 21 22#include "gfs2.h" 23#include "incore.h" 24#include "acl.h" 25#include "bmap.h" 26#include "dir.h" 27#include "xattr.h" 28#include "glock.h" 29#include "glops.h" 30#include "inode.h" 31#include "log.h" 32#include "meta_io.h" 33#include "quota.h" 34#include "rgrp.h" 35#include "trans.h" 36#include "util.h" 37 38struct gfs2_inum_range_host { 39 u64 ir_start; 40 u64 ir_length; 41}; 42 43struct gfs2_skip_data { 44 u64 no_addr; 45 int skipped; 46 int non_block; 47}; 48 49static int iget_test(struct inode *inode, void *opaque) 50{ 51 struct gfs2_inode *ip = GFS2_I(inode); 52 struct gfs2_skip_data *data = opaque; 53 54 if (ip->i_no_addr == data->no_addr) { 55 if (data->non_block && 56 inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)) { 57 data->skipped = 1; 58 return 0; 59 } 60 return 1; 61 } 62 return 0; 63} 64 65static int iget_set(struct inode *inode, void *opaque) 66{ 67 struct gfs2_inode *ip = GFS2_I(inode); 68 struct gfs2_skip_data *data = opaque; 69 70 if (data->skipped) 71 return -ENOENT; 72 inode->i_ino = (unsigned long)(data->no_addr); 73 ip->i_no_addr = data->no_addr; 74 return 0; 75} 76 77struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr) 78{ 79 unsigned long hash = (unsigned long)no_addr; 80 struct gfs2_skip_data data; 81 82 data.no_addr = no_addr; 83 data.skipped = 0; 84 data.non_block = 0; 85 return ilookup5(sb, hash, iget_test, &data); 86} 87 88static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr, 89 int non_block) 90{ 91 struct gfs2_skip_data data; 92 unsigned long hash = (unsigned long)no_addr; 93 94 data.no_addr = no_addr; 95 data.skipped = 0; 96 data.non_block = non_block; 97 return iget5_locked(sb, hash, iget_test, iget_set, &data); 98} 99 100/** 101 * gfs2_set_iop - Sets inode operations 102 * @inode: The inode with correct i_mode filled in 103 * 104 * GFS2 lookup code fills in vfs inode contents based on info obtained 105 * from directory entry inside gfs2_inode_lookup(). 106 */ 107 108static void gfs2_set_iop(struct inode *inode) 109{ 110 struct gfs2_sbd *sdp = GFS2_SB(inode); 111 umode_t mode = inode->i_mode; 112 113 if (S_ISREG(mode)) { 114 inode->i_op = &gfs2_file_iops; 115 if (gfs2_localflocks(sdp)) 116 inode->i_fop = &gfs2_file_fops_nolock; 117 else 118 inode->i_fop = &gfs2_file_fops; 119 } else if (S_ISDIR(mode)) { 120 inode->i_op = &gfs2_dir_iops; 121 if (gfs2_localflocks(sdp)) 122 inode->i_fop = &gfs2_dir_fops_nolock; 123 else 124 inode->i_fop = &gfs2_dir_fops; 125 } else if (S_ISLNK(mode)) { 126 inode->i_op = &gfs2_symlink_iops; 127 } else { 128 inode->i_op = &gfs2_file_iops; 129 init_special_inode(inode, inode->i_mode, inode->i_rdev); 130 } 131} 132 133/** 134 * gfs2_inode_lookup - Lookup an inode 135 * @sb: The super block 136 * @no_addr: The inode number 137 * @type: The type of the inode 138 * non_block: Can we block on inodes that are being freed? 139 * 140 * Returns: A VFS inode, or an error 141 */ 142 143struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type, 144 u64 no_addr, u64 no_formal_ino, int non_block) 145{ 146 struct inode *inode; 147 struct gfs2_inode *ip; 148 struct gfs2_glock *io_gl = NULL; 149 int error; 150 151 inode = gfs2_iget(sb, no_addr, non_block); 152 ip = GFS2_I(inode); 153 154 if (!inode) 155 return ERR_PTR(-ENOBUFS); 156 157 if (inode->i_state & I_NEW) { 158 struct gfs2_sbd *sdp = GFS2_SB(inode); 159 ip->i_no_formal_ino = no_formal_ino; 160 161 error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); 162 if (unlikely(error)) 163 goto fail; 164 ip->i_gl->gl_object = ip; 165 166 error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl); 167 if (unlikely(error)) 168 goto fail_put; 169 170 set_bit(GIF_INVALID, &ip->i_flags); 171 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); 172 if (unlikely(error)) 173 goto fail_iopen; 174 175 ip->i_iopen_gh.gh_gl->gl_object = ip; 176 gfs2_glock_put(io_gl); 177 io_gl = NULL; 178 179 if (type == DT_UNKNOWN) { 180 /* Inode glock must be locked already */ 181 error = gfs2_inode_refresh(GFS2_I(inode)); 182 if (error) 183 goto fail_refresh; 184 } else { 185 inode->i_mode = DT2IF(type); 186 } 187 188 gfs2_set_iop(inode); 189 unlock_new_inode(inode); 190 } 191 192 return inode; 193 194fail_refresh: 195 ip->i_iopen_gh.gh_gl->gl_object = NULL; 196 gfs2_glock_dq_uninit(&ip->i_iopen_gh); 197fail_iopen: 198 if (io_gl) 199 gfs2_glock_put(io_gl); 200fail_put: 201 ip->i_gl->gl_object = NULL; 202 gfs2_glock_put(ip->i_gl); 203fail: 204 iget_failed(inode); 205 return ERR_PTR(error); 206} 207 208struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr, 209 u64 *no_formal_ino, unsigned int blktype) 210{ 211 struct super_block *sb = sdp->sd_vfs; 212 struct gfs2_holder i_gh; 213 struct inode *inode = NULL; 214 int error; 215 216 /* Must not read in block until block type is verified */ 217 error = gfs2_glock_nq_num(sdp, no_addr, &gfs2_inode_glops, 218 LM_ST_EXCLUSIVE, GL_SKIP, &i_gh); 219 if (error) 220 return ERR_PTR(error); 221 222 error = gfs2_check_blk_type(sdp, no_addr, blktype); 223 if (error) 224 goto fail; 225 226 inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, 0, 1); 227 if (IS_ERR(inode)) 228 goto fail; 229 230 /* Two extra checks for NFS only */ 231 if (no_formal_ino) { 232 error = -ESTALE; 233 if (GFS2_I(inode)->i_no_formal_ino != *no_formal_ino) 234 goto fail_iput; 235 236 error = -EIO; 237 if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM) 238 goto fail_iput; 239 240 error = 0; 241 } 242 243fail: 244 gfs2_glock_dq_uninit(&i_gh); 245 return error ? ERR_PTR(error) : inode; 246fail_iput: 247 iput(inode); 248 goto fail; 249} 250 251static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf) 252{ 253 const struct gfs2_dinode *str = buf; 254 struct timespec atime; 255 u16 height, depth; 256 257 if (unlikely(ip->i_no_addr != be64_to_cpu(str->di_num.no_addr))) 258 goto corrupt; 259 ip->i_no_formal_ino = be64_to_cpu(str->di_num.no_formal_ino); 260 ip->i_inode.i_mode = be32_to_cpu(str->di_mode); 261 ip->i_inode.i_rdev = 0; 262 switch (ip->i_inode.i_mode & S_IFMT) { 263 case S_IFBLK: 264 case S_IFCHR: 265 ip->i_inode.i_rdev = MKDEV(be32_to_cpu(str->di_major), 266 be32_to_cpu(str->di_minor)); 267 break; 268 }; 269 270 ip->i_inode.i_uid = be32_to_cpu(str->di_uid); 271 ip->i_inode.i_gid = be32_to_cpu(str->di_gid); 272 /* 273 * We will need to review setting the nlink count here in the 274 * light of the forthcoming ro bind mount work. This is a reminder 275 * to do that. 276 */ 277 ip->i_inode.i_nlink = be32_to_cpu(str->di_nlink); 278 i_size_write(&ip->i_inode, be64_to_cpu(str->di_size)); 279 gfs2_set_inode_blocks(&ip->i_inode, be64_to_cpu(str->di_blocks)); 280 atime.tv_sec = be64_to_cpu(str->di_atime); 281 atime.tv_nsec = be32_to_cpu(str->di_atime_nsec); 282 if (timespec_compare(&ip->i_inode.i_atime, &atime) < 0) 283 ip->i_inode.i_atime = atime; 284 ip->i_inode.i_mtime.tv_sec = be64_to_cpu(str->di_mtime); 285 ip->i_inode.i_mtime.tv_nsec = be32_to_cpu(str->di_mtime_nsec); 286 ip->i_inode.i_ctime.tv_sec = be64_to_cpu(str->di_ctime); 287 ip->i_inode.i_ctime.tv_nsec = be32_to_cpu(str->di_ctime_nsec); 288 289 ip->i_goal = be64_to_cpu(str->di_goal_meta); 290 ip->i_generation = be64_to_cpu(str->di_generation); 291 292 ip->i_diskflags = be32_to_cpu(str->di_flags); 293 gfs2_set_inode_flags(&ip->i_inode); 294 height = be16_to_cpu(str->di_height); 295 if (unlikely(height > GFS2_MAX_META_HEIGHT)) 296 goto corrupt; 297 ip->i_height = (u8)height; 298 299 depth = be16_to_cpu(str->di_depth); 300 if (unlikely(depth > GFS2_DIR_MAX_DEPTH)) 301 goto corrupt; 302 ip->i_depth = (u8)depth; 303 ip->i_entries = be32_to_cpu(str->di_entries); 304 305 ip->i_eattr = be64_to_cpu(str->di_eattr); 306 if (S_ISREG(ip->i_inode.i_mode)) 307 gfs2_set_aops(&ip->i_inode); 308 309 return 0; 310corrupt: 311 if (gfs2_consist_inode(ip)) 312 gfs2_dinode_print(ip); 313 return -EIO; 314} 315 316/** 317 * gfs2_inode_refresh - Refresh the incore copy of the dinode 318 * @ip: The GFS2 inode 319 * 320 * Returns: errno 321 */ 322 323int gfs2_inode_refresh(struct gfs2_inode *ip) 324{ 325 struct buffer_head *dibh; 326 int error; 327 328 error = gfs2_meta_inode_buffer(ip, &dibh); 329 if (error) 330 return error; 331 332 if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), dibh, GFS2_METATYPE_DI)) { 333 brelse(dibh); 334 return -EIO; 335 } 336 337 error = gfs2_dinode_in(ip, dibh->b_data); 338 brelse(dibh); 339 clear_bit(GIF_INVALID, &ip->i_flags); 340 341 return error; 342} 343 344int gfs2_dinode_dealloc(struct gfs2_inode *ip) 345{ 346 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 347 struct gfs2_alloc *al; 348 struct gfs2_rgrpd *rgd; 349 int error; 350 351 if (gfs2_get_inode_blocks(&ip->i_inode) != 1) { 352 if (gfs2_consist_inode(ip)) 353 gfs2_dinode_print(ip); 354 return -EIO; 355 } 356 357 al = gfs2_alloc_get(ip); 358 if (!al) 359 return -ENOMEM; 360 361 error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE); 362 if (error) 363 goto out; 364 365 error = gfs2_rindex_hold(sdp, &al->al_ri_gh); 366 if (error) 367 goto out_qs; 368 369 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr); 370 if (!rgd) { 371 gfs2_consist_inode(ip); 372 error = -EIO; 373 goto out_rindex_relse; 374 } 375 376 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, 377 &al->al_rgd_gh); 378 if (error) 379 goto out_rindex_relse; 380 381 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, 1); 382 if (error) 383 goto out_rg_gunlock; 384 385 set_bit(GLF_DIRTY, &ip->i_gl->gl_flags); 386 set_bit(GLF_LFLUSH, &ip->i_gl->gl_flags); 387 388 gfs2_free_di(rgd, ip); 389 390 gfs2_trans_end(sdp); 391 392out_rg_gunlock: 393 gfs2_glock_dq_uninit(&al->al_rgd_gh); 394out_rindex_relse: 395 gfs2_glock_dq_uninit(&al->al_ri_gh); 396out_qs: 397 gfs2_quota_unhold(ip); 398out: 399 gfs2_alloc_put(ip); 400 return error; 401} 402 403/** 404 * gfs2_change_nlink - Change nlink count on inode 405 * @ip: The GFS2 inode 406 * @diff: The change in the nlink count required 407 * 408 * Returns: errno 409 */ 410int gfs2_change_nlink(struct gfs2_inode *ip, int diff) 411{ 412 struct buffer_head *dibh; 413 u32 nlink; 414 int error; 415 416 BUG_ON(diff != 1 && diff != -1); 417 nlink = ip->i_inode.i_nlink + diff; 418 419 /* If we are reducing the nlink count, but the new value ends up being 420 bigger than the old one, we must have underflowed. */ 421 if (diff < 0 && nlink > ip->i_inode.i_nlink) { 422 if (gfs2_consist_inode(ip)) 423 gfs2_dinode_print(ip); 424 return -EIO; 425 } 426 427 error = gfs2_meta_inode_buffer(ip, &dibh); 428 if (error) 429 return error; 430 431 if (diff > 0) 432 inc_nlink(&ip->i_inode); 433 else 434 drop_nlink(&ip->i_inode); 435 436 ip->i_inode.i_ctime = CURRENT_TIME; 437 438 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 439 gfs2_dinode_out(ip, dibh->b_data); 440 brelse(dibh); 441 mark_inode_dirty(&ip->i_inode); 442 443 if (ip->i_inode.i_nlink == 0) 444 gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */ 445 446 return error; 447} 448 449struct inode *gfs2_lookup_simple(struct inode *dip, const char *name) 450{ 451 struct qstr qstr; 452 struct inode *inode; 453 gfs2_str2qstr(&qstr, name); 454 inode = gfs2_lookupi(dip, &qstr, 1); 455 /* gfs2_lookupi has inconsistent callers: vfs 456 * related routines expect NULL for no entry found, 457 * gfs2_lookup_simple callers expect ENOENT 458 * and do not check for NULL. 459 */ 460 if (inode == NULL) 461 return ERR_PTR(-ENOENT); 462 else 463 return inode; 464} 465 466 467/** 468 * gfs2_lookupi - Look up a filename in a directory and return its inode 469 * @d_gh: An initialized holder for the directory glock 470 * @name: The name of the inode to look for 471 * @is_root: If 1, ignore the caller's permissions 472 * @i_gh: An uninitialized holder for the new inode glock 473 * 474 * This can be called via the VFS filldir function when NFS is doing 475 * a readdirplus and the inode which its intending to stat isn't 476 * already in cache. In this case we must not take the directory glock 477 * again, since the readdir call will have already taken that lock. 478 * 479 * Returns: errno 480 */ 481 482struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name, 483 int is_root) 484{ 485 struct super_block *sb = dir->i_sb; 486 struct gfs2_inode *dip = GFS2_I(dir); 487 struct gfs2_holder d_gh; 488 int error = 0; 489 struct inode *inode = NULL; 490 int unlock = 0; 491 492 if (!name->len || name->len > GFS2_FNAMESIZE) 493 return ERR_PTR(-ENAMETOOLONG); 494 495 if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) || 496 (name->len == 2 && memcmp(name->name, "..", 2) == 0 && 497 dir == sb->s_root->d_inode)) { 498 igrab(dir); 499 return dir; 500 } 501 502 if (gfs2_glock_is_locked_by_me(dip->i_gl) == NULL) { 503 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh); 504 if (error) 505 return ERR_PTR(error); 506 unlock = 1; 507 } 508 509 if (!is_root) { 510 error = gfs2_permission(dir, MAY_EXEC, 0); 511 if (error) 512 goto out; 513 } 514 515 inode = gfs2_dir_search(dir, name); 516 if (IS_ERR(inode)) 517 error = PTR_ERR(inode); 518out: 519 if (unlock) 520 gfs2_glock_dq_uninit(&d_gh); 521 if (error == -ENOENT) 522 return NULL; 523 return inode ? inode : ERR_PTR(error); 524} 525 526/** 527 * create_ok - OK to create a new on-disk inode here? 528 * @dip: Directory in which dinode is to be created 529 * @name: Name of new dinode 530 * @mode: 531 * 532 * Returns: errno 533 */ 534 535static int create_ok(struct gfs2_inode *dip, const struct qstr *name, 536 unsigned int mode) 537{ 538 int error; 539 540 error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0); 541 if (error) 542 return error; 543 544 /* Don't create entries in an unlinked directory */ 545 if (!dip->i_inode.i_nlink) 546 return -EPERM; 547 548 error = gfs2_dir_check(&dip->i_inode, name, NULL); 549 switch (error) { 550 case -ENOENT: 551 error = 0; 552 break; 553 case 0: 554 return -EEXIST; 555 default: 556 return error; 557 } 558 559 if (dip->i_entries == (u32)-1) 560 return -EFBIG; 561 if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1) 562 return -EMLINK; 563 564 return 0; 565} 566 567static void munge_mode_uid_gid(struct gfs2_inode *dip, unsigned int *mode, 568 unsigned int *uid, unsigned int *gid) 569{ 570 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir && 571 (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) { 572 if (S_ISDIR(*mode)) 573 *mode |= S_ISUID; 574 else if (dip->i_inode.i_uid != current_fsuid()) 575 *mode &= ~07111; 576 *uid = dip->i_inode.i_uid; 577 } else 578 *uid = current_fsuid(); 579 580 if (dip->i_inode.i_mode & S_ISGID) { 581 if (S_ISDIR(*mode)) 582 *mode |= S_ISGID; 583 *gid = dip->i_inode.i_gid; 584 } else 585 *gid = current_fsgid(); 586} 587 588static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation) 589{ 590 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 591 int error; 592 593 if (gfs2_alloc_get(dip) == NULL) 594 return -ENOMEM; 595 596 dip->i_alloc->al_requested = RES_DINODE; 597 error = gfs2_inplace_reserve(dip); 598 if (error) 599 goto out; 600 601 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS, 0); 602 if (error) 603 goto out_ipreserv; 604 605 error = gfs2_alloc_di(dip, no_addr, generation); 606 607 gfs2_trans_end(sdp); 608 609out_ipreserv: 610 gfs2_inplace_release(dip); 611out: 612 gfs2_alloc_put(dip); 613 return error; 614} 615 616/** 617 * init_dinode - Fill in a new dinode structure 618 * @dip: the directory this inode is being created in 619 * @gl: The glock covering the new inode 620 * @inum: the inode number 621 * @mode: the file permissions 622 * @uid: 623 * @gid: 624 * 625 */ 626 627static void init_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, 628 const struct gfs2_inum_host *inum, unsigned int mode, 629 unsigned int uid, unsigned int gid, 630 const u64 *generation, dev_t dev, struct buffer_head **bhp) 631{ 632 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 633 struct gfs2_dinode *di; 634 struct buffer_head *dibh; 635 struct timespec tv = CURRENT_TIME; 636 637 dibh = gfs2_meta_new(gl, inum->no_addr); 638 gfs2_trans_add_bh(gl, dibh, 1); 639 gfs2_metatype_set(dibh, GFS2_METATYPE_DI, GFS2_FORMAT_DI); 640 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode)); 641 di = (struct gfs2_dinode *)dibh->b_data; 642 643 di->di_num.no_formal_ino = cpu_to_be64(inum->no_formal_ino); 644 di->di_num.no_addr = cpu_to_be64(inum->no_addr); 645 di->di_mode = cpu_to_be32(mode); 646 di->di_uid = cpu_to_be32(uid); 647 di->di_gid = cpu_to_be32(gid); 648 di->di_nlink = 0; 649 di->di_size = 0; 650 di->di_blocks = cpu_to_be64(1); 651 di->di_atime = di->di_mtime = di->di_ctime = cpu_to_be64(tv.tv_sec); 652 di->di_major = cpu_to_be32(MAJOR(dev)); 653 di->di_minor = cpu_to_be32(MINOR(dev)); 654 di->di_goal_meta = di->di_goal_data = cpu_to_be64(inum->no_addr); 655 di->di_generation = cpu_to_be64(*generation); 656 di->di_flags = 0; 657 658 if (S_ISREG(mode)) { 659 if ((dip->i_diskflags & GFS2_DIF_INHERIT_JDATA) || 660 gfs2_tune_get(sdp, gt_new_files_jdata)) 661 di->di_flags |= cpu_to_be32(GFS2_DIF_JDATA); 662 } else if (S_ISDIR(mode)) { 663 di->di_flags |= cpu_to_be32(dip->i_diskflags & 664 GFS2_DIF_INHERIT_JDATA); 665 } 666 667 di->__pad1 = 0; 668 di->di_payload_format = cpu_to_be32(S_ISDIR(mode) ? GFS2_FORMAT_DE : 0); 669 di->di_height = 0; 670 di->__pad2 = 0; 671 di->__pad3 = 0; 672 di->di_depth = 0; 673 di->di_entries = 0; 674 memset(&di->__pad4, 0, sizeof(di->__pad4)); 675 di->di_eattr = 0; 676 di->di_atime_nsec = cpu_to_be32(tv.tv_nsec); 677 di->di_mtime_nsec = cpu_to_be32(tv.tv_nsec); 678 di->di_ctime_nsec = cpu_to_be32(tv.tv_nsec); 679 memset(&di->di_reserved, 0, sizeof(di->di_reserved)); 680 681 set_buffer_uptodate(dibh); 682 683 *bhp = dibh; 684} 685 686static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl, 687 unsigned int mode, const struct gfs2_inum_host *inum, 688 const u64 *generation, dev_t dev, struct buffer_head **bhp) 689{ 690 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 691 unsigned int uid, gid; 692 int error; 693 694 munge_mode_uid_gid(dip, &mode, &uid, &gid); 695 if (!gfs2_alloc_get(dip)) 696 return -ENOMEM; 697 698 error = gfs2_quota_lock(dip, uid, gid); 699 if (error) 700 goto out; 701 702 error = gfs2_quota_check(dip, uid, gid); 703 if (error) 704 goto out_quota; 705 706 error = gfs2_trans_begin(sdp, RES_DINODE + RES_QUOTA, 0); 707 if (error) 708 goto out_quota; 709 710 init_dinode(dip, gl, inum, mode, uid, gid, generation, dev, bhp); 711 gfs2_quota_change(dip, +1, uid, gid); 712 gfs2_trans_end(sdp); 713 714out_quota: 715 gfs2_quota_unlock(dip); 716out: 717 gfs2_alloc_put(dip); 718 return error; 719} 720 721static int link_dinode(struct gfs2_inode *dip, const struct qstr *name, 722 struct gfs2_inode *ip) 723{ 724 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 725 struct gfs2_alloc *al; 726 int alloc_required; 727 struct buffer_head *dibh; 728 int error; 729 730 al = gfs2_alloc_get(dip); 731 if (!al) 732 return -ENOMEM; 733 734 error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE); 735 if (error) 736 goto fail; 737 738 error = alloc_required = gfs2_diradd_alloc_required(&dip->i_inode, name); 739 if (alloc_required < 0) 740 goto fail_quota_locks; 741 if (alloc_required) { 742 error = gfs2_quota_check(dip, dip->i_inode.i_uid, dip->i_inode.i_gid); 743 if (error) 744 goto fail_quota_locks; 745 746 al->al_requested = sdp->sd_max_dirres; 747 748 error = gfs2_inplace_reserve(dip); 749 if (error) 750 goto fail_quota_locks; 751 752 error = gfs2_trans_begin(sdp, sdp->sd_max_dirres + 753 al->al_rgd->rd_length + 754 2 * RES_DINODE + 755 RES_STATFS + RES_QUOTA, 0); 756 if (error) 757 goto fail_ipreserv; 758 } else { 759 error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0); 760 if (error) 761 goto fail_quota_locks; 762 } 763 764 error = gfs2_dir_add(&dip->i_inode, name, ip, IF2DT(ip->i_inode.i_mode)); 765 if (error) 766 goto fail_end_trans; 767 768 error = gfs2_meta_inode_buffer(ip, &dibh); 769 if (error) 770 goto fail_end_trans; 771 ip->i_inode.i_nlink = 1; 772 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 773 gfs2_dinode_out(ip, dibh->b_data); 774 brelse(dibh); 775 return 0; 776 777fail_end_trans: 778 gfs2_trans_end(sdp); 779 780fail_ipreserv: 781 if (dip->i_alloc->al_rgd) 782 gfs2_inplace_release(dip); 783 784fail_quota_locks: 785 gfs2_quota_unlock(dip); 786 787fail: 788 gfs2_alloc_put(dip); 789 return error; 790} 791 792static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip, 793 const struct qstr *qstr) 794{ 795 int err; 796 size_t len; 797 void *value; 798 char *name; 799 800 err = security_inode_init_security(&ip->i_inode, &dip->i_inode, qstr, 801 &name, &value, &len); 802 803 if (err) { 804 if (err == -EOPNOTSUPP) 805 return 0; 806 return err; 807 } 808 809 err = __gfs2_xattr_set(&ip->i_inode, name, value, len, 0, 810 GFS2_EATYPE_SECURITY); 811 kfree(value); 812 kfree(name); 813 814 return err; 815} 816 817/** 818 * gfs2_createi - Create a new inode 819 * @ghs: An array of two holders 820 * @name: The name of the new file 821 * @mode: the permissions on the new inode 822 * 823 * @ghs[0] is an initialized holder for the directory 824 * @ghs[1] is the holder for the inode lock 825 * 826 * If the return value is not NULL, the glocks on both the directory and the new 827 * file are held. A transaction has been started and an inplace reservation 828 * is held, as well. 829 * 830 * Returns: An inode 831 */ 832 833struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name, 834 unsigned int mode, dev_t dev) 835{ 836 struct inode *inode = NULL; 837 struct gfs2_inode *dip = ghs->gh_gl->gl_object; 838 struct inode *dir = &dip->i_inode; 839 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); 840 struct gfs2_inum_host inum = { .no_addr = 0, .no_formal_ino = 0 }; 841 int error; 842 u64 generation; 843 struct buffer_head *bh = NULL; 844 845 if (!name->len || name->len > GFS2_FNAMESIZE) 846 return ERR_PTR(-ENAMETOOLONG); 847 848 gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, ghs); 849 error = gfs2_glock_nq(ghs); 850 if (error) 851 goto fail; 852 853 error = create_ok(dip, name, mode); 854 if (error) 855 goto fail_gunlock; 856 857 error = alloc_dinode(dip, &inum.no_addr, &generation); 858 if (error) 859 goto fail_gunlock; 860 inum.no_formal_ino = generation; 861 862 error = gfs2_glock_nq_num(sdp, inum.no_addr, &gfs2_inode_glops, 863 LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1); 864 if (error) 865 goto fail_gunlock; 866 867 error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev, &bh); 868 if (error) 869 goto fail_gunlock2; 870 871 inode = gfs2_inode_lookup(dir->i_sb, IF2DT(mode), inum.no_addr, 872 inum.no_formal_ino, 0); 873 if (IS_ERR(inode)) 874 goto fail_gunlock2; 875 876 error = gfs2_inode_refresh(GFS2_I(inode)); 877 if (error) 878 goto fail_gunlock2; 879 880 error = gfs2_acl_create(dip, inode); 881 if (error) 882 goto fail_gunlock2; 883 884 error = gfs2_security_init(dip, GFS2_I(inode), name); 885 if (error) 886 goto fail_gunlock2; 887 888 error = link_dinode(dip, name, GFS2_I(inode)); 889 if (error) 890 goto fail_gunlock2; 891 892 if (bh) 893 brelse(bh); 894 return inode; 895 896fail_gunlock2: 897 gfs2_glock_dq_uninit(ghs + 1); 898 if (inode && !IS_ERR(inode)) 899 iput(inode); 900fail_gunlock: 901 gfs2_glock_dq(ghs); 902fail: 903 if (bh) 904 brelse(bh); 905 return ERR_PTR(error); 906} 907 908static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr) 909{ 910 struct inode *inode = &ip->i_inode; 911 struct buffer_head *dibh; 912 int error; 913 914 error = gfs2_meta_inode_buffer(ip, &dibh); 915 if (error) 916 return error; 917 918 setattr_copy(inode, attr); 919 mark_inode_dirty(inode); 920 gfs2_trans_add_bh(ip->i_gl, dibh, 1); 921 gfs2_dinode_out(ip, dibh->b_data); 922 brelse(dibh); 923 return 0; 924} 925 926/** 927 * gfs2_setattr_simple - 928 * @ip: 929 * @attr: 930 * 931 * Called with a reference on the vnode. 932 * 933 * Returns: errno 934 */ 935 936int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr) 937{ 938 int error; 939 940 if (current->journal_info) 941 return __gfs2_setattr_simple(ip, attr); 942 943 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE, 0); 944 if (error) 945 return error; 946 947 error = __gfs2_setattr_simple(ip, attr); 948 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 949 return error; 950} 951 952void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf) 953{ 954 struct gfs2_dinode *str = buf; 955 956 str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC); 957 str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI); 958 str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI); 959 str->di_num.no_addr = cpu_to_be64(ip->i_no_addr); 960 str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino); 961 str->di_mode = cpu_to_be32(ip->i_inode.i_mode); 962 str->di_uid = cpu_to_be32(ip->i_inode.i_uid); 963 str->di_gid = cpu_to_be32(ip->i_inode.i_gid); 964 str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink); 965 str->di_size = cpu_to_be64(i_size_read(&ip->i_inode)); 966 str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode)); 967 str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec); 968 str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec); 969 str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec); 970 971 str->di_goal_meta = cpu_to_be64(ip->i_goal); 972 str->di_goal_data = cpu_to_be64(ip->i_goal); 973 str->di_generation = cpu_to_be64(ip->i_generation); 974 975 str->di_flags = cpu_to_be32(ip->i_diskflags); 976 str->di_height = cpu_to_be16(ip->i_height); 977 str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) && 978 !(ip->i_diskflags & GFS2_DIF_EXHASH) ? 979 GFS2_FORMAT_DE : 0); 980 str->di_depth = cpu_to_be16(ip->i_depth); 981 str->di_entries = cpu_to_be32(ip->i_entries); 982 983 str->di_eattr = cpu_to_be64(ip->i_eattr); 984 str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec); 985 str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec); 986 str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec); 987} 988 989void gfs2_dinode_print(const struct gfs2_inode *ip) 990{ 991 printk(KERN_INFO " no_formal_ino = %llu\n", 992 (unsigned long long)ip->i_no_formal_ino); 993 printk(KERN_INFO " no_addr = %llu\n", 994 (unsigned long long)ip->i_no_addr); 995 printk(KERN_INFO " i_size = %llu\n", 996 (unsigned long long)i_size_read(&ip->i_inode)); 997 printk(KERN_INFO " blocks = %llu\n", 998 (unsigned long long)gfs2_get_inode_blocks(&ip->i_inode)); 999 printk(KERN_INFO " i_goal = %llu\n", 1000 (unsigned long long)ip->i_goal); 1001 printk(KERN_INFO " i_diskflags = 0x%.8X\n", ip->i_diskflags); 1002 printk(KERN_INFO " i_height = %u\n", ip->i_height); 1003 printk(KERN_INFO " i_depth = %u\n", ip->i_depth); 1004 printk(KERN_INFO " i_entries = %u\n", ip->i_entries); 1005 printk(KERN_INFO " i_eattr = %llu\n", 1006 (unsigned long long)ip->i_eattr); 1007} 1008