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