/fs/gfs2/ops_fstype.c
C | 1408 lines | 1075 code | 202 blank | 131 comment | 164 complexity | c561b0b5efd93b3f2a5d51b0c8e40e34 MD5 | raw file
Possible License(s): LGPL-2.0, AGPL-1.0, GPL-2.0
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/blkdev.h> 16#include <linux/kthread.h> 17#include <linux/namei.h> 18#include <linux/mount.h> 19#include <linux/gfs2_ondisk.h> 20#include <linux/quotaops.h> 21 22#include "gfs2.h" 23#include "incore.h" 24#include "bmap.h" 25#include "glock.h" 26#include "glops.h" 27#include "inode.h" 28#include "recovery.h" 29#include "rgrp.h" 30#include "super.h" 31#include "sys.h" 32#include "util.h" 33#include "log.h" 34#include "quota.h" 35#include "dir.h" 36#include "trace_gfs2.h" 37 38#define DO 0 39#define UNDO 1 40 41/** 42 * gfs2_tune_init - Fill a gfs2_tune structure with default values 43 * @gt: tune 44 * 45 */ 46 47static void gfs2_tune_init(struct gfs2_tune *gt) 48{ 49 spin_lock_init(>->gt_spin); 50 51 gt->gt_quota_simul_sync = 64; 52 gt->gt_quota_warn_period = 10; 53 gt->gt_quota_scale_num = 1; 54 gt->gt_quota_scale_den = 1; 55 gt->gt_new_files_jdata = 0; 56 gt->gt_max_readahead = 1 << 18; 57 gt->gt_complain_secs = 10; 58} 59 60static struct gfs2_sbd *init_sbd(struct super_block *sb) 61{ 62 struct gfs2_sbd *sdp; 63 64 sdp = kzalloc(sizeof(struct gfs2_sbd), GFP_KERNEL); 65 if (!sdp) 66 return NULL; 67 68 sb->s_fs_info = sdp; 69 sdp->sd_vfs = sb; 70 set_bit(SDF_NOJOURNALID, &sdp->sd_flags); 71 gfs2_tune_init(&sdp->sd_tune); 72 73 init_waitqueue_head(&sdp->sd_glock_wait); 74 atomic_set(&sdp->sd_glock_disposal, 0); 75 init_completion(&sdp->sd_locking_init); 76 spin_lock_init(&sdp->sd_statfs_spin); 77 78 spin_lock_init(&sdp->sd_rindex_spin); 79 mutex_init(&sdp->sd_rindex_mutex); 80 INIT_LIST_HEAD(&sdp->sd_rindex_list); 81 INIT_LIST_HEAD(&sdp->sd_rindex_mru_list); 82 83 INIT_LIST_HEAD(&sdp->sd_jindex_list); 84 spin_lock_init(&sdp->sd_jindex_spin); 85 mutex_init(&sdp->sd_jindex_mutex); 86 87 INIT_LIST_HEAD(&sdp->sd_quota_list); 88 mutex_init(&sdp->sd_quota_mutex); 89 init_waitqueue_head(&sdp->sd_quota_wait); 90 INIT_LIST_HEAD(&sdp->sd_trunc_list); 91 spin_lock_init(&sdp->sd_trunc_lock); 92 93 spin_lock_init(&sdp->sd_log_lock); 94 atomic_set(&sdp->sd_log_pinned, 0); 95 INIT_LIST_HEAD(&sdp->sd_log_le_buf); 96 INIT_LIST_HEAD(&sdp->sd_log_le_revoke); 97 INIT_LIST_HEAD(&sdp->sd_log_le_rg); 98 INIT_LIST_HEAD(&sdp->sd_log_le_databuf); 99 INIT_LIST_HEAD(&sdp->sd_log_le_ordered); 100 101 init_waitqueue_head(&sdp->sd_log_waitq); 102 init_waitqueue_head(&sdp->sd_logd_waitq); 103 spin_lock_init(&sdp->sd_ail_lock); 104 INIT_LIST_HEAD(&sdp->sd_ail1_list); 105 INIT_LIST_HEAD(&sdp->sd_ail2_list); 106 107 init_rwsem(&sdp->sd_log_flush_lock); 108 atomic_set(&sdp->sd_log_in_flight, 0); 109 init_waitqueue_head(&sdp->sd_log_flush_wait); 110 111 INIT_LIST_HEAD(&sdp->sd_revoke_list); 112 113 mutex_init(&sdp->sd_freeze_lock); 114 115 return sdp; 116} 117 118 119/** 120 * gfs2_check_sb - Check superblock 121 * @sdp: the filesystem 122 * @sb: The superblock 123 * @silent: Don't print a message if the check fails 124 * 125 * Checks the version code of the FS is one that we understand how to 126 * read and that the sizes of the various on-disk structures have not 127 * changed. 128 */ 129 130static int gfs2_check_sb(struct gfs2_sbd *sdp, int silent) 131{ 132 struct gfs2_sb_host *sb = &sdp->sd_sb; 133 134 if (sb->sb_magic != GFS2_MAGIC || 135 sb->sb_type != GFS2_METATYPE_SB) { 136 if (!silent) 137 printk(KERN_WARNING "GFS2: not a GFS2 filesystem\n"); 138 return -EINVAL; 139 } 140 141 /* If format numbers match exactly, we're done. */ 142 143 if (sb->sb_fs_format == GFS2_FORMAT_FS && 144 sb->sb_multihost_format == GFS2_FORMAT_MULTI) 145 return 0; 146 147 fs_warn(sdp, "Unknown on-disk format, unable to mount\n"); 148 149 return -EINVAL; 150} 151 152static void end_bio_io_page(struct bio *bio, int error) 153{ 154 struct page *page = bio->bi_private; 155 156 if (!error) 157 SetPageUptodate(page); 158 else 159 printk(KERN_WARNING "gfs2: error %d reading superblock\n", error); 160 unlock_page(page); 161} 162 163static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf) 164{ 165 struct gfs2_sb_host *sb = &sdp->sd_sb; 166 struct super_block *s = sdp->sd_vfs; 167 const struct gfs2_sb *str = buf; 168 169 sb->sb_magic = be32_to_cpu(str->sb_header.mh_magic); 170 sb->sb_type = be32_to_cpu(str->sb_header.mh_type); 171 sb->sb_format = be32_to_cpu(str->sb_header.mh_format); 172 sb->sb_fs_format = be32_to_cpu(str->sb_fs_format); 173 sb->sb_multihost_format = be32_to_cpu(str->sb_multihost_format); 174 sb->sb_bsize = be32_to_cpu(str->sb_bsize); 175 sb->sb_bsize_shift = be32_to_cpu(str->sb_bsize_shift); 176 sb->sb_master_dir.no_addr = be64_to_cpu(str->sb_master_dir.no_addr); 177 sb->sb_master_dir.no_formal_ino = be64_to_cpu(str->sb_master_dir.no_formal_ino); 178 sb->sb_root_dir.no_addr = be64_to_cpu(str->sb_root_dir.no_addr); 179 sb->sb_root_dir.no_formal_ino = be64_to_cpu(str->sb_root_dir.no_formal_ino); 180 181 memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN); 182 memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN); 183 memcpy(s->s_uuid, str->sb_uuid, 16); 184} 185 186/** 187 * gfs2_read_super - Read the gfs2 super block from disk 188 * @sdp: The GFS2 super block 189 * @sector: The location of the super block 190 * @error: The error code to return 191 * 192 * This uses the bio functions to read the super block from disk 193 * because we want to be 100% sure that we never read cached data. 194 * A super block is read twice only during each GFS2 mount and is 195 * never written to by the filesystem. The first time its read no 196 * locks are held, and the only details which are looked at are those 197 * relating to the locking protocol. Once locking is up and working, 198 * the sb is read again under the lock to establish the location of 199 * the master directory (contains pointers to journals etc) and the 200 * root directory. 201 * 202 * Returns: 0 on success or error 203 */ 204 205static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector, int silent) 206{ 207 struct super_block *sb = sdp->sd_vfs; 208 struct gfs2_sb *p; 209 struct page *page; 210 struct bio *bio; 211 212 page = alloc_page(GFP_NOFS); 213 if (unlikely(!page)) 214 return -ENOBUFS; 215 216 ClearPageUptodate(page); 217 ClearPageDirty(page); 218 lock_page(page); 219 220 bio = bio_alloc(GFP_NOFS, 1); 221 bio->bi_sector = sector * (sb->s_blocksize >> 9); 222 bio->bi_bdev = sb->s_bdev; 223 bio_add_page(bio, page, PAGE_SIZE, 0); 224 225 bio->bi_end_io = end_bio_io_page; 226 bio->bi_private = page; 227 submit_bio(READ_SYNC | REQ_META | REQ_PRIO, bio); 228 wait_on_page_locked(page); 229 bio_put(bio); 230 if (!PageUptodate(page)) { 231 __free_page(page); 232 return -EIO; 233 } 234 p = kmap(page); 235 gfs2_sb_in(sdp, p); 236 kunmap(page); 237 __free_page(page); 238 return gfs2_check_sb(sdp, silent); 239} 240 241/** 242 * gfs2_read_sb - Read super block 243 * @sdp: The GFS2 superblock 244 * @silent: Don't print message if mount fails 245 * 246 */ 247 248static int gfs2_read_sb(struct gfs2_sbd *sdp, int silent) 249{ 250 u32 hash_blocks, ind_blocks, leaf_blocks; 251 u32 tmp_blocks; 252 unsigned int x; 253 int error; 254 255 error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent); 256 if (error) { 257 if (!silent) 258 fs_err(sdp, "can't read superblock\n"); 259 return error; 260 } 261 262 sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift - 263 GFS2_BASIC_BLOCK_SHIFT; 264 sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift; 265 sdp->sd_diptrs = (sdp->sd_sb.sb_bsize - 266 sizeof(struct gfs2_dinode)) / sizeof(u64); 267 sdp->sd_inptrs = (sdp->sd_sb.sb_bsize - 268 sizeof(struct gfs2_meta_header)) / sizeof(u64); 269 sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header); 270 sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2; 271 sdp->sd_hash_bsize_shift = sdp->sd_sb.sb_bsize_shift - 1; 272 sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(u64); 273 sdp->sd_qc_per_block = (sdp->sd_sb.sb_bsize - 274 sizeof(struct gfs2_meta_header)) / 275 sizeof(struct gfs2_quota_change); 276 277 /* Compute maximum reservation required to add a entry to a directory */ 278 279 hash_blocks = DIV_ROUND_UP(sizeof(u64) * (1 << GFS2_DIR_MAX_DEPTH), 280 sdp->sd_jbsize); 281 282 ind_blocks = 0; 283 for (tmp_blocks = hash_blocks; tmp_blocks > sdp->sd_diptrs;) { 284 tmp_blocks = DIV_ROUND_UP(tmp_blocks, sdp->sd_inptrs); 285 ind_blocks += tmp_blocks; 286 } 287 288 leaf_blocks = 2 + GFS2_DIR_MAX_DEPTH; 289 290 sdp->sd_max_dirres = hash_blocks + ind_blocks + leaf_blocks; 291 292 sdp->sd_heightsize[0] = sdp->sd_sb.sb_bsize - 293 sizeof(struct gfs2_dinode); 294 sdp->sd_heightsize[1] = sdp->sd_sb.sb_bsize * sdp->sd_diptrs; 295 for (x = 2;; x++) { 296 u64 space, d; 297 u32 m; 298 299 space = sdp->sd_heightsize[x - 1] * sdp->sd_inptrs; 300 d = space; 301 m = do_div(d, sdp->sd_inptrs); 302 303 if (d != sdp->sd_heightsize[x - 1] || m) 304 break; 305 sdp->sd_heightsize[x] = space; 306 } 307 sdp->sd_max_height = x; 308 sdp->sd_heightsize[x] = ~0; 309 gfs2_assert(sdp, sdp->sd_max_height <= GFS2_MAX_META_HEIGHT); 310 311 sdp->sd_jheightsize[0] = sdp->sd_sb.sb_bsize - 312 sizeof(struct gfs2_dinode); 313 sdp->sd_jheightsize[1] = sdp->sd_jbsize * sdp->sd_diptrs; 314 for (x = 2;; x++) { 315 u64 space, d; 316 u32 m; 317 318 space = sdp->sd_jheightsize[x - 1] * sdp->sd_inptrs; 319 d = space; 320 m = do_div(d, sdp->sd_inptrs); 321 322 if (d != sdp->sd_jheightsize[x - 1] || m) 323 break; 324 sdp->sd_jheightsize[x] = space; 325 } 326 sdp->sd_max_jheight = x; 327 sdp->sd_jheightsize[x] = ~0; 328 gfs2_assert(sdp, sdp->sd_max_jheight <= GFS2_MAX_META_HEIGHT); 329 330 return 0; 331} 332 333static int init_names(struct gfs2_sbd *sdp, int silent) 334{ 335 char *proto, *table; 336 int error = 0; 337 338 proto = sdp->sd_args.ar_lockproto; 339 table = sdp->sd_args.ar_locktable; 340 341 /* Try to autodetect */ 342 343 if (!proto[0] || !table[0]) { 344 error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent); 345 if (error) 346 return error; 347 348 if (!proto[0]) 349 proto = sdp->sd_sb.sb_lockproto; 350 if (!table[0]) 351 table = sdp->sd_sb.sb_locktable; 352 } 353 354 if (!table[0]) 355 table = sdp->sd_vfs->s_id; 356 357 strlcpy(sdp->sd_proto_name, proto, GFS2_FSNAME_LEN); 358 strlcpy(sdp->sd_table_name, table, GFS2_FSNAME_LEN); 359 360 table = sdp->sd_table_name; 361 while ((table = strchr(table, '/'))) 362 *table = '_'; 363 364 return error; 365} 366 367static int init_locking(struct gfs2_sbd *sdp, struct gfs2_holder *mount_gh, 368 int undo) 369{ 370 int error = 0; 371 372 if (undo) 373 goto fail_trans; 374 375 error = gfs2_glock_nq_num(sdp, 376 GFS2_MOUNT_LOCK, &gfs2_nondisk_glops, 377 LM_ST_EXCLUSIVE, LM_FLAG_NOEXP | GL_NOCACHE, 378 mount_gh); 379 if (error) { 380 fs_err(sdp, "can't acquire mount glock: %d\n", error); 381 goto fail; 382 } 383 384 error = gfs2_glock_nq_num(sdp, 385 GFS2_LIVE_LOCK, &gfs2_nondisk_glops, 386 LM_ST_SHARED, 387 LM_FLAG_NOEXP | GL_EXACT, 388 &sdp->sd_live_gh); 389 if (error) { 390 fs_err(sdp, "can't acquire live glock: %d\n", error); 391 goto fail_mount; 392 } 393 394 error = gfs2_glock_get(sdp, GFS2_RENAME_LOCK, &gfs2_nondisk_glops, 395 CREATE, &sdp->sd_rename_gl); 396 if (error) { 397 fs_err(sdp, "can't create rename glock: %d\n", error); 398 goto fail_live; 399 } 400 401 error = gfs2_glock_get(sdp, GFS2_TRANS_LOCK, &gfs2_trans_glops, 402 CREATE, &sdp->sd_trans_gl); 403 if (error) { 404 fs_err(sdp, "can't create transaction glock: %d\n", error); 405 goto fail_rename; 406 } 407 408 return 0; 409 410fail_trans: 411 gfs2_glock_put(sdp->sd_trans_gl); 412fail_rename: 413 gfs2_glock_put(sdp->sd_rename_gl); 414fail_live: 415 gfs2_glock_dq_uninit(&sdp->sd_live_gh); 416fail_mount: 417 gfs2_glock_dq_uninit(mount_gh); 418fail: 419 return error; 420} 421 422static int gfs2_lookup_root(struct super_block *sb, struct dentry **dptr, 423 u64 no_addr, const char *name) 424{ 425 struct gfs2_sbd *sdp = sb->s_fs_info; 426 struct dentry *dentry; 427 struct inode *inode; 428 429 inode = gfs2_inode_lookup(sb, DT_DIR, no_addr, 0, 0); 430 if (IS_ERR(inode)) { 431 fs_err(sdp, "can't read in %s inode: %ld\n", name, PTR_ERR(inode)); 432 return PTR_ERR(inode); 433 } 434 dentry = d_alloc_root(inode); 435 if (!dentry) { 436 fs_err(sdp, "can't alloc %s dentry\n", name); 437 iput(inode); 438 return -ENOMEM; 439 } 440 *dptr = dentry; 441 return 0; 442} 443 444static int init_sb(struct gfs2_sbd *sdp, int silent) 445{ 446 struct super_block *sb = sdp->sd_vfs; 447 struct gfs2_holder sb_gh; 448 u64 no_addr; 449 int ret; 450 451 ret = gfs2_glock_nq_num(sdp, GFS2_SB_LOCK, &gfs2_meta_glops, 452 LM_ST_SHARED, 0, &sb_gh); 453 if (ret) { 454 fs_err(sdp, "can't acquire superblock glock: %d\n", ret); 455 return ret; 456 } 457 458 ret = gfs2_read_sb(sdp, silent); 459 if (ret) { 460 fs_err(sdp, "can't read superblock: %d\n", ret); 461 goto out; 462 } 463 464 /* Set up the buffer cache and SB for real */ 465 if (sdp->sd_sb.sb_bsize < bdev_logical_block_size(sb->s_bdev)) { 466 ret = -EINVAL; 467 fs_err(sdp, "FS block size (%u) is too small for device " 468 "block size (%u)\n", 469 sdp->sd_sb.sb_bsize, bdev_logical_block_size(sb->s_bdev)); 470 goto out; 471 } 472 if (sdp->sd_sb.sb_bsize > PAGE_SIZE) { 473 ret = -EINVAL; 474 fs_err(sdp, "FS block size (%u) is too big for machine " 475 "page size (%u)\n", 476 sdp->sd_sb.sb_bsize, (unsigned int)PAGE_SIZE); 477 goto out; 478 } 479 sb_set_blocksize(sb, sdp->sd_sb.sb_bsize); 480 481 /* Get the root inode */ 482 no_addr = sdp->sd_sb.sb_root_dir.no_addr; 483 ret = gfs2_lookup_root(sb, &sdp->sd_root_dir, no_addr, "root"); 484 if (ret) 485 goto out; 486 487 /* Get the master inode */ 488 no_addr = sdp->sd_sb.sb_master_dir.no_addr; 489 ret = gfs2_lookup_root(sb, &sdp->sd_master_dir, no_addr, "master"); 490 if (ret) { 491 dput(sdp->sd_root_dir); 492 goto out; 493 } 494 sb->s_root = dget(sdp->sd_args.ar_meta ? sdp->sd_master_dir : sdp->sd_root_dir); 495out: 496 gfs2_glock_dq_uninit(&sb_gh); 497 return ret; 498} 499 500/** 501 * map_journal_extents - create a reusable "extent" mapping from all logical 502 * blocks to all physical blocks for the given journal. This will save 503 * us time when writing journal blocks. Most journals will have only one 504 * extent that maps all their logical blocks. That's because gfs2.mkfs 505 * arranges the journal blocks sequentially to maximize performance. 506 * So the extent would map the first block for the entire file length. 507 * However, gfs2_jadd can happen while file activity is happening, so 508 * those journals may not be sequential. Less likely is the case where 509 * the users created their own journals by mounting the metafs and 510 * laying it out. But it's still possible. These journals might have 511 * several extents. 512 * 513 * TODO: This should be done in bigger chunks rather than one block at a time, 514 * but since it's only done at mount time, I'm not worried about the 515 * time it takes. 516 */ 517static int map_journal_extents(struct gfs2_sbd *sdp) 518{ 519 struct gfs2_jdesc *jd = sdp->sd_jdesc; 520 unsigned int lb; 521 u64 db, prev_db; /* logical block, disk block, prev disk block */ 522 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); 523 struct gfs2_journal_extent *jext = NULL; 524 struct buffer_head bh; 525 int rc = 0; 526 527 prev_db = 0; 528 529 for (lb = 0; lb < i_size_read(jd->jd_inode) >> sdp->sd_sb.sb_bsize_shift; lb++) { 530 bh.b_state = 0; 531 bh.b_blocknr = 0; 532 bh.b_size = 1 << ip->i_inode.i_blkbits; 533 rc = gfs2_block_map(jd->jd_inode, lb, &bh, 0); 534 db = bh.b_blocknr; 535 if (rc || !db) { 536 printk(KERN_INFO "GFS2 journal mapping error %d: lb=" 537 "%u db=%llu\n", rc, lb, (unsigned long long)db); 538 break; 539 } 540 if (!prev_db || db != prev_db + 1) { 541 jext = kzalloc(sizeof(struct gfs2_journal_extent), 542 GFP_KERNEL); 543 if (!jext) { 544 printk(KERN_INFO "GFS2 error: out of memory " 545 "mapping journal extents.\n"); 546 rc = -ENOMEM; 547 break; 548 } 549 jext->dblock = db; 550 jext->lblock = lb; 551 jext->blocks = 1; 552 list_add_tail(&jext->extent_list, &jd->extent_list); 553 } else { 554 jext->blocks++; 555 } 556 prev_db = db; 557 } 558 return rc; 559} 560 561static void gfs2_others_may_mount(struct gfs2_sbd *sdp) 562{ 563 char *message = "FIRSTMOUNT=Done"; 564 char *envp[] = { message, NULL }; 565 struct lm_lockstruct *ls = &sdp->sd_lockstruct; 566 ls->ls_first_done = 1; 567 kobject_uevent_env(&sdp->sd_kobj, KOBJ_CHANGE, envp); 568} 569 570/** 571 * gfs2_jindex_hold - Grab a lock on the jindex 572 * @sdp: The GFS2 superblock 573 * @ji_gh: the holder for the jindex glock 574 * 575 * Returns: errno 576 */ 577 578static int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh) 579{ 580 struct gfs2_inode *dip = GFS2_I(sdp->sd_jindex); 581 struct qstr name; 582 char buf[20]; 583 struct gfs2_jdesc *jd; 584 int error; 585 586 name.name = buf; 587 588 mutex_lock(&sdp->sd_jindex_mutex); 589 590 for (;;) { 591 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, ji_gh); 592 if (error) 593 break; 594 595 name.len = sprintf(buf, "journal%u", sdp->sd_journals); 596 name.hash = gfs2_disk_hash(name.name, name.len); 597 598 error = gfs2_dir_check(sdp->sd_jindex, &name, NULL); 599 if (error == -ENOENT) { 600 error = 0; 601 break; 602 } 603 604 gfs2_glock_dq_uninit(ji_gh); 605 606 if (error) 607 break; 608 609 error = -ENOMEM; 610 jd = kzalloc(sizeof(struct gfs2_jdesc), GFP_KERNEL); 611 if (!jd) 612 break; 613 614 INIT_LIST_HEAD(&jd->extent_list); 615 INIT_WORK(&jd->jd_work, gfs2_recover_func); 616 jd->jd_inode = gfs2_lookupi(sdp->sd_jindex, &name, 1); 617 if (!jd->jd_inode || IS_ERR(jd->jd_inode)) { 618 if (!jd->jd_inode) 619 error = -ENOENT; 620 else 621 error = PTR_ERR(jd->jd_inode); 622 kfree(jd); 623 break; 624 } 625 626 spin_lock(&sdp->sd_jindex_spin); 627 jd->jd_jid = sdp->sd_journals++; 628 list_add_tail(&jd->jd_list, &sdp->sd_jindex_list); 629 spin_unlock(&sdp->sd_jindex_spin); 630 } 631 632 mutex_unlock(&sdp->sd_jindex_mutex); 633 634 return error; 635} 636 637static int init_journal(struct gfs2_sbd *sdp, int undo) 638{ 639 struct inode *master = sdp->sd_master_dir->d_inode; 640 struct gfs2_holder ji_gh; 641 struct gfs2_inode *ip; 642 int jindex = 1; 643 int error = 0; 644 645 if (undo) { 646 jindex = 0; 647 goto fail_jinode_gh; 648 } 649 650 sdp->sd_jindex = gfs2_lookup_simple(master, "jindex"); 651 if (IS_ERR(sdp->sd_jindex)) { 652 fs_err(sdp, "can't lookup journal index: %d\n", error); 653 return PTR_ERR(sdp->sd_jindex); 654 } 655 ip = GFS2_I(sdp->sd_jindex); 656 657 /* Load in the journal index special file */ 658 659 error = gfs2_jindex_hold(sdp, &ji_gh); 660 if (error) { 661 fs_err(sdp, "can't read journal index: %d\n", error); 662 goto fail; 663 } 664 665 error = -EUSERS; 666 if (!gfs2_jindex_size(sdp)) { 667 fs_err(sdp, "no journals!\n"); 668 goto fail_jindex; 669 } 670 671 if (sdp->sd_args.ar_spectator) { 672 sdp->sd_jdesc = gfs2_jdesc_find(sdp, 0); 673 atomic_set(&sdp->sd_log_blks_free, sdp->sd_jdesc->jd_blocks); 674 atomic_set(&sdp->sd_log_thresh1, 2*sdp->sd_jdesc->jd_blocks/5); 675 atomic_set(&sdp->sd_log_thresh2, 4*sdp->sd_jdesc->jd_blocks/5); 676 } else { 677 if (sdp->sd_lockstruct.ls_jid >= gfs2_jindex_size(sdp)) { 678 fs_err(sdp, "can't mount journal #%u\n", 679 sdp->sd_lockstruct.ls_jid); 680 fs_err(sdp, "there are only %u journals (0 - %u)\n", 681 gfs2_jindex_size(sdp), 682 gfs2_jindex_size(sdp) - 1); 683 goto fail_jindex; 684 } 685 sdp->sd_jdesc = gfs2_jdesc_find(sdp, sdp->sd_lockstruct.ls_jid); 686 687 error = gfs2_glock_nq_num(sdp, sdp->sd_lockstruct.ls_jid, 688 &gfs2_journal_glops, 689 LM_ST_EXCLUSIVE, LM_FLAG_NOEXP, 690 &sdp->sd_journal_gh); 691 if (error) { 692 fs_err(sdp, "can't acquire journal glock: %d\n", error); 693 goto fail_jindex; 694 } 695 696 ip = GFS2_I(sdp->sd_jdesc->jd_inode); 697 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 698 LM_FLAG_NOEXP | GL_EXACT | GL_NOCACHE, 699 &sdp->sd_jinode_gh); 700 if (error) { 701 fs_err(sdp, "can't acquire journal inode glock: %d\n", 702 error); 703 goto fail_journal_gh; 704 } 705 706 error = gfs2_jdesc_check(sdp->sd_jdesc); 707 if (error) { 708 fs_err(sdp, "my journal (%u) is bad: %d\n", 709 sdp->sd_jdesc->jd_jid, error); 710 goto fail_jinode_gh; 711 } 712 atomic_set(&sdp->sd_log_blks_free, sdp->sd_jdesc->jd_blocks); 713 atomic_set(&sdp->sd_log_thresh1, 2*sdp->sd_jdesc->jd_blocks/5); 714 atomic_set(&sdp->sd_log_thresh2, 4*sdp->sd_jdesc->jd_blocks/5); 715 716 /* Map the extents for this journal's blocks */ 717 map_journal_extents(sdp); 718 } 719 trace_gfs2_log_blocks(sdp, atomic_read(&sdp->sd_log_blks_free)); 720 721 if (sdp->sd_lockstruct.ls_first) { 722 unsigned int x; 723 for (x = 0; x < sdp->sd_journals; x++) { 724 error = gfs2_recover_journal(gfs2_jdesc_find(sdp, x), 725 true); 726 if (error) { 727 fs_err(sdp, "error recovering journal %u: %d\n", 728 x, error); 729 goto fail_jinode_gh; 730 } 731 } 732 733 gfs2_others_may_mount(sdp); 734 } else if (!sdp->sd_args.ar_spectator) { 735 error = gfs2_recover_journal(sdp->sd_jdesc, true); 736 if (error) { 737 fs_err(sdp, "error recovering my journal: %d\n", error); 738 goto fail_jinode_gh; 739 } 740 } 741 742 set_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags); 743 gfs2_glock_dq_uninit(&ji_gh); 744 jindex = 0; 745 746 return 0; 747 748fail_jinode_gh: 749 if (!sdp->sd_args.ar_spectator) 750 gfs2_glock_dq_uninit(&sdp->sd_jinode_gh); 751fail_journal_gh: 752 if (!sdp->sd_args.ar_spectator) 753 gfs2_glock_dq_uninit(&sdp->sd_journal_gh); 754fail_jindex: 755 gfs2_jindex_free(sdp); 756 if (jindex) 757 gfs2_glock_dq_uninit(&ji_gh); 758fail: 759 iput(sdp->sd_jindex); 760 return error; 761} 762 763 764static int init_inodes(struct gfs2_sbd *sdp, int undo) 765{ 766 int error = 0; 767 struct gfs2_inode *ip; 768 struct inode *master = sdp->sd_master_dir->d_inode; 769 770 if (undo) 771 goto fail_qinode; 772 773 error = init_journal(sdp, undo); 774 if (error) 775 goto fail; 776 777 /* Read in the master statfs inode */ 778 sdp->sd_statfs_inode = gfs2_lookup_simple(master, "statfs"); 779 if (IS_ERR(sdp->sd_statfs_inode)) { 780 error = PTR_ERR(sdp->sd_statfs_inode); 781 fs_err(sdp, "can't read in statfs inode: %d\n", error); 782 goto fail_journal; 783 } 784 785 /* Read in the resource index inode */ 786 sdp->sd_rindex = gfs2_lookup_simple(master, "rindex"); 787 if (IS_ERR(sdp->sd_rindex)) { 788 error = PTR_ERR(sdp->sd_rindex); 789 fs_err(sdp, "can't get resource index inode: %d\n", error); 790 goto fail_statfs; 791 } 792 ip = GFS2_I(sdp->sd_rindex); 793 sdp->sd_rindex_uptodate = 0; 794 795 /* Read in the quota inode */ 796 sdp->sd_quota_inode = gfs2_lookup_simple(master, "quota"); 797 if (IS_ERR(sdp->sd_quota_inode)) { 798 error = PTR_ERR(sdp->sd_quota_inode); 799 fs_err(sdp, "can't get quota file inode: %d\n", error); 800 goto fail_rindex; 801 } 802 return 0; 803 804fail_qinode: 805 iput(sdp->sd_quota_inode); 806fail_rindex: 807 gfs2_clear_rgrpd(sdp); 808 iput(sdp->sd_rindex); 809fail_statfs: 810 iput(sdp->sd_statfs_inode); 811fail_journal: 812 init_journal(sdp, UNDO); 813fail: 814 return error; 815} 816 817static int init_per_node(struct gfs2_sbd *sdp, int undo) 818{ 819 struct inode *pn = NULL; 820 char buf[30]; 821 int error = 0; 822 struct gfs2_inode *ip; 823 struct inode *master = sdp->sd_master_dir->d_inode; 824 825 if (sdp->sd_args.ar_spectator) 826 return 0; 827 828 if (undo) 829 goto fail_qc_gh; 830 831 pn = gfs2_lookup_simple(master, "per_node"); 832 if (IS_ERR(pn)) { 833 error = PTR_ERR(pn); 834 fs_err(sdp, "can't find per_node directory: %d\n", error); 835 return error; 836 } 837 838 sprintf(buf, "statfs_change%u", sdp->sd_jdesc->jd_jid); 839 sdp->sd_sc_inode = gfs2_lookup_simple(pn, buf); 840 if (IS_ERR(sdp->sd_sc_inode)) { 841 error = PTR_ERR(sdp->sd_sc_inode); 842 fs_err(sdp, "can't find local \"sc\" file: %d\n", error); 843 goto fail; 844 } 845 846 sprintf(buf, "quota_change%u", sdp->sd_jdesc->jd_jid); 847 sdp->sd_qc_inode = gfs2_lookup_simple(pn, buf); 848 if (IS_ERR(sdp->sd_qc_inode)) { 849 error = PTR_ERR(sdp->sd_qc_inode); 850 fs_err(sdp, "can't find local \"qc\" file: %d\n", error); 851 goto fail_ut_i; 852 } 853 854 iput(pn); 855 pn = NULL; 856 857 ip = GFS2_I(sdp->sd_sc_inode); 858 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, 859 &sdp->sd_sc_gh); 860 if (error) { 861 fs_err(sdp, "can't lock local \"sc\" file: %d\n", error); 862 goto fail_qc_i; 863 } 864 865 ip = GFS2_I(sdp->sd_qc_inode); 866 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, 867 &sdp->sd_qc_gh); 868 if (error) { 869 fs_err(sdp, "can't lock local \"qc\" file: %d\n", error); 870 goto fail_ut_gh; 871 } 872 873 return 0; 874 875fail_qc_gh: 876 gfs2_glock_dq_uninit(&sdp->sd_qc_gh); 877fail_ut_gh: 878 gfs2_glock_dq_uninit(&sdp->sd_sc_gh); 879fail_qc_i: 880 iput(sdp->sd_qc_inode); 881fail_ut_i: 882 iput(sdp->sd_sc_inode); 883fail: 884 if (pn) 885 iput(pn); 886 return error; 887} 888 889static int init_threads(struct gfs2_sbd *sdp, int undo) 890{ 891 struct task_struct *p; 892 int error = 0; 893 894 if (undo) 895 goto fail_quotad; 896 897 p = kthread_run(gfs2_logd, sdp, "gfs2_logd"); 898 error = IS_ERR(p); 899 if (error) { 900 fs_err(sdp, "can't start logd thread: %d\n", error); 901 return error; 902 } 903 sdp->sd_logd_process = p; 904 905 p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad"); 906 error = IS_ERR(p); 907 if (error) { 908 fs_err(sdp, "can't start quotad thread: %d\n", error); 909 goto fail; 910 } 911 sdp->sd_quotad_process = p; 912 913 return 0; 914 915 916fail_quotad: 917 kthread_stop(sdp->sd_quotad_process); 918fail: 919 kthread_stop(sdp->sd_logd_process); 920 return error; 921} 922 923static const match_table_t nolock_tokens = { 924 { Opt_jid, "jid=%d\n", }, 925 { Opt_err, NULL }, 926}; 927 928static const struct lm_lockops nolock_ops = { 929 .lm_proto_name = "lock_nolock", 930 .lm_put_lock = gfs2_glock_free, 931 .lm_tokens = &nolock_tokens, 932}; 933 934/** 935 * gfs2_lm_mount - mount a locking protocol 936 * @sdp: the filesystem 937 * @args: mount arguments 938 * @silent: if 1, don't complain if the FS isn't a GFS2 fs 939 * 940 * Returns: errno 941 */ 942 943static int gfs2_lm_mount(struct gfs2_sbd *sdp, int silent) 944{ 945 const struct lm_lockops *lm; 946 struct lm_lockstruct *ls = &sdp->sd_lockstruct; 947 struct gfs2_args *args = &sdp->sd_args; 948 const char *proto = sdp->sd_proto_name; 949 const char *table = sdp->sd_table_name; 950 const char *fsname; 951 char *o, *options; 952 int ret; 953 954 if (!strcmp("lock_nolock", proto)) { 955 lm = &nolock_ops; 956 sdp->sd_args.ar_localflocks = 1; 957#ifdef CONFIG_GFS2_FS_LOCKING_DLM 958 } else if (!strcmp("lock_dlm", proto)) { 959 lm = &gfs2_dlm_ops; 960#endif 961 } else { 962 printk(KERN_INFO "GFS2: can't find protocol %s\n", proto); 963 return -ENOENT; 964 } 965 966 fs_info(sdp, "Trying to join cluster \"%s\", \"%s\"\n", proto, table); 967 968 ls->ls_ops = lm; 969 ls->ls_first = 1; 970 971 for (options = args->ar_hostdata; (o = strsep(&options, ":")); ) { 972 substring_t tmp[MAX_OPT_ARGS]; 973 int token, option; 974 975 if (!o || !*o) 976 continue; 977 978 token = match_token(o, *lm->lm_tokens, tmp); 979 switch (token) { 980 case Opt_jid: 981 ret = match_int(&tmp[0], &option); 982 if (ret || option < 0) 983 goto hostdata_error; 984 if (test_and_clear_bit(SDF_NOJOURNALID, &sdp->sd_flags)) 985 ls->ls_jid = option; 986 break; 987 case Opt_id: 988 /* Obsolete, but left for backward compat purposes */ 989 break; 990 case Opt_first: 991 ret = match_int(&tmp[0], &option); 992 if (ret || (option != 0 && option != 1)) 993 goto hostdata_error; 994 ls->ls_first = option; 995 break; 996 case Opt_nodir: 997 ret = match_int(&tmp[0], &option); 998 if (ret || (option != 0 && option != 1)) 999 goto hostdata_error; 1000 ls->ls_nodir = option; 1001 break; 1002 case Opt_err: 1003 default: 1004hostdata_error: 1005 fs_info(sdp, "unknown hostdata (%s)\n", o); 1006 return -EINVAL; 1007 } 1008 } 1009 1010 if (sdp->sd_args.ar_spectator) 1011 snprintf(sdp->sd_fsname, GFS2_FSNAME_LEN, "%s.s", table); 1012 else 1013 snprintf(sdp->sd_fsname, GFS2_FSNAME_LEN, "%s.%u", table, 1014 sdp->sd_lockstruct.ls_jid); 1015 1016 fsname = strchr(table, ':'); 1017 if (fsname) 1018 fsname++; 1019 if (lm->lm_mount == NULL) { 1020 fs_info(sdp, "Now mounting FS...\n"); 1021 complete_all(&sdp->sd_locking_init); 1022 return 0; 1023 } 1024 ret = lm->lm_mount(sdp, fsname); 1025 if (ret == 0) 1026 fs_info(sdp, "Joined cluster. Now mounting FS...\n"); 1027 complete_all(&sdp->sd_locking_init); 1028 return ret; 1029} 1030 1031void gfs2_lm_unmount(struct gfs2_sbd *sdp) 1032{ 1033 const struct lm_lockops *lm = sdp->sd_lockstruct.ls_ops; 1034 if (likely(!test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) && 1035 lm->lm_unmount) 1036 lm->lm_unmount(sdp); 1037} 1038 1039static int gfs2_journalid_wait(void *word) 1040{ 1041 if (signal_pending(current)) 1042 return -EINTR; 1043 schedule(); 1044 return 0; 1045} 1046 1047static int wait_on_journal(struct gfs2_sbd *sdp) 1048{ 1049 if (sdp->sd_lockstruct.ls_ops->lm_mount == NULL) 1050 return 0; 1051 1052 return wait_on_bit(&sdp->sd_flags, SDF_NOJOURNALID, gfs2_journalid_wait, TASK_INTERRUPTIBLE); 1053} 1054 1055void gfs2_online_uevent(struct gfs2_sbd *sdp) 1056{ 1057 struct super_block *sb = sdp->sd_vfs; 1058 char ro[20]; 1059 char spectator[20]; 1060 char *envp[] = { ro, spectator, NULL }; 1061 sprintf(ro, "RDONLY=%d", (sb->s_flags & MS_RDONLY) ? 1 : 0); 1062 sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0); 1063 kobject_uevent_env(&sdp->sd_kobj, KOBJ_ONLINE, envp); 1064} 1065 1066/** 1067 * fill_super - Read in superblock 1068 * @sb: The VFS superblock 1069 * @data: Mount options 1070 * @silent: Don't complain if it's not a GFS2 filesystem 1071 * 1072 * Returns: errno 1073 */ 1074 1075static int fill_super(struct super_block *sb, struct gfs2_args *args, int silent) 1076{ 1077 struct gfs2_sbd *sdp; 1078 struct gfs2_holder mount_gh; 1079 int error; 1080 1081 sdp = init_sbd(sb); 1082 if (!sdp) { 1083 printk(KERN_WARNING "GFS2: can't alloc struct gfs2_sbd\n"); 1084 return -ENOMEM; 1085 } 1086 sdp->sd_args = *args; 1087 1088 if (sdp->sd_args.ar_spectator) { 1089 sb->s_flags |= MS_RDONLY; 1090 set_bit(SDF_NORECOVERY, &sdp->sd_flags); 1091 } 1092 if (sdp->sd_args.ar_posix_acl) 1093 sb->s_flags |= MS_POSIXACL; 1094 if (sdp->sd_args.ar_nobarrier) 1095 set_bit(SDF_NOBARRIERS, &sdp->sd_flags); 1096 1097 sb->s_flags |= MS_NOSEC; 1098 sb->s_magic = GFS2_MAGIC; 1099 sb->s_op = &gfs2_super_ops; 1100 sb->s_d_op = &gfs2_dops; 1101 sb->s_export_op = &gfs2_export_ops; 1102 sb->s_xattr = gfs2_xattr_handlers; 1103 sb->s_qcop = &gfs2_quotactl_ops; 1104 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE; 1105 sb->s_time_gran = 1; 1106 sb->s_maxbytes = MAX_LFS_FILESIZE; 1107 1108 /* Set up the buffer cache and fill in some fake block size values 1109 to allow us to read-in the on-disk superblock. */ 1110 sdp->sd_sb.sb_bsize = sb_min_blocksize(sb, GFS2_BASIC_BLOCK); 1111 sdp->sd_sb.sb_bsize_shift = sb->s_blocksize_bits; 1112 sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift - 1113 GFS2_BASIC_BLOCK_SHIFT; 1114 sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift; 1115 1116 sdp->sd_tune.gt_logd_secs = sdp->sd_args.ar_commit; 1117 sdp->sd_tune.gt_quota_quantum = sdp->sd_args.ar_quota_quantum; 1118 if (sdp->sd_args.ar_statfs_quantum) { 1119 sdp->sd_tune.gt_statfs_slow = 0; 1120 sdp->sd_tune.gt_statfs_quantum = sdp->sd_args.ar_statfs_quantum; 1121 } else { 1122 sdp->sd_tune.gt_statfs_slow = 1; 1123 sdp->sd_tune.gt_statfs_quantum = 30; 1124 } 1125 1126 error = init_names(sdp, silent); 1127 if (error) 1128 goto fail; 1129 1130 gfs2_create_debugfs_file(sdp); 1131 1132 error = gfs2_sys_fs_add(sdp); 1133 if (error) 1134 goto fail; 1135 1136 error = gfs2_lm_mount(sdp, silent); 1137 if (error) 1138 goto fail_sys; 1139 1140 error = init_locking(sdp, &mount_gh, DO); 1141 if (error) 1142 goto fail_lm; 1143 1144 error = init_sb(sdp, silent); 1145 if (error) 1146 goto fail_locking; 1147 1148 error = wait_on_journal(sdp); 1149 if (error) 1150 goto fail_sb; 1151 1152 /* 1153 * If user space has failed to join the cluster or some similar 1154 * failure has occurred, then the journal id will contain a 1155 * negative (error) number. This will then be returned to the 1156 * caller (of the mount syscall). We do this even for spectator 1157 * mounts (which just write a jid of 0 to indicate "ok" even though 1158 * the jid is unused in the spectator case) 1159 */ 1160 if (sdp->sd_lockstruct.ls_jid < 0) { 1161 error = sdp->sd_lockstruct.ls_jid; 1162 sdp->sd_lockstruct.ls_jid = 0; 1163 goto fail_sb; 1164 } 1165 1166 error = init_inodes(sdp, DO); 1167 if (error) 1168 goto fail_sb; 1169 1170 error = init_per_node(sdp, DO); 1171 if (error) 1172 goto fail_inodes; 1173 1174 error = gfs2_statfs_init(sdp); 1175 if (error) { 1176 fs_err(sdp, "can't initialize statfs subsystem: %d\n", error); 1177 goto fail_per_node; 1178 } 1179 1180 error = init_threads(sdp, DO); 1181 if (error) 1182 goto fail_per_node; 1183 1184 if (!(sb->s_flags & MS_RDONLY)) { 1185 error = gfs2_make_fs_rw(sdp); 1186 if (error) { 1187 fs_err(sdp, "can't make FS RW: %d\n", error); 1188 goto fail_threads; 1189 } 1190 } 1191 1192 gfs2_glock_dq_uninit(&mount_gh); 1193 gfs2_online_uevent(sdp); 1194 return 0; 1195 1196fail_threads: 1197 init_threads(sdp, UNDO); 1198fail_per_node: 1199 init_per_node(sdp, UNDO); 1200fail_inodes: 1201 init_inodes(sdp, UNDO); 1202fail_sb: 1203 if (sdp->sd_root_dir) 1204 dput(sdp->sd_root_dir); 1205 if (sdp->sd_master_dir) 1206 dput(sdp->sd_master_dir); 1207 if (sb->s_root) 1208 dput(sb->s_root); 1209 sb->s_root = NULL; 1210fail_locking: 1211 init_locking(sdp, &mount_gh, UNDO); 1212fail_lm: 1213 gfs2_gl_hash_clear(sdp); 1214 gfs2_lm_unmount(sdp); 1215fail_sys: 1216 gfs2_sys_fs_del(sdp); 1217fail: 1218 gfs2_delete_debugfs_file(sdp); 1219 kfree(sdp); 1220 sb->s_fs_info = NULL; 1221 return error; 1222} 1223 1224static int set_gfs2_super(struct super_block *s, void *data) 1225{ 1226 s->s_bdev = data; 1227 s->s_dev = s->s_bdev->bd_dev; 1228 1229 /* 1230 * We set the bdi here to the queue backing, file systems can 1231 * overwrite this in ->fill_super() 1232 */ 1233 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info; 1234 return 0; 1235} 1236 1237static int test_gfs2_super(struct super_block *s, void *ptr) 1238{ 1239 struct block_device *bdev = ptr; 1240 return (bdev == s->s_bdev); 1241} 1242 1243/** 1244 * gfs2_mount - Get the GFS2 superblock 1245 * @fs_type: The GFS2 filesystem type 1246 * @flags: Mount flags 1247 * @dev_name: The name of the device 1248 * @data: The mount arguments 1249 * 1250 * Q. Why not use get_sb_bdev() ? 1251 * A. We need to select one of two root directories to mount, independent 1252 * of whether this is the initial, or subsequent, mount of this sb 1253 * 1254 * Returns: 0 or -ve on error 1255 */ 1256 1257static struct dentry *gfs2_mount(struct file_system_type *fs_type, int flags, 1258 const char *dev_name, void *data) 1259{ 1260 struct block_device *bdev; 1261 struct super_block *s; 1262 fmode_t mode = FMODE_READ | FMODE_EXCL; 1263 int error; 1264 struct gfs2_args args; 1265 struct gfs2_sbd *sdp; 1266 1267 if (!(flags & MS_RDONLY)) 1268 mode |= FMODE_WRITE; 1269 1270 bdev = blkdev_get_by_path(dev_name, mode, fs_type); 1271 if (IS_ERR(bdev)) 1272 return ERR_CAST(bdev); 1273 1274 /* 1275 * once the super is inserted into the list by sget, s_umount 1276 * will protect the lockfs code from trying to start a snapshot 1277 * while we are mounting 1278 */ 1279 mutex_lock(&bdev->bd_fsfreeze_mutex); 1280 if (bdev->bd_fsfreeze_count > 0) { 1281 mutex_unlock(&bdev->bd_fsfreeze_mutex); 1282 error = -EBUSY; 1283 goto error_bdev; 1284 } 1285 s = sget(fs_type, test_gfs2_super, set_gfs2_super, bdev); 1286 mutex_unlock(&bdev->bd_fsfreeze_mutex); 1287 error = PTR_ERR(s); 1288 if (IS_ERR(s)) 1289 goto error_bdev; 1290 1291 if (s->s_root) 1292 blkdev_put(bdev, mode); 1293 1294 memset(&args, 0, sizeof(args)); 1295 args.ar_quota = GFS2_QUOTA_DEFAULT; 1296 args.ar_data = GFS2_DATA_DEFAULT; 1297 args.ar_commit = 30; 1298 args.ar_statfs_quantum = 30; 1299 args.ar_quota_quantum = 60; 1300 args.ar_errors = GFS2_ERRORS_DEFAULT; 1301 1302 error = gfs2_mount_args(&args, data); 1303 if (error) { 1304 printk(KERN_WARNING "GFS2: can't parse mount arguments\n"); 1305 goto error_super; 1306 } 1307 1308 if (s->s_root) { 1309 error = -EBUSY; 1310 if ((flags ^ s->s_flags) & MS_RDONLY) 1311 goto error_super; 1312 } else { 1313 char b[BDEVNAME_SIZE]; 1314 1315 s->s_flags = flags; 1316 s->s_mode = mode; 1317 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); 1318 sb_set_blocksize(s, block_size(bdev)); 1319 error = fill_super(s, &args, flags & MS_SILENT ? 1 : 0); 1320 if (error) 1321 goto error_super; 1322 s->s_flags |= MS_ACTIVE; 1323 bdev->bd_super = s; 1324 } 1325 1326 sdp = s->s_fs_info; 1327 if (args.ar_meta) 1328 return dget(sdp->sd_master_dir); 1329 else 1330 return dget(sdp->sd_root_dir); 1331 1332error_super: 1333 deactivate_locked_super(s); 1334 return ERR_PTR(error); 1335error_bdev: 1336 blkdev_put(bdev, mode); 1337 return ERR_PTR(error); 1338} 1339 1340static int set_meta_super(struct super_block *s, void *ptr) 1341{ 1342 return -EINVAL; 1343} 1344 1345static struct dentry *gfs2_mount_meta(struct file_system_type *fs_type, 1346 int flags, const char *dev_name, void *data) 1347{ 1348 struct super_block *s; 1349 struct gfs2_sbd *sdp; 1350 struct path path; 1351 int error; 1352 1353 error = kern_path(dev_name, LOOKUP_FOLLOW, &path); 1354 if (error) { 1355 printk(KERN_WARNING "GFS2: path_lookup on %s returned error %d\n", 1356 dev_name, error); 1357 return ERR_PTR(error); 1358 } 1359 s = sget(&gfs2_fs_type, test_gfs2_super, set_meta_super, 1360 path.dentry->d_inode->i_sb->s_bdev); 1361 path_put(&path); 1362 if (IS_ERR(s)) { 1363 printk(KERN_WARNING "GFS2: gfs2 mount does not exist\n"); 1364 return ERR_CAST(s); 1365 } 1366 if ((flags ^ s->s_flags) & MS_RDONLY) { 1367 deactivate_locked_super(s); 1368 return ERR_PTR(-EBUSY); 1369 } 1370 sdp = s->s_fs_info; 1371 return dget(sdp->sd_master_dir); 1372} 1373 1374static void gfs2_kill_sb(struct super_block *sb) 1375{ 1376 struct gfs2_sbd *sdp = sb->s_fs_info; 1377 1378 if (sdp == NULL) { 1379 kill_block_super(sb); 1380 return; 1381 } 1382 1383 gfs2_meta_syncfs(sdp); 1384 dput(sdp->sd_root_dir); 1385 dput(sdp->sd_master_dir); 1386 sdp->sd_root_dir = NULL; 1387 sdp->sd_master_dir = NULL; 1388 shrink_dcache_sb(sb); 1389 kill_block_super(sb); 1390 gfs2_delete_debugfs_file(sdp); 1391 kfree(sdp); 1392} 1393 1394struct file_system_type gfs2_fs_type = { 1395 .name = "gfs2", 1396 .fs_flags = FS_REQUIRES_DEV, 1397 .mount = gfs2_mount, 1398 .kill_sb = gfs2_kill_sb, 1399 .owner = THIS_MODULE, 1400}; 1401 1402struct file_system_type gfs2meta_fs_type = { 1403 .name = "gfs2meta", 1404 .fs_flags = FS_REQUIRES_DEV, 1405 .mount = gfs2_mount_meta, 1406 .owner = THIS_MODULE, 1407}; 1408