linux/fs/gfs2/ops_fstype.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   4 * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
   5 */
   6
   7#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   8
   9#include <linux/sched.h>
  10#include <linux/slab.h>
  11#include <linux/spinlock.h>
  12#include <linux/completion.h>
  13#include <linux/buffer_head.h>
  14#include <linux/blkdev.h>
  15#include <linux/kthread.h>
  16#include <linux/export.h>
  17#include <linux/namei.h>
  18#include <linux/mount.h>
  19#include <linux/gfs2_ondisk.h>
  20#include <linux/quotaops.h>
  21#include <linux/lockdep.h>
  22#include <linux/module.h>
  23#include <linux/backing-dev.h>
  24#include <linux/fs_parser.h>
  25
  26#include "gfs2.h"
  27#include "incore.h"
  28#include "bmap.h"
  29#include "glock.h"
  30#include "glops.h"
  31#include "inode.h"
  32#include "recovery.h"
  33#include "rgrp.h"
  34#include "super.h"
  35#include "sys.h"
  36#include "util.h"
  37#include "log.h"
  38#include "quota.h"
  39#include "dir.h"
  40#include "meta_io.h"
  41#include "trace_gfs2.h"
  42#include "lops.h"
  43
  44#define DO 0
  45#define UNDO 1
  46
  47/**
  48 * gfs2_tune_init - Fill a gfs2_tune structure with default values
  49 * @gt: tune
  50 *
  51 */
  52
  53static void gfs2_tune_init(struct gfs2_tune *gt)
  54{
  55        spin_lock_init(&gt->gt_spin);
  56
  57        gt->gt_quota_warn_period = 10;
  58        gt->gt_quota_scale_num = 1;
  59        gt->gt_quota_scale_den = 1;
  60        gt->gt_new_files_jdata = 0;
  61        gt->gt_max_readahead = BIT(18);
  62        gt->gt_complain_secs = 10;
  63}
  64
  65void free_sbd(struct gfs2_sbd *sdp)
  66{
  67        if (sdp->sd_lkstats)
  68                free_percpu(sdp->sd_lkstats);
  69        kfree(sdp);
  70}
  71
  72static struct gfs2_sbd *init_sbd(struct super_block *sb)
  73{
  74        struct gfs2_sbd *sdp;
  75        struct address_space *mapping;
  76
  77        sdp = kzalloc(sizeof(struct gfs2_sbd), GFP_KERNEL);
  78        if (!sdp)
  79                return NULL;
  80
  81        sdp->sd_vfs = sb;
  82        sdp->sd_lkstats = alloc_percpu(struct gfs2_pcpu_lkstats);
  83        if (!sdp->sd_lkstats)
  84                goto fail;
  85        sb->s_fs_info = sdp;
  86
  87        set_bit(SDF_NOJOURNALID, &sdp->sd_flags);
  88        gfs2_tune_init(&sdp->sd_tune);
  89
  90        init_waitqueue_head(&sdp->sd_glock_wait);
  91        init_waitqueue_head(&sdp->sd_async_glock_wait);
  92        atomic_set(&sdp->sd_glock_disposal, 0);
  93        init_completion(&sdp->sd_locking_init);
  94        init_completion(&sdp->sd_wdack);
  95        spin_lock_init(&sdp->sd_statfs_spin);
  96
  97        spin_lock_init(&sdp->sd_rindex_spin);
  98        sdp->sd_rindex_tree.rb_node = NULL;
  99
 100        INIT_LIST_HEAD(&sdp->sd_jindex_list);
 101        spin_lock_init(&sdp->sd_jindex_spin);
 102        mutex_init(&sdp->sd_jindex_mutex);
 103        init_completion(&sdp->sd_journal_ready);
 104
 105        INIT_LIST_HEAD(&sdp->sd_quota_list);
 106        mutex_init(&sdp->sd_quota_mutex);
 107        mutex_init(&sdp->sd_quota_sync_mutex);
 108        init_waitqueue_head(&sdp->sd_quota_wait);
 109        INIT_LIST_HEAD(&sdp->sd_trunc_list);
 110        spin_lock_init(&sdp->sd_trunc_lock);
 111        spin_lock_init(&sdp->sd_bitmap_lock);
 112
 113        INIT_LIST_HEAD(&sdp->sd_sc_inodes_list);
 114
 115        mapping = &sdp->sd_aspace;
 116
 117        address_space_init_once(mapping);
 118        mapping->a_ops = &gfs2_rgrp_aops;
 119        mapping->host = sb->s_bdev->bd_inode;
 120        mapping->flags = 0;
 121        mapping_set_gfp_mask(mapping, GFP_NOFS);
 122        mapping->private_data = NULL;
 123        mapping->writeback_index = 0;
 124
 125        spin_lock_init(&sdp->sd_log_lock);
 126        atomic_set(&sdp->sd_log_pinned, 0);
 127        INIT_LIST_HEAD(&sdp->sd_log_revokes);
 128        INIT_LIST_HEAD(&sdp->sd_log_ordered);
 129        spin_lock_init(&sdp->sd_ordered_lock);
 130
 131        init_waitqueue_head(&sdp->sd_log_waitq);
 132        init_waitqueue_head(&sdp->sd_logd_waitq);
 133        spin_lock_init(&sdp->sd_ail_lock);
 134        INIT_LIST_HEAD(&sdp->sd_ail1_list);
 135        INIT_LIST_HEAD(&sdp->sd_ail2_list);
 136
 137        init_rwsem(&sdp->sd_log_flush_lock);
 138        atomic_set(&sdp->sd_log_in_flight, 0);
 139        init_waitqueue_head(&sdp->sd_log_flush_wait);
 140        atomic_set(&sdp->sd_freeze_state, SFS_UNFROZEN);
 141        mutex_init(&sdp->sd_freeze_mutex);
 142
 143        return sdp;
 144
 145fail:
 146        free_sbd(sdp);
 147        return NULL;
 148}
 149
 150/**
 151 * gfs2_check_sb - Check superblock
 152 * @sdp: the filesystem
 153 * @silent: Don't print a message if the check fails
 154 *
 155 * Checks the version code of the FS is one that we understand how to
 156 * read and that the sizes of the various on-disk structures have not
 157 * changed.
 158 */
 159
 160static int gfs2_check_sb(struct gfs2_sbd *sdp, int silent)
 161{
 162        struct gfs2_sb_host *sb = &sdp->sd_sb;
 163
 164        if (sb->sb_magic != GFS2_MAGIC ||
 165            sb->sb_type != GFS2_METATYPE_SB) {
 166                if (!silent)
 167                        pr_warn("not a GFS2 filesystem\n");
 168                return -EINVAL;
 169        }
 170
 171        if (sb->sb_fs_format < GFS2_FS_FORMAT_MIN ||
 172            sb->sb_fs_format > GFS2_FS_FORMAT_MAX ||
 173            sb->sb_multihost_format != GFS2_FORMAT_MULTI) {
 174                fs_warn(sdp, "Unknown on-disk format, unable to mount\n");
 175                return -EINVAL;
 176        }
 177
 178        if (sb->sb_bsize < 512 || sb->sb_bsize > PAGE_SIZE ||
 179            (sb->sb_bsize & (sb->sb_bsize - 1))) {
 180                pr_warn("Invalid block size\n");
 181                return -EINVAL;
 182        }
 183
 184        return 0;
 185}
 186
 187static void end_bio_io_page(struct bio *bio)
 188{
 189        struct page *page = bio->bi_private;
 190
 191        if (!bio->bi_status)
 192                SetPageUptodate(page);
 193        else
 194                pr_warn("error %d reading superblock\n", bio->bi_status);
 195        unlock_page(page);
 196}
 197
 198static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf)
 199{
 200        struct gfs2_sb_host *sb = &sdp->sd_sb;
 201        struct super_block *s = sdp->sd_vfs;
 202        const struct gfs2_sb *str = buf;
 203
 204        sb->sb_magic = be32_to_cpu(str->sb_header.mh_magic);
 205        sb->sb_type = be32_to_cpu(str->sb_header.mh_type);
 206        sb->sb_fs_format = be32_to_cpu(str->sb_fs_format);
 207        sb->sb_multihost_format = be32_to_cpu(str->sb_multihost_format);
 208        sb->sb_bsize = be32_to_cpu(str->sb_bsize);
 209        sb->sb_bsize_shift = be32_to_cpu(str->sb_bsize_shift);
 210        sb->sb_master_dir.no_addr = be64_to_cpu(str->sb_master_dir.no_addr);
 211        sb->sb_master_dir.no_formal_ino = be64_to_cpu(str->sb_master_dir.no_formal_ino);
 212        sb->sb_root_dir.no_addr = be64_to_cpu(str->sb_root_dir.no_addr);
 213        sb->sb_root_dir.no_formal_ino = be64_to_cpu(str->sb_root_dir.no_formal_ino);
 214
 215        memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN);
 216        memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN);
 217        memcpy(&s->s_uuid, str->sb_uuid, 16);
 218}
 219
 220/**
 221 * gfs2_read_super - Read the gfs2 super block from disk
 222 * @sdp: The GFS2 super block
 223 * @sector: The location of the super block
 224 * @silent: Don't print a message if the check fails
 225 *
 226 * This uses the bio functions to read the super block from disk
 227 * because we want to be 100% sure that we never read cached data.
 228 * A super block is read twice only during each GFS2 mount and is
 229 * never written to by the filesystem. The first time its read no
 230 * locks are held, and the only details which are looked at are those
 231 * relating to the locking protocol. Once locking is up and working,
 232 * the sb is read again under the lock to establish the location of
 233 * the master directory (contains pointers to journals etc) and the
 234 * root directory.
 235 *
 236 * Returns: 0 on success or error
 237 */
 238
 239static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector, int silent)
 240{
 241        struct super_block *sb = sdp->sd_vfs;
 242        struct gfs2_sb *p;
 243        struct page *page;
 244        struct bio *bio;
 245
 246        page = alloc_page(GFP_NOFS);
 247        if (unlikely(!page))
 248                return -ENOMEM;
 249
 250        ClearPageUptodate(page);
 251        ClearPageDirty(page);
 252        lock_page(page);
 253
 254        bio = bio_alloc(GFP_NOFS, 1);
 255        bio->bi_iter.bi_sector = sector * (sb->s_blocksize >> 9);
 256        bio_set_dev(bio, sb->s_bdev);
 257        bio_add_page(bio, page, PAGE_SIZE, 0);
 258
 259        bio->bi_end_io = end_bio_io_page;
 260        bio->bi_private = page;
 261        bio_set_op_attrs(bio, REQ_OP_READ, REQ_META);
 262        submit_bio(bio);
 263        wait_on_page_locked(page);
 264        bio_put(bio);
 265        if (!PageUptodate(page)) {
 266                __free_page(page);
 267                return -EIO;
 268        }
 269        p = kmap(page);
 270        gfs2_sb_in(sdp, p);
 271        kunmap(page);
 272        __free_page(page);
 273        return gfs2_check_sb(sdp, silent);
 274}
 275
 276/**
 277 * gfs2_read_sb - Read super block
 278 * @sdp: The GFS2 superblock
 279 * @silent: Don't print message if mount fails
 280 *
 281 */
 282
 283static int gfs2_read_sb(struct gfs2_sbd *sdp, int silent)
 284{
 285        u32 hash_blocks, ind_blocks, leaf_blocks;
 286        u32 tmp_blocks;
 287        unsigned int x;
 288        int error;
 289
 290        error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent);
 291        if (error) {
 292                if (!silent)
 293                        fs_err(sdp, "can't read superblock\n");
 294                return error;
 295        }
 296
 297        sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift -
 298                               GFS2_BASIC_BLOCK_SHIFT;
 299        sdp->sd_fsb2bb = BIT(sdp->sd_fsb2bb_shift);
 300        sdp->sd_diptrs = (sdp->sd_sb.sb_bsize -
 301                          sizeof(struct gfs2_dinode)) / sizeof(u64);
 302        sdp->sd_inptrs = (sdp->sd_sb.sb_bsize -
 303                          sizeof(struct gfs2_meta_header)) / sizeof(u64);
 304        sdp->sd_ldptrs = (sdp->sd_sb.sb_bsize -
 305                          sizeof(struct gfs2_log_descriptor)) / sizeof(u64);
 306        sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
 307        sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2;
 308        sdp->sd_hash_bsize_shift = sdp->sd_sb.sb_bsize_shift - 1;
 309        sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(u64);
 310        sdp->sd_qc_per_block = (sdp->sd_sb.sb_bsize -
 311                                sizeof(struct gfs2_meta_header)) /
 312                                sizeof(struct gfs2_quota_change);
 313        sdp->sd_blocks_per_bitmap = (sdp->sd_sb.sb_bsize -
 314                                     sizeof(struct gfs2_meta_header))
 315                * GFS2_NBBY; /* not the rgrp bitmap, subsequent bitmaps only */
 316
 317        /*
 318         * We always keep at least one block reserved for revokes in
 319         * transactions.  This greatly simplifies allocating additional
 320         * revoke blocks.
 321         */
 322        atomic_set(&sdp->sd_log_revokes_available, sdp->sd_ldptrs);
 323
 324        /* Compute maximum reservation required to add a entry to a directory */
 325
 326        hash_blocks = DIV_ROUND_UP(sizeof(u64) * BIT(GFS2_DIR_MAX_DEPTH),
 327                             sdp->sd_jbsize);
 328
 329        ind_blocks = 0;
 330        for (tmp_blocks = hash_blocks; tmp_blocks > sdp->sd_diptrs;) {
 331                tmp_blocks = DIV_ROUND_UP(tmp_blocks, sdp->sd_inptrs);
 332                ind_blocks += tmp_blocks;
 333        }
 334
 335        leaf_blocks = 2 + GFS2_DIR_MAX_DEPTH;
 336
 337        sdp->sd_max_dirres = hash_blocks + ind_blocks + leaf_blocks;
 338
 339        sdp->sd_heightsize[0] = sdp->sd_sb.sb_bsize -
 340                                sizeof(struct gfs2_dinode);
 341        sdp->sd_heightsize[1] = sdp->sd_sb.sb_bsize * sdp->sd_diptrs;
 342        for (x = 2;; x++) {
 343                u64 space, d;
 344                u32 m;
 345
 346                space = sdp->sd_heightsize[x - 1] * sdp->sd_inptrs;
 347                d = space;
 348                m = do_div(d, sdp->sd_inptrs);
 349
 350                if (d != sdp->sd_heightsize[x - 1] || m)
 351                        break;
 352                sdp->sd_heightsize[x] = space;
 353        }
 354        sdp->sd_max_height = x;
 355        sdp->sd_heightsize[x] = ~0;
 356        gfs2_assert(sdp, sdp->sd_max_height <= GFS2_MAX_META_HEIGHT);
 357
 358        sdp->sd_max_dents_per_leaf = (sdp->sd_sb.sb_bsize -
 359                                      sizeof(struct gfs2_leaf)) /
 360                                     GFS2_MIN_DIRENT_SIZE;
 361        return 0;
 362}
 363
 364static int init_names(struct gfs2_sbd *sdp, int silent)
 365{
 366        char *proto, *table;
 367        int error = 0;
 368
 369        proto = sdp->sd_args.ar_lockproto;
 370        table = sdp->sd_args.ar_locktable;
 371
 372        /*  Try to autodetect  */
 373
 374        if (!proto[0] || !table[0]) {
 375                error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent);
 376                if (error)
 377                        return error;
 378
 379                if (!proto[0])
 380                        proto = sdp->sd_sb.sb_lockproto;
 381                if (!table[0])
 382                        table = sdp->sd_sb.sb_locktable;
 383        }
 384
 385        if (!table[0])
 386                table = sdp->sd_vfs->s_id;
 387
 388        strlcpy(sdp->sd_proto_name, proto, GFS2_FSNAME_LEN);
 389        strlcpy(sdp->sd_table_name, table, GFS2_FSNAME_LEN);
 390
 391        table = sdp->sd_table_name;
 392        while ((table = strchr(table, '/')))
 393                *table = '_';
 394
 395        return error;
 396}
 397
 398static int init_locking(struct gfs2_sbd *sdp, struct gfs2_holder *mount_gh,
 399                        int undo)
 400{
 401        int error = 0;
 402
 403        if (undo)
 404                goto fail_trans;
 405
 406        error = gfs2_glock_nq_num(sdp,
 407                                  GFS2_MOUNT_LOCK, &gfs2_nondisk_glops,
 408                                  LM_ST_EXCLUSIVE, LM_FLAG_NOEXP | GL_NOCACHE,
 409                                  mount_gh);
 410        if (error) {
 411                fs_err(sdp, "can't acquire mount glock: %d\n", error);
 412                goto fail;
 413        }
 414
 415        error = gfs2_glock_nq_num(sdp,
 416                                  GFS2_LIVE_LOCK, &gfs2_nondisk_glops,
 417                                  LM_ST_SHARED,
 418                                  LM_FLAG_NOEXP | GL_EXACT,
 419                                  &sdp->sd_live_gh);
 420        if (error) {
 421                fs_err(sdp, "can't acquire live glock: %d\n", error);
 422                goto fail_mount;
 423        }
 424
 425        error = gfs2_glock_get(sdp, GFS2_RENAME_LOCK, &gfs2_nondisk_glops,
 426                               CREATE, &sdp->sd_rename_gl);
 427        if (error) {
 428                fs_err(sdp, "can't create rename glock: %d\n", error);
 429                goto fail_live;
 430        }
 431
 432        error = gfs2_glock_get(sdp, GFS2_FREEZE_LOCK, &gfs2_freeze_glops,
 433                               CREATE, &sdp->sd_freeze_gl);
 434        if (error) {
 435                fs_err(sdp, "can't create transaction glock: %d\n", error);
 436                goto fail_rename;
 437        }
 438
 439        return 0;
 440
 441fail_trans:
 442        gfs2_glock_put(sdp->sd_freeze_gl);
 443fail_rename:
 444        gfs2_glock_put(sdp->sd_rename_gl);
 445fail_live:
 446        gfs2_glock_dq_uninit(&sdp->sd_live_gh);
 447fail_mount:
 448        gfs2_glock_dq_uninit(mount_gh);
 449fail:
 450        return error;
 451}
 452
 453static int gfs2_lookup_root(struct super_block *sb, struct dentry **dptr,
 454                            u64 no_addr, const char *name)
 455{
 456        struct gfs2_sbd *sdp = sb->s_fs_info;
 457        struct dentry *dentry;
 458        struct inode *inode;
 459
 460        inode = gfs2_inode_lookup(sb, DT_DIR, no_addr, 0,
 461                                  GFS2_BLKST_FREE /* ignore */);
 462        if (IS_ERR(inode)) {
 463                fs_err(sdp, "can't read in %s inode: %ld\n", name, PTR_ERR(inode));
 464                return PTR_ERR(inode);
 465        }
 466        dentry = d_make_root(inode);
 467        if (!dentry) {
 468                fs_err(sdp, "can't alloc %s dentry\n", name);
 469                return -ENOMEM;
 470        }
 471        *dptr = dentry;
 472        return 0;
 473}
 474
 475static int init_sb(struct gfs2_sbd *sdp, int silent)
 476{
 477        struct super_block *sb = sdp->sd_vfs;
 478        struct gfs2_holder sb_gh;
 479        u64 no_addr;
 480        int ret;
 481
 482        ret = gfs2_glock_nq_num(sdp, GFS2_SB_LOCK, &gfs2_meta_glops,
 483                                LM_ST_SHARED, 0, &sb_gh);
 484        if (ret) {
 485                fs_err(sdp, "can't acquire superblock glock: %d\n", ret);
 486                return ret;
 487        }
 488
 489        ret = gfs2_read_sb(sdp, silent);
 490        if (ret) {
 491                fs_err(sdp, "can't read superblock: %d\n", ret);
 492                goto out;
 493        }
 494
 495        switch(sdp->sd_sb.sb_fs_format) {
 496        case GFS2_FS_FORMAT_MAX:
 497                sb->s_xattr = gfs2_xattr_handlers_max;
 498                break;
 499
 500        case GFS2_FS_FORMAT_MIN:
 501                sb->s_xattr = gfs2_xattr_handlers_min;
 502                break;
 503
 504        default:
 505                BUG();
 506        }
 507
 508        /* Set up the buffer cache and SB for real */
 509        if (sdp->sd_sb.sb_bsize < bdev_logical_block_size(sb->s_bdev)) {
 510                ret = -EINVAL;
 511                fs_err(sdp, "FS block size (%u) is too small for device "
 512                       "block size (%u)\n",
 513                       sdp->sd_sb.sb_bsize, bdev_logical_block_size(sb->s_bdev));
 514                goto out;
 515        }
 516        if (sdp->sd_sb.sb_bsize > PAGE_SIZE) {
 517                ret = -EINVAL;
 518                fs_err(sdp, "FS block size (%u) is too big for machine "
 519                       "page size (%u)\n",
 520                       sdp->sd_sb.sb_bsize, (unsigned int)PAGE_SIZE);
 521                goto out;
 522        }
 523        sb_set_blocksize(sb, sdp->sd_sb.sb_bsize);
 524
 525        /* Get the root inode */
 526        no_addr = sdp->sd_sb.sb_root_dir.no_addr;
 527        ret = gfs2_lookup_root(sb, &sdp->sd_root_dir, no_addr, "root");
 528        if (ret)
 529                goto out;
 530
 531        /* Get the master inode */
 532        no_addr = sdp->sd_sb.sb_master_dir.no_addr;
 533        ret = gfs2_lookup_root(sb, &sdp->sd_master_dir, no_addr, "master");
 534        if (ret) {
 535                dput(sdp->sd_root_dir);
 536                goto out;
 537        }
 538        sb->s_root = dget(sdp->sd_args.ar_meta ? sdp->sd_master_dir : sdp->sd_root_dir);
 539out:
 540        gfs2_glock_dq_uninit(&sb_gh);
 541        return ret;
 542}
 543
 544static void gfs2_others_may_mount(struct gfs2_sbd *sdp)
 545{
 546        char *message = "FIRSTMOUNT=Done";
 547        char *envp[] = { message, NULL };
 548
 549        fs_info(sdp, "first mount done, others may mount\n");
 550
 551        if (sdp->sd_lockstruct.ls_ops->lm_first_done)
 552                sdp->sd_lockstruct.ls_ops->lm_first_done(sdp);
 553
 554        kobject_uevent_env(&sdp->sd_kobj, KOBJ_CHANGE, envp);
 555}
 556
 557/**
 558 * gfs2_jindex_hold - Grab a lock on the jindex
 559 * @sdp: The GFS2 superblock
 560 * @ji_gh: the holder for the jindex glock
 561 *
 562 * Returns: errno
 563 */
 564
 565static int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh)
 566{
 567        struct gfs2_inode *dip = GFS2_I(sdp->sd_jindex);
 568        struct qstr name;
 569        char buf[20];
 570        struct gfs2_jdesc *jd;
 571        int error;
 572
 573        name.name = buf;
 574
 575        mutex_lock(&sdp->sd_jindex_mutex);
 576
 577        for (;;) {
 578                struct gfs2_inode *jip;
 579
 580                error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, ji_gh);
 581                if (error)
 582                        break;
 583
 584                name.len = sprintf(buf, "journal%u", sdp->sd_journals);
 585                name.hash = gfs2_disk_hash(name.name, name.len);
 586
 587                error = gfs2_dir_check(sdp->sd_jindex, &name, NULL);
 588                if (error == -ENOENT) {
 589                        error = 0;
 590                        break;
 591                }
 592
 593                gfs2_glock_dq_uninit(ji_gh);
 594
 595                if (error)
 596                        break;
 597
 598                error = -ENOMEM;
 599                jd = kzalloc(sizeof(struct gfs2_jdesc), GFP_KERNEL);
 600                if (!jd)
 601                        break;
 602
 603                INIT_LIST_HEAD(&jd->extent_list);
 604                INIT_LIST_HEAD(&jd->jd_revoke_list);
 605
 606                INIT_WORK(&jd->jd_work, gfs2_recover_func);
 607                jd->jd_inode = gfs2_lookupi(sdp->sd_jindex, &name, 1);
 608                if (IS_ERR_OR_NULL(jd->jd_inode)) {
 609                        if (!jd->jd_inode)
 610                                error = -ENOENT;
 611                        else
 612                                error = PTR_ERR(jd->jd_inode);
 613                        kfree(jd);
 614                        break;
 615                }
 616
 617                d_mark_dontcache(jd->jd_inode);
 618                spin_lock(&sdp->sd_jindex_spin);
 619                jd->jd_jid = sdp->sd_journals++;
 620                jip = GFS2_I(jd->jd_inode);
 621                jd->jd_no_addr = jip->i_no_addr;
 622                list_add_tail(&jd->jd_list, &sdp->sd_jindex_list);
 623                spin_unlock(&sdp->sd_jindex_spin);
 624        }
 625
 626        mutex_unlock(&sdp->sd_jindex_mutex);
 627
 628        return error;
 629}
 630
 631/**
 632 * init_statfs - look up and initialize master and local (per node) statfs inodes
 633 * @sdp: The GFS2 superblock
 634 *
 635 * This should be called after the jindex is initialized in init_journal() and
 636 * before gfs2_journal_recovery() is called because we need to be able to write
 637 * to these inodes during recovery.
 638 *
 639 * Returns: errno
 640 */
 641static int init_statfs(struct gfs2_sbd *sdp)
 642{
 643        int error = 0;
 644        struct inode *master = d_inode(sdp->sd_master_dir);
 645        struct inode *pn = NULL;
 646        char buf[30];
 647        struct gfs2_jdesc *jd;
 648        struct gfs2_inode *ip;
 649
 650        sdp->sd_statfs_inode = gfs2_lookup_simple(master, "statfs");
 651        if (IS_ERR(sdp->sd_statfs_inode)) {
 652                error = PTR_ERR(sdp->sd_statfs_inode);
 653                fs_err(sdp, "can't read in statfs inode: %d\n", error);
 654                goto out;
 655        }
 656        if (sdp->sd_args.ar_spectator)
 657                goto out;
 658
 659        pn = gfs2_lookup_simple(master, "per_node");
 660        if (IS_ERR(pn)) {
 661                error = PTR_ERR(pn);
 662                fs_err(sdp, "can't find per_node directory: %d\n", error);
 663                goto put_statfs;
 664        }
 665
 666        /* For each jid, lookup the corresponding local statfs inode in the
 667         * per_node metafs directory and save it in the sdp->sd_sc_inodes_list. */
 668        list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
 669                struct local_statfs_inode *lsi =
 670                        kmalloc(sizeof(struct local_statfs_inode), GFP_NOFS);
 671                if (!lsi) {
 672                        error = -ENOMEM;
 673                        goto free_local;
 674                }
 675                sprintf(buf, "statfs_change%u", jd->jd_jid);
 676                lsi->si_sc_inode = gfs2_lookup_simple(pn, buf);
 677                if (IS_ERR(lsi->si_sc_inode)) {
 678                        error = PTR_ERR(lsi->si_sc_inode);
 679                        fs_err(sdp, "can't find local \"sc\" file#%u: %d\n",
 680                               jd->jd_jid, error);
 681                        kfree(lsi);
 682                        goto free_local;
 683                }
 684                lsi->si_jid = jd->jd_jid;
 685                if (jd->jd_jid == sdp->sd_jdesc->jd_jid)
 686                        sdp->sd_sc_inode = lsi->si_sc_inode;
 687
 688                list_add_tail(&lsi->si_list, &sdp->sd_sc_inodes_list);
 689        }
 690
 691        iput(pn);
 692        pn = NULL;
 693        ip = GFS2_I(sdp->sd_sc_inode);
 694        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0,
 695                                   &sdp->sd_sc_gh);
 696        if (error) {
 697                fs_err(sdp, "can't lock local \"sc\" file: %d\n", error);
 698                goto free_local;
 699        }
 700        /* read in the local statfs buffer - other nodes don't change it. */
 701        error = gfs2_meta_inode_buffer(ip, &sdp->sd_sc_bh);
 702        if (error) {
 703                fs_err(sdp, "Cannot read in local statfs: %d\n", error);
 704                goto unlock_sd_gh;
 705        }
 706        return 0;
 707
 708unlock_sd_gh:
 709        gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
 710free_local:
 711        free_local_statfs_inodes(sdp);
 712        iput(pn);
 713put_statfs:
 714        iput(sdp->sd_statfs_inode);
 715out:
 716        return error;
 717}
 718
 719/* Uninitialize and free up memory used by the list of statfs inodes */
 720static void uninit_statfs(struct gfs2_sbd *sdp)
 721{
 722        if (!sdp->sd_args.ar_spectator) {
 723                brelse(sdp->sd_sc_bh);
 724                gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
 725                free_local_statfs_inodes(sdp);
 726        }
 727        iput(sdp->sd_statfs_inode);
 728}
 729
 730static int init_journal(struct gfs2_sbd *sdp, int undo)
 731{
 732        struct inode *master = d_inode(sdp->sd_master_dir);
 733        struct gfs2_holder ji_gh;
 734        struct gfs2_inode *ip;
 735        int jindex = 1;
 736        int error = 0;
 737
 738        if (undo) {
 739                jindex = 0;
 740                goto fail_statfs;
 741        }
 742
 743        sdp->sd_jindex = gfs2_lookup_simple(master, "jindex");
 744        if (IS_ERR(sdp->sd_jindex)) {
 745                fs_err(sdp, "can't lookup journal index: %d\n", error);
 746                return PTR_ERR(sdp->sd_jindex);
 747        }
 748
 749        /* Load in the journal index special file */
 750
 751        error = gfs2_jindex_hold(sdp, &ji_gh);
 752        if (error) {
 753                fs_err(sdp, "can't read journal index: %d\n", error);
 754                goto fail;
 755        }
 756
 757        error = -EUSERS;
 758        if (!gfs2_jindex_size(sdp)) {
 759                fs_err(sdp, "no journals!\n");
 760                goto fail_jindex;
 761        }
 762
 763        atomic_set(&sdp->sd_log_blks_needed, 0);
 764        if (sdp->sd_args.ar_spectator) {
 765                sdp->sd_jdesc = gfs2_jdesc_find(sdp, 0);
 766                atomic_set(&sdp->sd_log_blks_free, sdp->sd_jdesc->jd_blocks);
 767                atomic_set(&sdp->sd_log_thresh1, 2*sdp->sd_jdesc->jd_blocks/5);
 768                atomic_set(&sdp->sd_log_thresh2, 4*sdp->sd_jdesc->jd_blocks/5);
 769        } else {
 770                if (sdp->sd_lockstruct.ls_jid >= gfs2_jindex_size(sdp)) {
 771                        fs_err(sdp, "can't mount journal #%u\n",
 772                               sdp->sd_lockstruct.ls_jid);
 773                        fs_err(sdp, "there are only %u journals (0 - %u)\n",
 774                               gfs2_jindex_size(sdp),
 775                               gfs2_jindex_size(sdp) - 1);
 776                        goto fail_jindex;
 777                }
 778                sdp->sd_jdesc = gfs2_jdesc_find(sdp, sdp->sd_lockstruct.ls_jid);
 779
 780                error = gfs2_glock_nq_num(sdp, sdp->sd_lockstruct.ls_jid,
 781                                          &gfs2_journal_glops,
 782                                          LM_ST_EXCLUSIVE,
 783                                          LM_FLAG_NOEXP | GL_NOCACHE,
 784                                          &sdp->sd_journal_gh);
 785                if (error) {
 786                        fs_err(sdp, "can't acquire journal glock: %d\n", error);
 787                        goto fail_jindex;
 788                }
 789
 790                ip = GFS2_I(sdp->sd_jdesc->jd_inode);
 791                sdp->sd_jinode_gl = ip->i_gl;
 792                error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED,
 793                                           LM_FLAG_NOEXP | GL_EXACT | GL_NOCACHE,
 794                                           &sdp->sd_jinode_gh);
 795                if (error) {
 796                        fs_err(sdp, "can't acquire journal inode glock: %d\n",
 797                               error);
 798                        goto fail_journal_gh;
 799                }
 800
 801                error = gfs2_jdesc_check(sdp->sd_jdesc);
 802                if (error) {
 803                        fs_err(sdp, "my journal (%u) is bad: %d\n",
 804                               sdp->sd_jdesc->jd_jid, error);
 805                        goto fail_jinode_gh;
 806                }
 807                atomic_set(&sdp->sd_log_blks_free, sdp->sd_jdesc->jd_blocks);
 808                atomic_set(&sdp->sd_log_thresh1, 2*sdp->sd_jdesc->jd_blocks/5);
 809                atomic_set(&sdp->sd_log_thresh2, 4*sdp->sd_jdesc->jd_blocks/5);
 810
 811                /* Map the extents for this journal's blocks */
 812                gfs2_map_journal_extents(sdp, sdp->sd_jdesc);
 813        }
 814        trace_gfs2_log_blocks(sdp, atomic_read(&sdp->sd_log_blks_free));
 815
 816        /* Lookup statfs inodes here so journal recovery can use them. */
 817        error = init_statfs(sdp);
 818        if (error)
 819                goto fail_jinode_gh;
 820
 821        if (sdp->sd_lockstruct.ls_first) {
 822                unsigned int x;
 823                for (x = 0; x < sdp->sd_journals; x++) {
 824                        struct gfs2_jdesc *jd = gfs2_jdesc_find(sdp, x);
 825
 826                        if (sdp->sd_args.ar_spectator) {
 827                                error = check_journal_clean(sdp, jd, true);
 828                                if (error)
 829                                        goto fail_statfs;
 830                                continue;
 831                        }
 832                        error = gfs2_recover_journal(jd, true);
 833                        if (error) {
 834                                fs_err(sdp, "error recovering journal %u: %d\n",
 835                                       x, error);
 836                                goto fail_statfs;
 837                        }
 838                }
 839
 840                gfs2_others_may_mount(sdp);
 841        } else if (!sdp->sd_args.ar_spectator) {
 842                error = gfs2_recover_journal(sdp->sd_jdesc, true);
 843                if (error) {
 844                        fs_err(sdp, "error recovering my journal: %d\n", error);
 845                        goto fail_statfs;
 846                }
 847        }
 848
 849        sdp->sd_log_idle = 1;
 850        set_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags);
 851        gfs2_glock_dq_uninit(&ji_gh);
 852        jindex = 0;
 853        INIT_WORK(&sdp->sd_freeze_work, gfs2_freeze_func);
 854        return 0;
 855
 856fail_statfs:
 857        uninit_statfs(sdp);
 858fail_jinode_gh:
 859        /* A withdraw may have done dq/uninit so now we need to check it */
 860        if (!sdp->sd_args.ar_spectator &&
 861            gfs2_holder_initialized(&sdp->sd_jinode_gh))
 862                gfs2_glock_dq_uninit(&sdp->sd_jinode_gh);
 863fail_journal_gh:
 864        if (!sdp->sd_args.ar_spectator &&
 865            gfs2_holder_initialized(&sdp->sd_journal_gh))
 866                gfs2_glock_dq_uninit(&sdp->sd_journal_gh);
 867fail_jindex:
 868        gfs2_jindex_free(sdp);
 869        if (jindex)
 870                gfs2_glock_dq_uninit(&ji_gh);
 871fail:
 872        iput(sdp->sd_jindex);
 873        return error;
 874}
 875
 876static struct lock_class_key gfs2_quota_imutex_key;
 877
 878static int init_inodes(struct gfs2_sbd *sdp, int undo)
 879{
 880        int error = 0;
 881        struct inode *master = d_inode(sdp->sd_master_dir);
 882
 883        if (undo)
 884                goto fail_qinode;
 885
 886        error = init_journal(sdp, undo);
 887        complete_all(&sdp->sd_journal_ready);
 888        if (error)
 889                goto fail;
 890
 891        /* Read in the resource index inode */
 892        sdp->sd_rindex = gfs2_lookup_simple(master, "rindex");
 893        if (IS_ERR(sdp->sd_rindex)) {
 894                error = PTR_ERR(sdp->sd_rindex);
 895                fs_err(sdp, "can't get resource index inode: %d\n", error);
 896                goto fail_journal;
 897        }
 898        sdp->sd_rindex_uptodate = 0;
 899
 900        /* Read in the quota inode */
 901        sdp->sd_quota_inode = gfs2_lookup_simple(master, "quota");
 902        if (IS_ERR(sdp->sd_quota_inode)) {
 903                error = PTR_ERR(sdp->sd_quota_inode);
 904                fs_err(sdp, "can't get quota file inode: %d\n", error);
 905                goto fail_rindex;
 906        }
 907        /*
 908         * i_rwsem on quota files is special. Since this inode is hidden system
 909         * file, we are safe to define locking ourselves.
 910         */
 911        lockdep_set_class(&sdp->sd_quota_inode->i_rwsem,
 912                          &gfs2_quota_imutex_key);
 913
 914        error = gfs2_rindex_update(sdp);
 915        if (error)
 916                goto fail_qinode;
 917
 918        return 0;
 919
 920fail_qinode:
 921        iput(sdp->sd_quota_inode);
 922fail_rindex:
 923        gfs2_clear_rgrpd(sdp);
 924        iput(sdp->sd_rindex);
 925fail_journal:
 926        init_journal(sdp, UNDO);
 927fail:
 928        return error;
 929}
 930
 931static int init_per_node(struct gfs2_sbd *sdp, int undo)
 932{
 933        struct inode *pn = NULL;
 934        char buf[30];
 935        int error = 0;
 936        struct gfs2_inode *ip;
 937        struct inode *master = d_inode(sdp->sd_master_dir);
 938
 939        if (sdp->sd_args.ar_spectator)
 940                return 0;
 941
 942        if (undo)
 943                goto fail_qc_gh;
 944
 945        pn = gfs2_lookup_simple(master, "per_node");
 946        if (IS_ERR(pn)) {
 947                error = PTR_ERR(pn);
 948                fs_err(sdp, "can't find per_node directory: %d\n", error);
 949                return error;
 950        }
 951
 952        sprintf(buf, "quota_change%u", sdp->sd_jdesc->jd_jid);
 953        sdp->sd_qc_inode = gfs2_lookup_simple(pn, buf);
 954        if (IS_ERR(sdp->sd_qc_inode)) {
 955                error = PTR_ERR(sdp->sd_qc_inode);
 956                fs_err(sdp, "can't find local \"qc\" file: %d\n", error);
 957                goto fail_ut_i;
 958        }
 959
 960        iput(pn);
 961        pn = NULL;
 962
 963        ip = GFS2_I(sdp->sd_qc_inode);
 964        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0,
 965                                   &sdp->sd_qc_gh);
 966        if (error) {
 967                fs_err(sdp, "can't lock local \"qc\" file: %d\n", error);
 968                goto fail_qc_i;
 969        }
 970
 971        return 0;
 972
 973fail_qc_gh:
 974        gfs2_glock_dq_uninit(&sdp->sd_qc_gh);
 975fail_qc_i:
 976        iput(sdp->sd_qc_inode);
 977fail_ut_i:
 978        iput(pn);
 979        return error;
 980}
 981
 982static const match_table_t nolock_tokens = {
 983        { Opt_jid, "jid=%d", },
 984        { Opt_err, NULL },
 985};
 986
 987static const struct lm_lockops nolock_ops = {
 988        .lm_proto_name = "lock_nolock",
 989        .lm_put_lock = gfs2_glock_free,
 990        .lm_tokens = &nolock_tokens,
 991};
 992
 993/**
 994 * gfs2_lm_mount - mount a locking protocol
 995 * @sdp: the filesystem
 996 * @silent: if 1, don't complain if the FS isn't a GFS2 fs
 997 *
 998 * Returns: errno
 999 */
1000
1001static int gfs2_lm_mount(struct gfs2_sbd *sdp, int silent)
1002{
1003        const struct lm_lockops *lm;
1004        struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1005        struct gfs2_args *args = &sdp->sd_args;
1006        const char *proto = sdp->sd_proto_name;
1007        const char *table = sdp->sd_table_name;
1008        char *o, *options;
1009        int ret;
1010
1011        if (!strcmp("lock_nolock", proto)) {
1012                lm = &nolock_ops;
1013                sdp->sd_args.ar_localflocks = 1;
1014#ifdef CONFIG_GFS2_FS_LOCKING_DLM
1015        } else if (!strcmp("lock_dlm", proto)) {
1016                lm = &gfs2_dlm_ops;
1017#endif
1018        } else {
1019                pr_info("can't find protocol %s\n", proto);
1020                return -ENOENT;
1021        }
1022
1023        fs_info(sdp, "Trying to join cluster \"%s\", \"%s\"\n", proto, table);
1024
1025        ls->ls_ops = lm;
1026        ls->ls_first = 1;
1027
1028        for (options = args->ar_hostdata; (o = strsep(&options, ":")); ) {
1029                substring_t tmp[MAX_OPT_ARGS];
1030                int token, option;
1031
1032                if (!o || !*o)
1033                        continue;
1034
1035                token = match_token(o, *lm->lm_tokens, tmp);
1036                switch (token) {
1037                case Opt_jid:
1038                        ret = match_int(&tmp[0], &option);
1039                        if (ret || option < 0) 
1040                                goto hostdata_error;
1041                        if (test_and_clear_bit(SDF_NOJOURNALID, &sdp->sd_flags))
1042                                ls->ls_jid = option;
1043                        break;
1044                case Opt_id:
1045                case Opt_nodir:
1046                        /* Obsolete, but left for backward compat purposes */
1047                        break;
1048                case Opt_first:
1049                        ret = match_int(&tmp[0], &option);
1050                        if (ret || (option != 0 && option != 1))
1051                                goto hostdata_error;
1052                        ls->ls_first = option;
1053                        break;
1054                case Opt_err:
1055                default:
1056hostdata_error:
1057                        fs_info(sdp, "unknown hostdata (%s)\n", o);
1058                        return -EINVAL;
1059                }
1060        }
1061
1062        if (lm->lm_mount == NULL) {
1063                fs_info(sdp, "Now mounting FS (format %u)...\n", sdp->sd_sb.sb_fs_format);
1064                complete_all(&sdp->sd_locking_init);
1065                return 0;
1066        }
1067        ret = lm->lm_mount(sdp, table);
1068        if (ret == 0)
1069                fs_info(sdp, "Joined cluster. Now mounting FS (format %u)...\n",
1070                        sdp->sd_sb.sb_fs_format);
1071        complete_all(&sdp->sd_locking_init);
1072        return ret;
1073}
1074
1075void gfs2_lm_unmount(struct gfs2_sbd *sdp)
1076{
1077        const struct lm_lockops *lm = sdp->sd_lockstruct.ls_ops;
1078        if (likely(!gfs2_withdrawn(sdp)) && lm->lm_unmount)
1079                lm->lm_unmount(sdp);
1080}
1081
1082static int wait_on_journal(struct gfs2_sbd *sdp)
1083{
1084        if (sdp->sd_lockstruct.ls_ops->lm_mount == NULL)
1085                return 0;
1086
1087        return wait_on_bit(&sdp->sd_flags, SDF_NOJOURNALID, TASK_INTERRUPTIBLE)
1088                ? -EINTR : 0;
1089}
1090
1091void gfs2_online_uevent(struct gfs2_sbd *sdp)
1092{
1093        struct super_block *sb = sdp->sd_vfs;
1094        char ro[20];
1095        char spectator[20];
1096        char *envp[] = { ro, spectator, NULL };
1097        sprintf(ro, "RDONLY=%d", sb_rdonly(sb));
1098        sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
1099        kobject_uevent_env(&sdp->sd_kobj, KOBJ_ONLINE, envp);
1100}
1101
1102static int init_threads(struct gfs2_sbd *sdp)
1103{
1104        struct task_struct *p;
1105        int error = 0;
1106
1107        p = kthread_run(gfs2_logd, sdp, "gfs2_logd");
1108        if (IS_ERR(p)) {
1109                error = PTR_ERR(p);
1110                fs_err(sdp, "can't start logd thread: %d\n", error);
1111                return error;
1112        }
1113        sdp->sd_logd_process = p;
1114
1115        p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad");
1116        if (IS_ERR(p)) {
1117                error = PTR_ERR(p);
1118                fs_err(sdp, "can't start quotad thread: %d\n", error);
1119                goto fail;
1120        }
1121        sdp->sd_quotad_process = p;
1122        return 0;
1123
1124fail:
1125        kthread_stop(sdp->sd_logd_process);
1126        sdp->sd_logd_process = NULL;
1127        return error;
1128}
1129
1130/**
1131 * gfs2_fill_super - Read in superblock
1132 * @sb: The VFS superblock
1133 * @fc: Mount options and flags
1134 *
1135 * Returns: -errno
1136 */
1137static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
1138{
1139        struct gfs2_args *args = fc->fs_private;
1140        int silent = fc->sb_flags & SB_SILENT;
1141        struct gfs2_sbd *sdp;
1142        struct gfs2_holder mount_gh;
1143        struct gfs2_holder freeze_gh;
1144        int error;
1145
1146        sdp = init_sbd(sb);
1147        if (!sdp) {
1148                pr_warn("can't alloc struct gfs2_sbd\n");
1149                return -ENOMEM;
1150        }
1151        sdp->sd_args = *args;
1152
1153        if (sdp->sd_args.ar_spectator) {
1154                sb->s_flags |= SB_RDONLY;
1155                set_bit(SDF_RORECOVERY, &sdp->sd_flags);
1156        }
1157        if (sdp->sd_args.ar_posix_acl)
1158                sb->s_flags |= SB_POSIXACL;
1159        if (sdp->sd_args.ar_nobarrier)
1160                set_bit(SDF_NOBARRIERS, &sdp->sd_flags);
1161
1162        sb->s_flags |= SB_NOSEC;
1163        sb->s_magic = GFS2_MAGIC;
1164        sb->s_op = &gfs2_super_ops;
1165        sb->s_d_op = &gfs2_dops;
1166        sb->s_export_op = &gfs2_export_ops;
1167        sb->s_qcop = &gfs2_quotactl_ops;
1168        sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP;
1169        sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE;
1170        sb->s_time_gran = 1;
1171        sb->s_maxbytes = MAX_LFS_FILESIZE;
1172
1173        /* Set up the buffer cache and fill in some fake block size values
1174           to allow us to read-in the on-disk superblock. */
1175        sdp->sd_sb.sb_bsize = sb_min_blocksize(sb, GFS2_BASIC_BLOCK);
1176        sdp->sd_sb.sb_bsize_shift = sb->s_blocksize_bits;
1177        sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift -
1178                               GFS2_BASIC_BLOCK_SHIFT;
1179        sdp->sd_fsb2bb = BIT(sdp->sd_fsb2bb_shift);
1180
1181        sdp->sd_tune.gt_logd_secs = sdp->sd_args.ar_commit;
1182        sdp->sd_tune.gt_quota_quantum = sdp->sd_args.ar_quota_quantum;
1183        if (sdp->sd_args.ar_statfs_quantum) {
1184                sdp->sd_tune.gt_statfs_slow = 0;
1185                sdp->sd_tune.gt_statfs_quantum = sdp->sd_args.ar_statfs_quantum;
1186        } else {
1187                sdp->sd_tune.gt_statfs_slow = 1;
1188                sdp->sd_tune.gt_statfs_quantum = 30;
1189        }
1190
1191        error = init_names(sdp, silent);
1192        if (error)
1193                goto fail_free;
1194
1195        snprintf(sdp->sd_fsname, sizeof(sdp->sd_fsname), "%s", sdp->sd_table_name);
1196
1197        error = gfs2_sys_fs_add(sdp);
1198        if (error)
1199                goto fail_free;
1200
1201        gfs2_create_debugfs_file(sdp);
1202
1203        error = gfs2_lm_mount(sdp, silent);
1204        if (error)
1205                goto fail_debug;
1206
1207        error = init_locking(sdp, &mount_gh, DO);
1208        if (error)
1209                goto fail_lm;
1210
1211        error = init_sb(sdp, silent);
1212        if (error)
1213                goto fail_locking;
1214
1215        /* Turn rgrplvb on by default if fs format is recent enough */
1216        if (!sdp->sd_args.ar_got_rgrplvb && sdp->sd_sb.sb_fs_format > 1801)
1217                sdp->sd_args.ar_rgrplvb = 1;
1218
1219        error = wait_on_journal(sdp);
1220        if (error)
1221                goto fail_sb;
1222
1223        /*
1224         * If user space has failed to join the cluster or some similar
1225         * failure has occurred, then the journal id will contain a
1226         * negative (error) number. This will then be returned to the
1227         * caller (of the mount syscall). We do this even for spectator
1228         * mounts (which just write a jid of 0 to indicate "ok" even though
1229         * the jid is unused in the spectator case)
1230         */
1231        if (sdp->sd_lockstruct.ls_jid < 0) {
1232                error = sdp->sd_lockstruct.ls_jid;
1233                sdp->sd_lockstruct.ls_jid = 0;
1234                goto fail_sb;
1235        }
1236
1237        if (sdp->sd_args.ar_spectator)
1238                snprintf(sdp->sd_fsname, sizeof(sdp->sd_fsname), "%s.s",
1239                         sdp->sd_table_name);
1240        else
1241                snprintf(sdp->sd_fsname, sizeof(sdp->sd_fsname), "%s.%u",
1242                         sdp->sd_table_name, sdp->sd_lockstruct.ls_jid);
1243
1244        error = init_inodes(sdp, DO);
1245        if (error)
1246                goto fail_sb;
1247
1248        error = init_per_node(sdp, DO);
1249        if (error)
1250                goto fail_inodes;
1251
1252        error = gfs2_statfs_init(sdp);
1253        if (error) {
1254                fs_err(sdp, "can't initialize statfs subsystem: %d\n", error);
1255                goto fail_per_node;
1256        }
1257
1258        if (!sb_rdonly(sb)) {
1259                error = init_threads(sdp);
1260                if (error) {
1261                        gfs2_withdraw_delayed(sdp);
1262                        goto fail_per_node;
1263                }
1264        }
1265
1266        error = gfs2_freeze_lock(sdp, &freeze_gh, 0);
1267        if (error)
1268                goto fail_per_node;
1269
1270        if (!sb_rdonly(sb))
1271                error = gfs2_make_fs_rw(sdp);
1272
1273        gfs2_freeze_unlock(&freeze_gh);
1274        if (error) {
1275                if (sdp->sd_quotad_process)
1276                        kthread_stop(sdp->sd_quotad_process);
1277                sdp->sd_quotad_process = NULL;
1278                if (sdp->sd_logd_process)
1279                        kthread_stop(sdp->sd_logd_process);
1280                sdp->sd_logd_process = NULL;
1281                fs_err(sdp, "can't make FS RW: %d\n", error);
1282                goto fail_per_node;
1283        }
1284        gfs2_glock_dq_uninit(&mount_gh);
1285        gfs2_online_uevent(sdp);
1286        return 0;
1287
1288fail_per_node:
1289        init_per_node(sdp, UNDO);
1290fail_inodes:
1291        init_inodes(sdp, UNDO);
1292fail_sb:
1293        if (sdp->sd_root_dir)
1294                dput(sdp->sd_root_dir);
1295        if (sdp->sd_master_dir)
1296                dput(sdp->sd_master_dir);
1297        if (sb->s_root)
1298                dput(sb->s_root);
1299        sb->s_root = NULL;
1300fail_locking:
1301        init_locking(sdp, &mount_gh, UNDO);
1302fail_lm:
1303        complete_all(&sdp->sd_journal_ready);
1304        gfs2_gl_hash_clear(sdp);
1305        gfs2_lm_unmount(sdp);
1306fail_debug:
1307        gfs2_delete_debugfs_file(sdp);
1308        gfs2_sys_fs_del(sdp);
1309fail_free:
1310        free_sbd(sdp);
1311        sb->s_fs_info = NULL;
1312        return error;
1313}
1314
1315/**
1316 * gfs2_get_tree - Get the GFS2 superblock and root directory
1317 * @fc: The filesystem context
1318 *
1319 * Returns: 0 or -errno on error
1320 */
1321static int gfs2_get_tree(struct fs_context *fc)
1322{
1323        struct gfs2_args *args = fc->fs_private;
1324        struct gfs2_sbd *sdp;
1325        int error;
1326
1327        error = get_tree_bdev(fc, gfs2_fill_super);
1328        if (error)
1329                return error;
1330
1331        sdp = fc->root->d_sb->s_fs_info;
1332        dput(fc->root);
1333        if (args->ar_meta)
1334                fc->root = dget(sdp->sd_master_dir);
1335        else
1336                fc->root = dget(sdp->sd_root_dir);
1337        return 0;
1338}
1339
1340static void gfs2_fc_free(struct fs_context *fc)
1341{
1342        struct gfs2_args *args = fc->fs_private;
1343
1344        kfree(args);
1345}
1346
1347enum gfs2_param {
1348        Opt_lockproto,
1349        Opt_locktable,
1350        Opt_hostdata,
1351        Opt_spectator,
1352        Opt_ignore_local_fs,
1353        Opt_localflocks,
1354        Opt_localcaching,
1355        Opt_debug,
1356        Opt_upgrade,
1357        Opt_acl,
1358        Opt_quota,
1359        Opt_quota_flag,
1360        Opt_suiddir,
1361        Opt_data,
1362        Opt_meta,
1363        Opt_discard,
1364        Opt_commit,
1365        Opt_errors,
1366        Opt_statfs_quantum,
1367        Opt_statfs_percent,
1368        Opt_quota_quantum,
1369        Opt_barrier,
1370        Opt_rgrplvb,
1371        Opt_loccookie,
1372};
1373
1374static const struct constant_table gfs2_param_quota[] = {
1375        {"off",        GFS2_QUOTA_OFF},
1376        {"account",    GFS2_QUOTA_ACCOUNT},
1377        {"on",         GFS2_QUOTA_ON},
1378        {}
1379};
1380
1381enum opt_data {
1382        Opt_data_writeback = GFS2_DATA_WRITEBACK,
1383        Opt_data_ordered   = GFS2_DATA_ORDERED,
1384};
1385
1386static const struct constant_table gfs2_param_data[] = {
1387        {"writeback",  Opt_data_writeback },
1388        {"ordered",    Opt_data_ordered },
1389        {}
1390};
1391
1392enum opt_errors {
1393        Opt_errors_withdraw = GFS2_ERRORS_WITHDRAW,
1394        Opt_errors_panic    = GFS2_ERRORS_PANIC,
1395};
1396
1397static const struct constant_table gfs2_param_errors[] = {
1398        {"withdraw",   Opt_errors_withdraw },
1399        {"panic",      Opt_errors_panic },
1400        {}
1401};
1402
1403static const struct fs_parameter_spec gfs2_fs_parameters[] = {
1404        fsparam_string ("lockproto",          Opt_lockproto),
1405        fsparam_string ("locktable",          Opt_locktable),
1406        fsparam_string ("hostdata",           Opt_hostdata),
1407        fsparam_flag   ("spectator",          Opt_spectator),
1408        fsparam_flag   ("norecovery",         Opt_spectator),
1409        fsparam_flag   ("ignore_local_fs",    Opt_ignore_local_fs),
1410        fsparam_flag   ("localflocks",        Opt_localflocks),
1411        fsparam_flag   ("localcaching",       Opt_localcaching),
1412        fsparam_flag_no("debug",              Opt_debug),
1413        fsparam_flag   ("upgrade",            Opt_upgrade),
1414        fsparam_flag_no("acl",                Opt_acl),
1415        fsparam_flag_no("suiddir",            Opt_suiddir),
1416        fsparam_enum   ("data",               Opt_data, gfs2_param_data),
1417        fsparam_flag   ("meta",               Opt_meta),
1418        fsparam_flag_no("discard",            Opt_discard),
1419        fsparam_s32    ("commit",             Opt_commit),
1420        fsparam_enum   ("errors",             Opt_errors, gfs2_param_errors),
1421        fsparam_s32    ("statfs_quantum",     Opt_statfs_quantum),
1422        fsparam_s32    ("statfs_percent",     Opt_statfs_percent),
1423        fsparam_s32    ("quota_quantum",      Opt_quota_quantum),
1424        fsparam_flag_no("barrier",            Opt_barrier),
1425        fsparam_flag_no("rgrplvb",            Opt_rgrplvb),
1426        fsparam_flag_no("loccookie",          Opt_loccookie),
1427        /* quota can be a flag or an enum so it gets special treatment */
1428        fsparam_flag_no("quota",              Opt_quota_flag),
1429        fsparam_enum("quota",                 Opt_quota, gfs2_param_quota),
1430        {}
1431};
1432
1433/* Parse a single mount parameter */
1434static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
1435{
1436        struct gfs2_args *args = fc->fs_private;
1437        struct fs_parse_result result;
1438        int o;
1439
1440        o = fs_parse(fc, gfs2_fs_parameters, param, &result);
1441        if (o < 0)
1442                return o;
1443
1444        switch (o) {
1445        case Opt_lockproto:
1446                strlcpy(args->ar_lockproto, param->string, GFS2_LOCKNAME_LEN);
1447                break;
1448        case Opt_locktable:
1449                strlcpy(args->ar_locktable, param->string, GFS2_LOCKNAME_LEN);
1450                break;
1451        case Opt_hostdata:
1452                strlcpy(args->ar_hostdata, param->string, GFS2_LOCKNAME_LEN);
1453                break;
1454        case Opt_spectator:
1455                args->ar_spectator = 1;
1456                break;
1457        case Opt_ignore_local_fs:
1458                /* Retained for backwards compat only */
1459                break;
1460        case Opt_localflocks:
1461                args->ar_localflocks = 1;
1462                break;
1463        case Opt_localcaching:
1464                /* Retained for backwards compat only */
1465                break;
1466        case Opt_debug:
1467                if (result.boolean && args->ar_errors == GFS2_ERRORS_PANIC)
1468                        return invalfc(fc, "-o debug and -o errors=panic are mutually exclusive");
1469                args->ar_debug = result.boolean;
1470                break;
1471        case Opt_upgrade:
1472                /* Retained for backwards compat only */
1473                break;
1474        case Opt_acl:
1475                args->ar_posix_acl = result.boolean;
1476                break;
1477        case Opt_quota_flag:
1478                args->ar_quota = result.negated ? GFS2_QUOTA_OFF : GFS2_QUOTA_ON;
1479                break;
1480        case Opt_quota:
1481                args->ar_quota = result.int_32;
1482                break;
1483        case Opt_suiddir:
1484                args->ar_suiddir = result.boolean;
1485                break;
1486        case Opt_data:
1487                /* The uint_32 result maps directly to GFS2_DATA_* */
1488                args->ar_data = result.uint_32;
1489                break;
1490        case Opt_meta:
1491                args->ar_meta = 1;
1492                break;
1493        case Opt_discard:
1494                args->ar_discard = result.boolean;
1495                break;
1496        case Opt_commit:
1497                if (result.int_32 <= 0)
1498                        return invalfc(fc, "commit mount option requires a positive numeric argument");
1499                args->ar_commit = result.int_32;
1500                break;
1501        case Opt_statfs_quantum:
1502                if (result.int_32 < 0)
1503                        return invalfc(fc, "statfs_quantum mount option requires a non-negative numeric argument");
1504                args->ar_statfs_quantum = result.int_32;
1505                break;
1506        case Opt_quota_quantum:
1507                if (result.int_32 <= 0)
1508                        return invalfc(fc, "quota_quantum mount option requires a positive numeric argument");
1509                args->ar_quota_quantum = result.int_32;
1510                break;
1511        case Opt_statfs_percent:
1512                if (result.int_32 < 0 || result.int_32 > 100)
1513                        return invalfc(fc, "statfs_percent mount option requires a numeric argument between 0 and 100");
1514                args->ar_statfs_percent = result.int_32;
1515                break;
1516        case Opt_errors:
1517                if (args->ar_debug && result.uint_32 == GFS2_ERRORS_PANIC)
1518                        return invalfc(fc, "-o debug and -o errors=panic are mutually exclusive");
1519                args->ar_errors = result.uint_32;
1520                break;
1521        case Opt_barrier:
1522                args->ar_nobarrier = result.boolean;
1523                break;
1524        case Opt_rgrplvb:
1525                args->ar_rgrplvb = result.boolean;
1526                args->ar_got_rgrplvb = 1;
1527                break;
1528        case Opt_loccookie:
1529                args->ar_loccookie = result.boolean;
1530                break;
1531        default:
1532                return invalfc(fc, "invalid mount option: %s", param->key);
1533        }
1534        return 0;
1535}
1536
1537static int gfs2_reconfigure(struct fs_context *fc)
1538{
1539        struct super_block *sb = fc->root->d_sb;
1540        struct gfs2_sbd *sdp = sb->s_fs_info;
1541        struct gfs2_args *oldargs = &sdp->sd_args;
1542        struct gfs2_args *newargs = fc->fs_private;
1543        struct gfs2_tune *gt = &sdp->sd_tune;
1544        int error = 0;
1545
1546        sync_filesystem(sb);
1547
1548        spin_lock(&gt->gt_spin);
1549        oldargs->ar_commit = gt->gt_logd_secs;
1550        oldargs->ar_quota_quantum = gt->gt_quota_quantum;
1551        if (gt->gt_statfs_slow)
1552                oldargs->ar_statfs_quantum = 0;
1553        else
1554                oldargs->ar_statfs_quantum = gt->gt_statfs_quantum;
1555        spin_unlock(&gt->gt_spin);
1556
1557        if (strcmp(newargs->ar_lockproto, oldargs->ar_lockproto)) {
1558                errorfc(fc, "reconfiguration of locking protocol not allowed");
1559                return -EINVAL;
1560        }
1561        if (strcmp(newargs->ar_locktable, oldargs->ar_locktable)) {
1562                errorfc(fc, "reconfiguration of lock table not allowed");
1563                return -EINVAL;
1564        }
1565        if (strcmp(newargs->ar_hostdata, oldargs->ar_hostdata)) {
1566                errorfc(fc, "reconfiguration of host data not allowed");
1567                return -EINVAL;
1568        }
1569        if (newargs->ar_spectator != oldargs->ar_spectator) {
1570                errorfc(fc, "reconfiguration of spectator mode not allowed");
1571                return -EINVAL;
1572        }
1573        if (newargs->ar_localflocks != oldargs->ar_localflocks) {
1574                errorfc(fc, "reconfiguration of localflocks not allowed");
1575                return -EINVAL;
1576        }
1577        if (newargs->ar_meta != oldargs->ar_meta) {
1578                errorfc(fc, "switching between gfs2 and gfs2meta not allowed");
1579                return -EINVAL;
1580        }
1581        if (oldargs->ar_spectator)
1582                fc->sb_flags |= SB_RDONLY;
1583
1584        if ((sb->s_flags ^ fc->sb_flags) & SB_RDONLY) {
1585                struct gfs2_holder freeze_gh;
1586
1587                error = gfs2_freeze_lock(sdp, &freeze_gh, 0);
1588                if (error)
1589                        return -EINVAL;
1590
1591                if (fc->sb_flags & SB_RDONLY) {
1592                        gfs2_make_fs_ro(sdp);
1593                } else {
1594                        error = gfs2_make_fs_rw(sdp);
1595                        if (error)
1596                                errorfc(fc, "unable to remount read-write");
1597                }
1598                gfs2_freeze_unlock(&freeze_gh);
1599        }
1600        sdp->sd_args = *newargs;
1601
1602        if (sdp->sd_args.ar_posix_acl)
1603                sb->s_flags |= SB_POSIXACL;
1604        else
1605                sb->s_flags &= ~SB_POSIXACL;
1606        if (sdp->sd_args.ar_nobarrier)
1607                set_bit(SDF_NOBARRIERS, &sdp->sd_flags);
1608        else
1609                clear_bit(SDF_NOBARRIERS, &sdp->sd_flags);
1610        spin_lock(&gt->gt_spin);
1611        gt->gt_logd_secs = newargs->ar_commit;
1612        gt->gt_quota_quantum = newargs->ar_quota_quantum;
1613        if (newargs->ar_statfs_quantum) {
1614                gt->gt_statfs_slow = 0;
1615                gt->gt_statfs_quantum = newargs->ar_statfs_quantum;
1616        }
1617        else {
1618                gt->gt_statfs_slow = 1;
1619                gt->gt_statfs_quantum = 30;
1620        }
1621        spin_unlock(&gt->gt_spin);
1622
1623        gfs2_online_uevent(sdp);
1624        return error;
1625}
1626
1627static const struct fs_context_operations gfs2_context_ops = {
1628        .free        = gfs2_fc_free,
1629        .parse_param = gfs2_parse_param,
1630        .get_tree    = gfs2_get_tree,
1631        .reconfigure = gfs2_reconfigure,
1632};
1633
1634/* Set up the filesystem mount context */
1635static int gfs2_init_fs_context(struct fs_context *fc)
1636{
1637        struct gfs2_args *args;
1638
1639        args = kmalloc(sizeof(*args), GFP_KERNEL);
1640        if (args == NULL)
1641                return -ENOMEM;
1642
1643        if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) {
1644                struct gfs2_sbd *sdp = fc->root->d_sb->s_fs_info;
1645
1646                *args = sdp->sd_args;
1647        } else {
1648                memset(args, 0, sizeof(*args));
1649                args->ar_quota = GFS2_QUOTA_DEFAULT;
1650                args->ar_data = GFS2_DATA_DEFAULT;
1651                args->ar_commit = 30;
1652                args->ar_statfs_quantum = 30;
1653                args->ar_quota_quantum = 60;
1654                args->ar_errors = GFS2_ERRORS_DEFAULT;
1655        }
1656        fc->fs_private = args;
1657        fc->ops = &gfs2_context_ops;
1658        return 0;
1659}
1660
1661static int set_meta_super(struct super_block *s, struct fs_context *fc)
1662{
1663        return -EINVAL;
1664}
1665
1666static int test_meta_super(struct super_block *s, struct fs_context *fc)
1667{
1668        return (fc->sget_key == s->s_bdev);
1669}
1670
1671static int gfs2_meta_get_tree(struct fs_context *fc)
1672{
1673        struct super_block *s;
1674        struct gfs2_sbd *sdp;
1675        struct path path;
1676        int error;
1677
1678        if (!fc->source || !*fc->source)
1679                return -EINVAL;
1680
1681        error = kern_path(fc->source, LOOKUP_FOLLOW, &path);
1682        if (error) {
1683                pr_warn("path_lookup on %s returned error %d\n",
1684                        fc->source, error);
1685                return error;
1686        }
1687        fc->fs_type = &gfs2_fs_type;
1688        fc->sget_key = path.dentry->d_sb->s_bdev;
1689        s = sget_fc(fc, test_meta_super, set_meta_super);
1690        path_put(&path);
1691        if (IS_ERR(s)) {
1692                pr_warn("gfs2 mount does not exist\n");
1693                return PTR_ERR(s);
1694        }
1695        if ((fc->sb_flags ^ s->s_flags) & SB_RDONLY) {
1696                deactivate_locked_super(s);
1697                return -EBUSY;
1698        }
1699        sdp = s->s_fs_info;
1700        fc->root = dget(sdp->sd_master_dir);
1701        return 0;
1702}
1703
1704static const struct fs_context_operations gfs2_meta_context_ops = {
1705        .free        = gfs2_fc_free,
1706        .get_tree    = gfs2_meta_get_tree,
1707};
1708
1709static int gfs2_meta_init_fs_context(struct fs_context *fc)
1710{
1711        int ret = gfs2_init_fs_context(fc);
1712
1713        if (ret)
1714                return ret;
1715
1716        fc->ops = &gfs2_meta_context_ops;
1717        return 0;
1718}
1719
1720static void gfs2_kill_sb(struct super_block *sb)
1721{
1722        struct gfs2_sbd *sdp = sb->s_fs_info;
1723
1724        if (sdp == NULL) {
1725                kill_block_super(sb);
1726                return;
1727        }
1728
1729        gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_SYNC | GFS2_LFC_KILL_SB);
1730        dput(sdp->sd_root_dir);
1731        dput(sdp->sd_master_dir);
1732        sdp->sd_root_dir = NULL;
1733        sdp->sd_master_dir = NULL;
1734        shrink_dcache_sb(sb);
1735        kill_block_super(sb);
1736}
1737
1738struct file_system_type gfs2_fs_type = {
1739        .name = "gfs2",
1740        .fs_flags = FS_REQUIRES_DEV,
1741        .init_fs_context = gfs2_init_fs_context,
1742        .parameters = gfs2_fs_parameters,
1743        .kill_sb = gfs2_kill_sb,
1744        .owner = THIS_MODULE,
1745};
1746MODULE_ALIAS_FS("gfs2");
1747
1748struct file_system_type gfs2meta_fs_type = {
1749        .name = "gfs2meta",
1750        .fs_flags = FS_REQUIRES_DEV,
1751        .init_fs_context = gfs2_meta_init_fs_context,
1752        .owner = THIS_MODULE,
1753};
1754MODULE_ALIAS_FS("gfs2meta");
1755