linux/fs/gfs2/super.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   3 * Copyright (C) 2004-2007 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/bio.h>
  11#include <linux/sched.h>
  12#include <linux/slab.h>
  13#include <linux/spinlock.h>
  14#include <linux/completion.h>
  15#include <linux/buffer_head.h>
  16#include <linux/statfs.h>
  17#include <linux/seq_file.h>
  18#include <linux/mount.h>
  19#include <linux/kthread.h>
  20#include <linux/delay.h>
  21#include <linux/gfs2_ondisk.h>
  22#include <linux/crc32.h>
  23#include <linux/time.h>
  24
  25#include "gfs2.h"
  26#include "incore.h"
  27#include "bmap.h"
  28#include "dir.h"
  29#include "glock.h"
  30#include "glops.h"
  31#include "inode.h"
  32#include "log.h"
  33#include "meta_io.h"
  34#include "quota.h"
  35#include "recovery.h"
  36#include "rgrp.h"
  37#include "super.h"
  38#include "trans.h"
  39#include "util.h"
  40#include "sys.h"
  41#include "xattr.h"
  42
  43#define args_neq(a1, a2, x) ((a1)->ar_##x != (a2)->ar_##x)
  44
  45enum {
  46        Opt_lockproto,
  47        Opt_locktable,
  48        Opt_hostdata,
  49        Opt_spectator,
  50        Opt_ignore_local_fs,
  51        Opt_localflocks,
  52        Opt_localcaching,
  53        Opt_debug,
  54        Opt_nodebug,
  55        Opt_upgrade,
  56        Opt_acl,
  57        Opt_noacl,
  58        Opt_quota_off,
  59        Opt_quota_account,
  60        Opt_quota_on,
  61        Opt_quota,
  62        Opt_noquota,
  63        Opt_suiddir,
  64        Opt_nosuiddir,
  65        Opt_data_writeback,
  66        Opt_data_ordered,
  67        Opt_meta,
  68        Opt_discard,
  69        Opt_nodiscard,
  70        Opt_commit,
  71        Opt_err_withdraw,
  72        Opt_err_panic,
  73        Opt_error,
  74};
  75
  76static const match_table_t tokens = {
  77        {Opt_lockproto, "lockproto=%s"},
  78        {Opt_locktable, "locktable=%s"},
  79        {Opt_hostdata, "hostdata=%s"},
  80        {Opt_spectator, "spectator"},
  81        {Opt_ignore_local_fs, "ignore_local_fs"},
  82        {Opt_localflocks, "localflocks"},
  83        {Opt_localcaching, "localcaching"},
  84        {Opt_debug, "debug"},
  85        {Opt_nodebug, "nodebug"},
  86        {Opt_upgrade, "upgrade"},
  87        {Opt_acl, "acl"},
  88        {Opt_noacl, "noacl"},
  89        {Opt_quota_off, "quota=off"},
  90        {Opt_quota_account, "quota=account"},
  91        {Opt_quota_on, "quota=on"},
  92        {Opt_quota, "quota"},
  93        {Opt_noquota, "noquota"},
  94        {Opt_suiddir, "suiddir"},
  95        {Opt_nosuiddir, "nosuiddir"},
  96        {Opt_data_writeback, "data=writeback"},
  97        {Opt_data_ordered, "data=ordered"},
  98        {Opt_meta, "meta"},
  99        {Opt_discard, "discard"},
 100        {Opt_nodiscard, "nodiscard"},
 101        {Opt_commit, "commit=%d"},
 102        {Opt_err_withdraw, "errors=withdraw"},
 103        {Opt_err_panic, "errors=panic"},
 104        {Opt_error, NULL}
 105};
 106
 107/**
 108 * gfs2_mount_args - Parse mount options
 109 * @sdp:
 110 * @data:
 111 *
 112 * Return: errno
 113 */
 114
 115int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options)
 116{
 117        char *o;
 118        int token;
 119        substring_t tmp[MAX_OPT_ARGS];
 120        int rv;
 121
 122        /* Split the options into tokens with the "," character and
 123           process them */
 124
 125        while (1) {
 126                o = strsep(&options, ",");
 127                if (o == NULL)
 128                        break;
 129                if (*o == '\0')
 130                        continue;
 131
 132                token = match_token(o, tokens, tmp);
 133                switch (token) {
 134                case Opt_lockproto:
 135                        match_strlcpy(args->ar_lockproto, &tmp[0],
 136                                      GFS2_LOCKNAME_LEN);
 137                        break;
 138                case Opt_locktable:
 139                        match_strlcpy(args->ar_locktable, &tmp[0],
 140                                      GFS2_LOCKNAME_LEN);
 141                        break;
 142                case Opt_hostdata:
 143                        match_strlcpy(args->ar_hostdata, &tmp[0],
 144                                      GFS2_LOCKNAME_LEN);
 145                        break;
 146                case Opt_spectator:
 147                        args->ar_spectator = 1;
 148                        break;
 149                case Opt_ignore_local_fs:
 150                        args->ar_ignore_local_fs = 1;
 151                        break;
 152                case Opt_localflocks:
 153                        args->ar_localflocks = 1;
 154                        break;
 155                case Opt_localcaching:
 156                        args->ar_localcaching = 1;
 157                        break;
 158                case Opt_debug:
 159                        if (args->ar_errors == GFS2_ERRORS_PANIC) {
 160                                fs_info(sdp, "-o debug and -o errors=panic "
 161                                       "are mutually exclusive.\n");
 162                                return -EINVAL;
 163                        }
 164                        args->ar_debug = 1;
 165                        break;
 166                case Opt_nodebug:
 167                        args->ar_debug = 0;
 168                        break;
 169                case Opt_upgrade:
 170                        args->ar_upgrade = 1;
 171                        break;
 172                case Opt_acl:
 173                        args->ar_posix_acl = 1;
 174                        break;
 175                case Opt_noacl:
 176                        args->ar_posix_acl = 0;
 177                        break;
 178                case Opt_quota_off:
 179                case Opt_noquota:
 180                        args->ar_quota = GFS2_QUOTA_OFF;
 181                        break;
 182                case Opt_quota_account:
 183                        args->ar_quota = GFS2_QUOTA_ACCOUNT;
 184                        break;
 185                case Opt_quota_on:
 186                case Opt_quota:
 187                        args->ar_quota = GFS2_QUOTA_ON;
 188                        break;
 189                case Opt_suiddir:
 190                        args->ar_suiddir = 1;
 191                        break;
 192                case Opt_nosuiddir:
 193                        args->ar_suiddir = 0;
 194                        break;
 195                case Opt_data_writeback:
 196                        args->ar_data = GFS2_DATA_WRITEBACK;
 197                        break;
 198                case Opt_data_ordered:
 199                        args->ar_data = GFS2_DATA_ORDERED;
 200                        break;
 201                case Opt_meta:
 202                        args->ar_meta = 1;
 203                        break;
 204                case Opt_discard:
 205                        args->ar_discard = 1;
 206                        break;
 207                case Opt_nodiscard:
 208                        args->ar_discard = 0;
 209                        break;
 210                case Opt_commit:
 211                        rv = match_int(&tmp[0], &args->ar_commit);
 212                        if (rv || args->ar_commit <= 0) {
 213                                fs_info(sdp, "commit mount option requires a positive numeric argument\n");
 214                                return rv ? rv : -EINVAL;
 215                        }
 216                        break;
 217                case Opt_err_withdraw:
 218                        args->ar_errors = GFS2_ERRORS_WITHDRAW;
 219                        break;
 220                case Opt_err_panic:
 221                        if (args->ar_debug) {
 222                                fs_info(sdp, "-o debug and -o errors=panic "
 223                                        "are mutually exclusive.\n");
 224                                return -EINVAL;
 225                        }
 226                        args->ar_errors = GFS2_ERRORS_PANIC;
 227                        break;
 228                case Opt_error:
 229                default:
 230                        fs_info(sdp, "invalid mount option: %s\n", o);
 231                        return -EINVAL;
 232                }
 233        }
 234
 235        return 0;
 236}
 237
 238/**
 239 * gfs2_jindex_free - Clear all the journal index information
 240 * @sdp: The GFS2 superblock
 241 *
 242 */
 243
 244void gfs2_jindex_free(struct gfs2_sbd *sdp)
 245{
 246        struct list_head list, *head;
 247        struct gfs2_jdesc *jd;
 248        struct gfs2_journal_extent *jext;
 249
 250        spin_lock(&sdp->sd_jindex_spin);
 251        list_add(&list, &sdp->sd_jindex_list);
 252        list_del_init(&sdp->sd_jindex_list);
 253        sdp->sd_journals = 0;
 254        spin_unlock(&sdp->sd_jindex_spin);
 255
 256        while (!list_empty(&list)) {
 257                jd = list_entry(list.next, struct gfs2_jdesc, jd_list);
 258                head = &jd->extent_list;
 259                while (!list_empty(head)) {
 260                        jext = list_entry(head->next,
 261                                          struct gfs2_journal_extent,
 262                                          extent_list);
 263                        list_del(&jext->extent_list);
 264                        kfree(jext);
 265                }
 266                list_del(&jd->jd_list);
 267                iput(jd->jd_inode);
 268                kfree(jd);
 269        }
 270}
 271
 272static struct gfs2_jdesc *jdesc_find_i(struct list_head *head, unsigned int jid)
 273{
 274        struct gfs2_jdesc *jd;
 275        int found = 0;
 276
 277        list_for_each_entry(jd, head, jd_list) {
 278                if (jd->jd_jid == jid) {
 279                        found = 1;
 280                        break;
 281                }
 282        }
 283
 284        if (!found)
 285                jd = NULL;
 286
 287        return jd;
 288}
 289
 290struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid)
 291{
 292        struct gfs2_jdesc *jd;
 293
 294        spin_lock(&sdp->sd_jindex_spin);
 295        jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
 296        spin_unlock(&sdp->sd_jindex_spin);
 297
 298        return jd;
 299}
 300
 301int gfs2_jdesc_check(struct gfs2_jdesc *jd)
 302{
 303        struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
 304        struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode);
 305        int ar;
 306        int error;
 307
 308        if (ip->i_disksize < (8 << 20) || ip->i_disksize > (1 << 30) ||
 309            (ip->i_disksize & (sdp->sd_sb.sb_bsize - 1))) {
 310                gfs2_consist_inode(ip);
 311                return -EIO;
 312        }
 313        jd->jd_blocks = ip->i_disksize >> sdp->sd_sb.sb_bsize_shift;
 314
 315        error = gfs2_write_alloc_required(ip, 0, ip->i_disksize, &ar);
 316        if (!error && ar) {
 317                gfs2_consist_inode(ip);
 318                error = -EIO;
 319        }
 320
 321        return error;
 322}
 323
 324/**
 325 * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
 326 * @sdp: the filesystem
 327 *
 328 * Returns: errno
 329 */
 330
 331int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
 332{
 333        struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode);
 334        struct gfs2_glock *j_gl = ip->i_gl;
 335        struct gfs2_holder t_gh;
 336        struct gfs2_log_header_host head;
 337        int error;
 338
 339        error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, 0, &t_gh);
 340        if (error)
 341                return error;
 342
 343        j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
 344
 345        error = gfs2_find_jhead(sdp->sd_jdesc, &head);
 346        if (error)
 347                goto fail;
 348
 349        if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
 350                gfs2_consist(sdp);
 351                error = -EIO;
 352                goto fail;
 353        }
 354
 355        /*  Initialize some head of the log stuff  */
 356        sdp->sd_log_sequence = head.lh_sequence + 1;
 357        gfs2_log_pointers_init(sdp, head.lh_blkno);
 358
 359        error = gfs2_quota_init(sdp);
 360        if (error)
 361                goto fail;
 362
 363        set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
 364
 365        gfs2_glock_dq_uninit(&t_gh);
 366
 367        return 0;
 368
 369fail:
 370        t_gh.gh_flags |= GL_NOCACHE;
 371        gfs2_glock_dq_uninit(&t_gh);
 372
 373        return error;
 374}
 375
 376void gfs2_statfs_change_in(struct gfs2_statfs_change_host *sc, const void *buf)
 377{
 378        const struct gfs2_statfs_change *str = buf;
 379
 380        sc->sc_total = be64_to_cpu(str->sc_total);
 381        sc->sc_free = be64_to_cpu(str->sc_free);
 382        sc->sc_dinodes = be64_to_cpu(str->sc_dinodes);
 383}
 384
 385static void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf)
 386{
 387        struct gfs2_statfs_change *str = buf;
 388
 389        str->sc_total = cpu_to_be64(sc->sc_total);
 390        str->sc_free = cpu_to_be64(sc->sc_free);
 391        str->sc_dinodes = cpu_to_be64(sc->sc_dinodes);
 392}
 393
 394int gfs2_statfs_init(struct gfs2_sbd *sdp)
 395{
 396        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
 397        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
 398        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 399        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 400        struct buffer_head *m_bh, *l_bh;
 401        struct gfs2_holder gh;
 402        int error;
 403
 404        error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
 405                                   &gh);
 406        if (error)
 407                return error;
 408
 409        error = gfs2_meta_inode_buffer(m_ip, &m_bh);
 410        if (error)
 411                goto out;
 412
 413        if (sdp->sd_args.ar_spectator) {
 414                spin_lock(&sdp->sd_statfs_spin);
 415                gfs2_statfs_change_in(m_sc, m_bh->b_data +
 416                                      sizeof(struct gfs2_dinode));
 417                spin_unlock(&sdp->sd_statfs_spin);
 418        } else {
 419                error = gfs2_meta_inode_buffer(l_ip, &l_bh);
 420                if (error)
 421                        goto out_m_bh;
 422
 423                spin_lock(&sdp->sd_statfs_spin);
 424                gfs2_statfs_change_in(m_sc, m_bh->b_data +
 425                                      sizeof(struct gfs2_dinode));
 426                gfs2_statfs_change_in(l_sc, l_bh->b_data +
 427                                      sizeof(struct gfs2_dinode));
 428                spin_unlock(&sdp->sd_statfs_spin);
 429
 430                brelse(l_bh);
 431        }
 432
 433out_m_bh:
 434        brelse(m_bh);
 435out:
 436        gfs2_glock_dq_uninit(&gh);
 437        return 0;
 438}
 439
 440void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
 441                        s64 dinodes)
 442{
 443        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 444        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 445        struct buffer_head *l_bh;
 446        int error;
 447
 448        error = gfs2_meta_inode_buffer(l_ip, &l_bh);
 449        if (error)
 450                return;
 451
 452        gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
 453
 454        spin_lock(&sdp->sd_statfs_spin);
 455        l_sc->sc_total += total;
 456        l_sc->sc_free += free;
 457        l_sc->sc_dinodes += dinodes;
 458        gfs2_statfs_change_out(l_sc, l_bh->b_data + sizeof(struct gfs2_dinode));
 459        spin_unlock(&sdp->sd_statfs_spin);
 460
 461        brelse(l_bh);
 462}
 463
 464void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
 465                   struct buffer_head *l_bh)
 466{
 467        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
 468        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 469        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
 470        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 471
 472        gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
 473
 474        spin_lock(&sdp->sd_statfs_spin);
 475        m_sc->sc_total += l_sc->sc_total;
 476        m_sc->sc_free += l_sc->sc_free;
 477        m_sc->sc_dinodes += l_sc->sc_dinodes;
 478        memset(l_sc, 0, sizeof(struct gfs2_statfs_change));
 479        memset(l_bh->b_data + sizeof(struct gfs2_dinode),
 480               0, sizeof(struct gfs2_statfs_change));
 481        spin_unlock(&sdp->sd_statfs_spin);
 482
 483        gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
 484        gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
 485}
 486
 487int gfs2_statfs_sync(struct gfs2_sbd *sdp)
 488{
 489        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
 490        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 491        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
 492        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 493        struct gfs2_holder gh;
 494        struct buffer_head *m_bh, *l_bh;
 495        int error;
 496
 497        error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
 498                                   &gh);
 499        if (error)
 500                return error;
 501
 502        error = gfs2_meta_inode_buffer(m_ip, &m_bh);
 503        if (error)
 504                goto out;
 505
 506        spin_lock(&sdp->sd_statfs_spin);
 507        gfs2_statfs_change_in(m_sc, m_bh->b_data +
 508                              sizeof(struct gfs2_dinode));
 509        if (!l_sc->sc_total && !l_sc->sc_free && !l_sc->sc_dinodes) {
 510                spin_unlock(&sdp->sd_statfs_spin);
 511                goto out_bh;
 512        }
 513        spin_unlock(&sdp->sd_statfs_spin);
 514
 515        error = gfs2_meta_inode_buffer(l_ip, &l_bh);
 516        if (error)
 517                goto out_bh;
 518
 519        error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
 520        if (error)
 521                goto out_bh2;
 522
 523        update_statfs(sdp, m_bh, l_bh);
 524
 525        gfs2_trans_end(sdp);
 526
 527out_bh2:
 528        brelse(l_bh);
 529out_bh:
 530        brelse(m_bh);
 531out:
 532        gfs2_glock_dq_uninit(&gh);
 533        return error;
 534}
 535
 536struct lfcc {
 537        struct list_head list;
 538        struct gfs2_holder gh;
 539};
 540
 541/**
 542 * gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all
 543 *                            journals are clean
 544 * @sdp: the file system
 545 * @state: the state to put the transaction lock into
 546 * @t_gh: the hold on the transaction lock
 547 *
 548 * Returns: errno
 549 */
 550
 551static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp,
 552                                    struct gfs2_holder *t_gh)
 553{
 554        struct gfs2_inode *ip;
 555        struct gfs2_jdesc *jd;
 556        struct lfcc *lfcc;
 557        LIST_HEAD(list);
 558        struct gfs2_log_header_host lh;
 559        int error;
 560
 561        list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
 562                lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL);
 563                if (!lfcc) {
 564                        error = -ENOMEM;
 565                        goto out;
 566                }
 567                ip = GFS2_I(jd->jd_inode);
 568                error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &lfcc->gh);
 569                if (error) {
 570                        kfree(lfcc);
 571                        goto out;
 572                }
 573                list_add(&lfcc->list, &list);
 574        }
 575
 576        error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_DEFERRED,
 577                                   GL_NOCACHE, t_gh);
 578
 579        list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
 580                error = gfs2_jdesc_check(jd);
 581                if (error)
 582                        break;
 583                error = gfs2_find_jhead(jd, &lh);
 584                if (error)
 585                        break;
 586                if (!(lh.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
 587                        error = -EBUSY;
 588                        break;
 589                }
 590        }
 591
 592        if (error)
 593                gfs2_glock_dq_uninit(t_gh);
 594
 595out:
 596        while (!list_empty(&list)) {
 597                lfcc = list_entry(list.next, struct lfcc, list);
 598                list_del(&lfcc->list);
 599                gfs2_glock_dq_uninit(&lfcc->gh);
 600                kfree(lfcc);
 601        }
 602        return error;
 603}
 604
 605/**
 606 * gfs2_freeze_fs - freezes the file system
 607 * @sdp: the file system
 608 *
 609 * This function flushes data and meta data for all machines by
 610 * aquiring the transaction log exclusively.  All journals are
 611 * ensured to be in a clean state as well.
 612 *
 613 * Returns: errno
 614 */
 615
 616int gfs2_freeze_fs(struct gfs2_sbd *sdp)
 617{
 618        int error = 0;
 619
 620        mutex_lock(&sdp->sd_freeze_lock);
 621
 622        if (!sdp->sd_freeze_count++) {
 623                error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
 624                if (error)
 625                        sdp->sd_freeze_count--;
 626        }
 627
 628        mutex_unlock(&sdp->sd_freeze_lock);
 629
 630        return error;
 631}
 632
 633/**
 634 * gfs2_unfreeze_fs - unfreezes the file system
 635 * @sdp: the file system
 636 *
 637 * This function allows the file system to proceed by unlocking
 638 * the exclusively held transaction lock.  Other GFS2 nodes are
 639 * now free to acquire the lock shared and go on with their lives.
 640 *
 641 */
 642
 643void gfs2_unfreeze_fs(struct gfs2_sbd *sdp)
 644{
 645        mutex_lock(&sdp->sd_freeze_lock);
 646
 647        if (sdp->sd_freeze_count && !--sdp->sd_freeze_count)
 648                gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
 649
 650        mutex_unlock(&sdp->sd_freeze_lock);
 651}
 652
 653
 654/**
 655 * gfs2_write_inode - Make sure the inode is stable on the disk
 656 * @inode: The inode
 657 * @sync: synchronous write flag
 658 *
 659 * Returns: errno
 660 */
 661
 662static int gfs2_write_inode(struct inode *inode, int sync)
 663{
 664        struct gfs2_inode *ip = GFS2_I(inode);
 665        struct gfs2_sbd *sdp = GFS2_SB(inode);
 666        struct gfs2_holder gh;
 667        struct buffer_head *bh;
 668        struct timespec atime;
 669        struct gfs2_dinode *di;
 670        int ret = 0;
 671
 672        /* Check this is a "normal" inode, etc */
 673        if (!test_bit(GIF_USER, &ip->i_flags) ||
 674            (current->flags & PF_MEMALLOC))
 675                return 0;
 676        ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
 677        if (ret)
 678                goto do_flush;
 679        ret = gfs2_trans_begin(sdp, RES_DINODE, 0);
 680        if (ret)
 681                goto do_unlock;
 682        ret = gfs2_meta_inode_buffer(ip, &bh);
 683        if (ret == 0) {
 684                di = (struct gfs2_dinode *)bh->b_data;
 685                atime.tv_sec = be64_to_cpu(di->di_atime);
 686                atime.tv_nsec = be32_to_cpu(di->di_atime_nsec);
 687                if (timespec_compare(&inode->i_atime, &atime) > 0) {
 688                        gfs2_trans_add_bh(ip->i_gl, bh, 1);
 689                        gfs2_dinode_out(ip, bh->b_data);
 690                }
 691                brelse(bh);
 692        }
 693        gfs2_trans_end(sdp);
 694do_unlock:
 695        gfs2_glock_dq_uninit(&gh);
 696do_flush:
 697        if (sync != 0)
 698                gfs2_log_flush(GFS2_SB(inode), ip->i_gl);
 699        return ret;
 700}
 701
 702/**
 703 * gfs2_make_fs_ro - Turn a Read-Write FS into a Read-Only one
 704 * @sdp: the filesystem
 705 *
 706 * Returns: errno
 707 */
 708
 709static int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
 710{
 711        struct gfs2_holder t_gh;
 712        int error;
 713
 714        flush_workqueue(gfs2_delete_workqueue);
 715        gfs2_quota_sync(sdp);
 716        gfs2_statfs_sync(sdp);
 717
 718        error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, GL_NOCACHE,
 719                                   &t_gh);
 720        if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
 721                return error;
 722
 723        gfs2_meta_syncfs(sdp);
 724        gfs2_log_shutdown(sdp);
 725
 726        clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
 727
 728        if (t_gh.gh_gl)
 729                gfs2_glock_dq_uninit(&t_gh);
 730
 731        gfs2_quota_cleanup(sdp);
 732
 733        return error;
 734}
 735
 736static int gfs2_umount_recovery_wait(void *word)
 737{
 738        schedule();
 739        return 0;
 740}
 741
 742/**
 743 * gfs2_put_super - Unmount the filesystem
 744 * @sb: The VFS superblock
 745 *
 746 */
 747
 748static void gfs2_put_super(struct super_block *sb)
 749{
 750        struct gfs2_sbd *sdp = sb->s_fs_info;
 751        int error;
 752        struct gfs2_jdesc *jd;
 753
 754        /*  Unfreeze the filesystem, if we need to  */
 755
 756        mutex_lock(&sdp->sd_freeze_lock);
 757        if (sdp->sd_freeze_count)
 758                gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
 759        mutex_unlock(&sdp->sd_freeze_lock);
 760
 761        /* No more recovery requests */
 762        set_bit(SDF_NORECOVERY, &sdp->sd_flags);
 763        smp_mb();
 764
 765        /* Wait on outstanding recovery */
 766restart:
 767        spin_lock(&sdp->sd_jindex_spin);
 768        list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
 769                if (!test_bit(JDF_RECOVERY, &jd->jd_flags))
 770                        continue;
 771                spin_unlock(&sdp->sd_jindex_spin);
 772                wait_on_bit(&jd->jd_flags, JDF_RECOVERY,
 773                            gfs2_umount_recovery_wait, TASK_UNINTERRUPTIBLE);
 774                goto restart;
 775        }
 776        spin_unlock(&sdp->sd_jindex_spin);
 777
 778        kthread_stop(sdp->sd_quotad_process);
 779        kthread_stop(sdp->sd_logd_process);
 780
 781        if (!(sb->s_flags & MS_RDONLY)) {
 782                error = gfs2_make_fs_ro(sdp);
 783                if (error)
 784                        gfs2_io_error(sdp);
 785        }
 786        /*  At this point, we're through modifying the disk  */
 787
 788        /*  Release stuff  */
 789
 790        iput(sdp->sd_jindex);
 791        iput(sdp->sd_statfs_inode);
 792        iput(sdp->sd_rindex);
 793        iput(sdp->sd_quota_inode);
 794
 795        gfs2_glock_put(sdp->sd_rename_gl);
 796        gfs2_glock_put(sdp->sd_trans_gl);
 797
 798        if (!sdp->sd_args.ar_spectator) {
 799                gfs2_glock_dq_uninit(&sdp->sd_journal_gh);
 800                gfs2_glock_dq_uninit(&sdp->sd_jinode_gh);
 801                gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
 802                gfs2_glock_dq_uninit(&sdp->sd_qc_gh);
 803                iput(sdp->sd_sc_inode);
 804                iput(sdp->sd_qc_inode);
 805        }
 806
 807        gfs2_glock_dq_uninit(&sdp->sd_live_gh);
 808        gfs2_clear_rgrpd(sdp);
 809        gfs2_jindex_free(sdp);
 810        /*  Take apart glock structures and buffer lists  */
 811        gfs2_gl_hash_clear(sdp);
 812        /*  Unmount the locking protocol  */
 813        gfs2_lm_unmount(sdp);
 814
 815        /*  At this point, we're through participating in the lockspace  */
 816        gfs2_sys_fs_del(sdp);
 817}
 818
 819/**
 820 * gfs2_sync_fs - sync the filesystem
 821 * @sb: the superblock
 822 *
 823 * Flushes the log to disk.
 824 */
 825
 826static int gfs2_sync_fs(struct super_block *sb, int wait)
 827{
 828        if (wait && sb->s_fs_info)
 829                gfs2_log_flush(sb->s_fs_info, NULL);
 830        return 0;
 831}
 832
 833/**
 834 * gfs2_freeze - prevent further writes to the filesystem
 835 * @sb: the VFS structure for the filesystem
 836 *
 837 */
 838
 839static int gfs2_freeze(struct super_block *sb)
 840{
 841        struct gfs2_sbd *sdp = sb->s_fs_info;
 842        int error;
 843
 844        if (test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
 845                return -EINVAL;
 846
 847        for (;;) {
 848                error = gfs2_freeze_fs(sdp);
 849                if (!error)
 850                        break;
 851
 852                switch (error) {
 853                case -EBUSY:
 854                        fs_err(sdp, "waiting for recovery before freeze\n");
 855                        break;
 856
 857                default:
 858                        fs_err(sdp, "error freezing FS: %d\n", error);
 859                        break;
 860                }
 861
 862                fs_err(sdp, "retrying...\n");
 863                msleep(1000);
 864        }
 865        return 0;
 866}
 867
 868/**
 869 * gfs2_unfreeze - reallow writes to the filesystem
 870 * @sb: the VFS structure for the filesystem
 871 *
 872 */
 873
 874static int gfs2_unfreeze(struct super_block *sb)
 875{
 876        gfs2_unfreeze_fs(sb->s_fs_info);
 877        return 0;
 878}
 879
 880/**
 881 * statfs_fill - fill in the sg for a given RG
 882 * @rgd: the RG
 883 * @sc: the sc structure
 884 *
 885 * Returns: 0 on success, -ESTALE if the LVB is invalid
 886 */
 887
 888static int statfs_slow_fill(struct gfs2_rgrpd *rgd,
 889                            struct gfs2_statfs_change_host *sc)
 890{
 891        gfs2_rgrp_verify(rgd);
 892        sc->sc_total += rgd->rd_data;
 893        sc->sc_free += rgd->rd_free;
 894        sc->sc_dinodes += rgd->rd_dinodes;
 895        return 0;
 896}
 897
 898/**
 899 * gfs2_statfs_slow - Stat a filesystem using asynchronous locking
 900 * @sdp: the filesystem
 901 * @sc: the sc info that will be returned
 902 *
 903 * Any error (other than a signal) will cause this routine to fall back
 904 * to the synchronous version.
 905 *
 906 * FIXME: This really shouldn't busy wait like this.
 907 *
 908 * Returns: errno
 909 */
 910
 911static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
 912{
 913        struct gfs2_holder ri_gh;
 914        struct gfs2_rgrpd *rgd_next;
 915        struct gfs2_holder *gha, *gh;
 916        unsigned int slots = 64;
 917        unsigned int x;
 918        int done;
 919        int error = 0, err;
 920
 921        memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
 922        gha = kcalloc(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
 923        if (!gha)
 924                return -ENOMEM;
 925
 926        error = gfs2_rindex_hold(sdp, &ri_gh);
 927        if (error)
 928                goto out;
 929
 930        rgd_next = gfs2_rgrpd_get_first(sdp);
 931
 932        for (;;) {
 933                done = 1;
 934
 935                for (x = 0; x < slots; x++) {
 936                        gh = gha + x;
 937
 938                        if (gh->gh_gl && gfs2_glock_poll(gh)) {
 939                                err = gfs2_glock_wait(gh);
 940                                if (err) {
 941                                        gfs2_holder_uninit(gh);
 942                                        error = err;
 943                                } else {
 944                                        if (!error)
 945                                                error = statfs_slow_fill(
 946                                                        gh->gh_gl->gl_object, sc);
 947                                        gfs2_glock_dq_uninit(gh);
 948                                }
 949                        }
 950
 951                        if (gh->gh_gl)
 952                                done = 0;
 953                        else if (rgd_next && !error) {
 954                                error = gfs2_glock_nq_init(rgd_next->rd_gl,
 955                                                           LM_ST_SHARED,
 956                                                           GL_ASYNC,
 957                                                           gh);
 958                                rgd_next = gfs2_rgrpd_get_next(rgd_next);
 959                                done = 0;
 960                        }
 961
 962                        if (signal_pending(current))
 963                                error = -ERESTARTSYS;
 964                }
 965
 966                if (done)
 967                        break;
 968
 969                yield();
 970        }
 971
 972        gfs2_glock_dq_uninit(&ri_gh);
 973
 974out:
 975        kfree(gha);
 976        return error;
 977}
 978
 979/**
 980 * gfs2_statfs_i - Do a statfs
 981 * @sdp: the filesystem
 982 * @sg: the sg structure
 983 *
 984 * Returns: errno
 985 */
 986
 987static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
 988{
 989        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
 990        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 991
 992        spin_lock(&sdp->sd_statfs_spin);
 993
 994        *sc = *m_sc;
 995        sc->sc_total += l_sc->sc_total;
 996        sc->sc_free += l_sc->sc_free;
 997        sc->sc_dinodes += l_sc->sc_dinodes;
 998
 999        spin_unlock(&sdp->sd_statfs_spin);
1000
1001        if (sc->sc_free < 0)
1002                sc->sc_free = 0;
1003        if (sc->sc_free > sc->sc_total)
1004                sc->sc_free = sc->sc_total;
1005        if (sc->sc_dinodes < 0)
1006                sc->sc_dinodes = 0;
1007
1008        return 0;
1009}
1010
1011/**
1012 * gfs2_statfs - Gather and return stats about the filesystem
1013 * @sb: The superblock
1014 * @statfsbuf: The buffer
1015 *
1016 * Returns: 0 on success or error code
1017 */
1018
1019static int gfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
1020{
1021        struct super_block *sb = dentry->d_inode->i_sb;
1022        struct gfs2_sbd *sdp = sb->s_fs_info;
1023        struct gfs2_statfs_change_host sc;
1024        int error;
1025
1026        if (gfs2_tune_get(sdp, gt_statfs_slow))
1027                error = gfs2_statfs_slow(sdp, &sc);
1028        else
1029                error = gfs2_statfs_i(sdp, &sc);
1030
1031        if (error)
1032                return error;
1033
1034        buf->f_type = GFS2_MAGIC;
1035        buf->f_bsize = sdp->sd_sb.sb_bsize;
1036        buf->f_blocks = sc.sc_total;
1037        buf->f_bfree = sc.sc_free;
1038        buf->f_bavail = sc.sc_free;
1039        buf->f_files = sc.sc_dinodes + sc.sc_free;
1040        buf->f_ffree = sc.sc_free;
1041        buf->f_namelen = GFS2_FNAMESIZE;
1042
1043        return 0;
1044}
1045
1046/**
1047 * gfs2_remount_fs - called when the FS is remounted
1048 * @sb:  the filesystem
1049 * @flags:  the remount flags
1050 * @data:  extra data passed in (not used right now)
1051 *
1052 * Returns: errno
1053 */
1054
1055static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
1056{
1057        struct gfs2_sbd *sdp = sb->s_fs_info;
1058        struct gfs2_args args = sdp->sd_args; /* Default to current settings */
1059        struct gfs2_tune *gt = &sdp->sd_tune;
1060        int error;
1061
1062        spin_lock(&gt->gt_spin);
1063        args.ar_commit = gt->gt_log_flush_secs;
1064        spin_unlock(&gt->gt_spin);
1065        error = gfs2_mount_args(sdp, &args, data);
1066        if (error)
1067                return error;
1068
1069        /* Not allowed to change locking details */
1070        if (strcmp(args.ar_lockproto, sdp->sd_args.ar_lockproto) ||
1071            strcmp(args.ar_locktable, sdp->sd_args.ar_locktable) ||
1072            strcmp(args.ar_hostdata, sdp->sd_args.ar_hostdata))
1073                return -EINVAL;
1074
1075        /* Some flags must not be changed */
1076        if (args_neq(&args, &sdp->sd_args, spectator) ||
1077            args_neq(&args, &sdp->sd_args, ignore_local_fs) ||
1078            args_neq(&args, &sdp->sd_args, localflocks) ||
1079            args_neq(&args, &sdp->sd_args, localcaching) ||
1080            args_neq(&args, &sdp->sd_args, meta))
1081                return -EINVAL;
1082
1083        if (sdp->sd_args.ar_spectator)
1084                *flags |= MS_RDONLY;
1085
1086        if ((sb->s_flags ^ *flags) & MS_RDONLY) {
1087                if (*flags & MS_RDONLY)
1088                        error = gfs2_make_fs_ro(sdp);
1089                else
1090                        error = gfs2_make_fs_rw(sdp);
1091                if (error)
1092                        return error;
1093        }
1094
1095        sdp->sd_args = args;
1096        if (sdp->sd_args.ar_posix_acl)
1097                sb->s_flags |= MS_POSIXACL;
1098        else
1099                sb->s_flags &= ~MS_POSIXACL;
1100        spin_lock(&gt->gt_spin);
1101        gt->gt_log_flush_secs = args.ar_commit;
1102        spin_unlock(&gt->gt_spin);
1103
1104        gfs2_online_uevent(sdp);
1105        return 0;
1106}
1107
1108/**
1109 * gfs2_drop_inode - Drop an inode (test for remote unlink)
1110 * @inode: The inode to drop
1111 *
1112 * If we've received a callback on an iopen lock then its because a
1113 * remote node tried to deallocate the inode but failed due to this node
1114 * still having the inode open. Here we mark the link count zero
1115 * since we know that it must have reached zero if the GLF_DEMOTE flag
1116 * is set on the iopen glock. If we didn't do a disk read since the
1117 * remote node removed the final link then we might otherwise miss
1118 * this event. This check ensures that this node will deallocate the
1119 * inode's blocks, or alternatively pass the baton on to another
1120 * node for later deallocation.
1121 */
1122
1123static void gfs2_drop_inode(struct inode *inode)
1124{
1125        struct gfs2_inode *ip = GFS2_I(inode);
1126
1127        if (test_bit(GIF_USER, &ip->i_flags) && inode->i_nlink) {
1128                struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
1129                if (gl && test_bit(GLF_DEMOTE, &gl->gl_flags))
1130                        clear_nlink(inode);
1131        }
1132        generic_drop_inode(inode);
1133}
1134
1135/**
1136 * gfs2_clear_inode - Deallocate an inode when VFS is done with it
1137 * @inode: The VFS inode
1138 *
1139 */
1140
1141static void gfs2_clear_inode(struct inode *inode)
1142{
1143        struct gfs2_inode *ip = GFS2_I(inode);
1144
1145        /* This tells us its a "real" inode and not one which only
1146         * serves to contain an address space (see rgrp.c, meta_io.c)
1147         * which therefore doesn't have its own glocks.
1148         */
1149        if (test_bit(GIF_USER, &ip->i_flags)) {
1150                ip->i_gl->gl_object = NULL;
1151                gfs2_glock_put(ip->i_gl);
1152                ip->i_gl = NULL;
1153                if (ip->i_iopen_gh.gh_gl) {
1154                        ip->i_iopen_gh.gh_gl->gl_object = NULL;
1155                        gfs2_glock_dq_uninit(&ip->i_iopen_gh);
1156                }
1157        }
1158}
1159
1160static int is_ancestor(const struct dentry *d1, const struct dentry *d2)
1161{
1162        do {
1163                if (d1 == d2)
1164                        return 1;
1165                d1 = d1->d_parent;
1166        } while (!IS_ROOT(d1));
1167        return 0;
1168}
1169
1170/**
1171 * gfs2_show_options - Show mount options for /proc/mounts
1172 * @s: seq_file structure
1173 * @mnt: vfsmount
1174 *
1175 * Returns: 0 on success or error code
1176 */
1177
1178static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
1179{
1180        struct gfs2_sbd *sdp = mnt->mnt_sb->s_fs_info;
1181        struct gfs2_args *args = &sdp->sd_args;
1182        int lfsecs;
1183
1184        if (is_ancestor(mnt->mnt_root, sdp->sd_master_dir))
1185                seq_printf(s, ",meta");
1186        if (args->ar_lockproto[0])
1187                seq_printf(s, ",lockproto=%s", args->ar_lockproto);
1188        if (args->ar_locktable[0])
1189                seq_printf(s, ",locktable=%s", args->ar_locktable);
1190        if (args->ar_hostdata[0])
1191                seq_printf(s, ",hostdata=%s", args->ar_hostdata);
1192        if (args->ar_spectator)
1193                seq_printf(s, ",spectator");
1194        if (args->ar_ignore_local_fs)
1195                seq_printf(s, ",ignore_local_fs");
1196        if (args->ar_localflocks)
1197                seq_printf(s, ",localflocks");
1198        if (args->ar_localcaching)
1199                seq_printf(s, ",localcaching");
1200        if (args->ar_debug)
1201                seq_printf(s, ",debug");
1202        if (args->ar_upgrade)
1203                seq_printf(s, ",upgrade");
1204        if (args->ar_posix_acl)
1205                seq_printf(s, ",acl");
1206        if (args->ar_quota != GFS2_QUOTA_DEFAULT) {
1207                char *state;
1208                switch (args->ar_quota) {
1209                case GFS2_QUOTA_OFF:
1210                        state = "off";
1211                        break;
1212                case GFS2_QUOTA_ACCOUNT:
1213                        state = "account";
1214                        break;
1215                case GFS2_QUOTA_ON:
1216                        state = "on";
1217                        break;
1218                default:
1219                        state = "unknown";
1220                        break;
1221                }
1222                seq_printf(s, ",quota=%s", state);
1223        }
1224        if (args->ar_suiddir)
1225                seq_printf(s, ",suiddir");
1226        if (args->ar_data != GFS2_DATA_DEFAULT) {
1227                char *state;
1228                switch (args->ar_data) {
1229                case GFS2_DATA_WRITEBACK:
1230                        state = "writeback";
1231                        break;
1232                case GFS2_DATA_ORDERED:
1233                        state = "ordered";
1234                        break;
1235                default:
1236                        state = "unknown";
1237                        break;
1238                }
1239                seq_printf(s, ",data=%s", state);
1240        }
1241        if (args->ar_discard)
1242                seq_printf(s, ",discard");
1243        lfsecs = sdp->sd_tune.gt_log_flush_secs;
1244        if (lfsecs != 60)
1245                seq_printf(s, ",commit=%d", lfsecs);
1246        if (args->ar_errors != GFS2_ERRORS_DEFAULT) {
1247                const char *state;
1248
1249                switch (args->ar_errors) {
1250                case GFS2_ERRORS_WITHDRAW:
1251                        state = "withdraw";
1252                        break;
1253                case GFS2_ERRORS_PANIC:
1254                        state = "panic";
1255                        break;
1256                default:
1257                        state = "unknown";
1258                        break;
1259                }
1260                seq_printf(s, ",errors=%s", state);
1261        }
1262        return 0;
1263}
1264
1265/*
1266 * We have to (at the moment) hold the inodes main lock to cover
1267 * the gap between unlocking the shared lock on the iopen lock and
1268 * taking the exclusive lock. I'd rather do a shared -> exclusive
1269 * conversion on the iopen lock, but we can change that later. This
1270 * is safe, just less efficient.
1271 */
1272
1273static void gfs2_delete_inode(struct inode *inode)
1274{
1275        struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;
1276        struct gfs2_inode *ip = GFS2_I(inode);
1277        struct gfs2_holder gh;
1278        int error;
1279
1280        if (!test_bit(GIF_USER, &ip->i_flags))
1281                goto out;
1282
1283        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
1284        if (unlikely(error)) {
1285                gfs2_glock_dq_uninit(&ip->i_iopen_gh);
1286                goto out;
1287        }
1288
1289        error = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED);
1290        if (error)
1291                goto out_truncate;
1292
1293        gfs2_glock_dq_wait(&ip->i_iopen_gh);
1294        gfs2_holder_reinit(LM_ST_EXCLUSIVE, LM_FLAG_TRY_1CB | GL_NOCACHE, &ip->i_iopen_gh);
1295        error = gfs2_glock_nq(&ip->i_iopen_gh);
1296        if (error)
1297                goto out_truncate;
1298
1299        if (S_ISDIR(inode->i_mode) &&
1300            (ip->i_diskflags & GFS2_DIF_EXHASH)) {
1301                error = gfs2_dir_exhash_dealloc(ip);
1302                if (error)
1303                        goto out_unlock;
1304        }
1305
1306        if (ip->i_eattr) {
1307                error = gfs2_ea_dealloc(ip);
1308                if (error)
1309                        goto out_unlock;
1310        }
1311
1312        if (!gfs2_is_stuffed(ip)) {
1313                error = gfs2_file_dealloc(ip);
1314                if (error)
1315                        goto out_unlock;
1316        }
1317
1318        error = gfs2_dinode_dealloc(ip);
1319        if (error)
1320                goto out_unlock;
1321
1322out_truncate:
1323        error = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
1324        if (error)
1325                goto out_unlock;
1326        /* Needs to be done before glock release & also in a transaction */
1327        truncate_inode_pages(&inode->i_data, 0);
1328        gfs2_trans_end(sdp);
1329
1330out_unlock:
1331        if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags))
1332                gfs2_glock_dq(&ip->i_iopen_gh);
1333        gfs2_holder_uninit(&ip->i_iopen_gh);
1334        gfs2_glock_dq_uninit(&gh);
1335        if (error && error != GLR_TRYFAILED && error != -EROFS)
1336                fs_warn(sdp, "gfs2_delete_inode: %d\n", error);
1337out:
1338        truncate_inode_pages(&inode->i_data, 0);
1339        clear_inode(inode);
1340}
1341
1342static struct inode *gfs2_alloc_inode(struct super_block *sb)
1343{
1344        struct gfs2_inode *ip;
1345
1346        ip = kmem_cache_alloc(gfs2_inode_cachep, GFP_KERNEL);
1347        if (ip) {
1348                ip->i_flags = 0;
1349                ip->i_gl = NULL;
1350        }
1351        return &ip->i_inode;
1352}
1353
1354static void gfs2_destroy_inode(struct inode *inode)
1355{
1356        kmem_cache_free(gfs2_inode_cachep, inode);
1357}
1358
1359const struct super_operations gfs2_super_ops = {
1360        .alloc_inode            = gfs2_alloc_inode,
1361        .destroy_inode          = gfs2_destroy_inode,
1362        .write_inode            = gfs2_write_inode,
1363        .delete_inode           = gfs2_delete_inode,
1364        .put_super              = gfs2_put_super,
1365        .sync_fs                = gfs2_sync_fs,
1366        .freeze_fs              = gfs2_freeze,
1367        .unfreeze_fs            = gfs2_unfreeze,
1368        .statfs                 = gfs2_statfs,
1369        .remount_fs             = gfs2_remount_fs,
1370        .clear_inode            = gfs2_clear_inode,
1371        .drop_inode             = gfs2_drop_inode,
1372        .show_options           = gfs2_show_options,
1373};
1374
1375