linux/fs/xfs/xfs_super.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
   3 * All Rights Reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it would be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program; if not, write the Free Software Foundation,
  16 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17 */
  18
  19#include "xfs.h"
  20#include "xfs_shared.h"
  21#include "xfs_format.h"
  22#include "xfs_log_format.h"
  23#include "xfs_trans_resv.h"
  24#include "xfs_sb.h"
  25#include "xfs_mount.h"
  26#include "xfs_da_format.h"
  27#include "xfs_inode.h"
  28#include "xfs_btree.h"
  29#include "xfs_bmap.h"
  30#include "xfs_alloc.h"
  31#include "xfs_error.h"
  32#include "xfs_fsops.h"
  33#include "xfs_trans.h"
  34#include "xfs_buf_item.h"
  35#include "xfs_log.h"
  36#include "xfs_log_priv.h"
  37#include "xfs_da_btree.h"
  38#include "xfs_dir2.h"
  39#include "xfs_extfree_item.h"
  40#include "xfs_mru_cache.h"
  41#include "xfs_inode_item.h"
  42#include "xfs_icache.h"
  43#include "xfs_trace.h"
  44#include "xfs_icreate_item.h"
  45#include "xfs_filestream.h"
  46#include "xfs_quota.h"
  47#include "xfs_sysfs.h"
  48#include "xfs_ondisk.h"
  49#include "xfs_rmap_item.h"
  50#include "xfs_refcount_item.h"
  51#include "xfs_bmap_item.h"
  52#include "xfs_reflink.h"
  53
  54#include <linux/namei.h>
  55#include <linux/init.h>
  56#include <linux/slab.h>
  57#include <linux/mount.h>
  58#include <linux/mempool.h>
  59#include <linux/writeback.h>
  60#include <linux/kthread.h>
  61#include <linux/freezer.h>
  62#include <linux/parser.h>
  63
  64static const struct super_operations xfs_super_operations;
  65struct bio_set *xfs_ioend_bioset;
  66
  67static struct kset *xfs_kset;           /* top-level xfs sysfs dir */
  68#ifdef DEBUG
  69static struct xfs_kobj xfs_dbg_kobj;    /* global debug sysfs attrs */
  70#endif
  71
  72/*
  73 * Table driven mount option parser.
  74 */
  75enum {
  76        Opt_logbufs, Opt_logbsize, Opt_logdev, Opt_rtdev, Opt_biosize,
  77        Opt_wsync, Opt_noalign, Opt_swalloc, Opt_sunit, Opt_swidth, Opt_nouuid,
  78        Opt_mtpt, Opt_grpid, Opt_nogrpid, Opt_bsdgroups, Opt_sysvgroups,
  79        Opt_allocsize, Opt_norecovery, Opt_barrier, Opt_nobarrier,
  80        Opt_inode64, Opt_inode32, Opt_ikeep, Opt_noikeep,
  81        Opt_largeio, Opt_nolargeio, Opt_attr2, Opt_noattr2, Opt_filestreams,
  82        Opt_quota, Opt_noquota, Opt_usrquota, Opt_grpquota, Opt_prjquota,
  83        Opt_uquota, Opt_gquota, Opt_pquota,
  84        Opt_uqnoenforce, Opt_gqnoenforce, Opt_pqnoenforce, Opt_qnoenforce,
  85        Opt_discard, Opt_nodiscard, Opt_dax, Opt_err,
  86};
  87
  88static const match_table_t tokens = {
  89        {Opt_logbufs,   "logbufs=%u"},  /* number of XFS log buffers */
  90        {Opt_logbsize,  "logbsize=%s"}, /* size of XFS log buffers */
  91        {Opt_logdev,    "logdev=%s"},   /* log device */
  92        {Opt_rtdev,     "rtdev=%s"},    /* realtime I/O device */
  93        {Opt_biosize,   "biosize=%u"},  /* log2 of preferred buffered io size */
  94        {Opt_wsync,     "wsync"},       /* safe-mode nfs compatible mount */
  95        {Opt_noalign,   "noalign"},     /* turn off stripe alignment */
  96        {Opt_swalloc,   "swalloc"},     /* turn on stripe width allocation */
  97        {Opt_sunit,     "sunit=%u"},    /* data volume stripe unit */
  98        {Opt_swidth,    "swidth=%u"},   /* data volume stripe width */
  99        {Opt_nouuid,    "nouuid"},      /* ignore filesystem UUID */
 100        {Opt_mtpt,      "mtpt"},        /* filesystem mount point */
 101        {Opt_grpid,     "grpid"},       /* group-ID from parent directory */
 102        {Opt_nogrpid,   "nogrpid"},     /* group-ID from current process */
 103        {Opt_bsdgroups, "bsdgroups"},   /* group-ID from parent directory */
 104        {Opt_sysvgroups,"sysvgroups"},  /* group-ID from current process */
 105        {Opt_allocsize, "allocsize=%s"},/* preferred allocation size */
 106        {Opt_norecovery,"norecovery"},  /* don't run XFS recovery */
 107        {Opt_barrier,   "barrier"},     /* use writer barriers for log write and
 108                                         * unwritten extent conversion */
 109        {Opt_nobarrier, "nobarrier"},   /* .. disable */
 110        {Opt_inode64,   "inode64"},     /* inodes can be allocated anywhere */
 111        {Opt_inode32,   "inode32"},     /* inode allocation limited to
 112                                         * XFS_MAXINUMBER_32 */
 113        {Opt_ikeep,     "ikeep"},       /* do not free empty inode clusters */
 114        {Opt_noikeep,   "noikeep"},     /* free empty inode clusters */
 115        {Opt_largeio,   "largeio"},     /* report large I/O sizes in stat() */
 116        {Opt_nolargeio, "nolargeio"},   /* do not report large I/O sizes
 117                                         * in stat(). */
 118        {Opt_attr2,     "attr2"},       /* do use attr2 attribute format */
 119        {Opt_noattr2,   "noattr2"},     /* do not use attr2 attribute format */
 120        {Opt_filestreams,"filestreams"},/* use filestreams allocator */
 121        {Opt_quota,     "quota"},       /* disk quotas (user) */
 122        {Opt_noquota,   "noquota"},     /* no quotas */
 123        {Opt_usrquota,  "usrquota"},    /* user quota enabled */
 124        {Opt_grpquota,  "grpquota"},    /* group quota enabled */
 125        {Opt_prjquota,  "prjquota"},    /* project quota enabled */
 126        {Opt_uquota,    "uquota"},      /* user quota (IRIX variant) */
 127        {Opt_gquota,    "gquota"},      /* group quota (IRIX variant) */
 128        {Opt_pquota,    "pquota"},      /* project quota (IRIX variant) */
 129        {Opt_uqnoenforce,"uqnoenforce"},/* user quota limit enforcement */
 130        {Opt_gqnoenforce,"gqnoenforce"},/* group quota limit enforcement */
 131        {Opt_pqnoenforce,"pqnoenforce"},/* project quota limit enforcement */
 132        {Opt_qnoenforce, "qnoenforce"}, /* same as uqnoenforce */
 133        {Opt_discard,   "discard"},     /* Discard unused blocks */
 134        {Opt_nodiscard, "nodiscard"},   /* Do not discard unused blocks */
 135
 136        {Opt_dax,       "dax"},         /* Enable direct access to bdev pages */
 137        {Opt_err,       NULL},
 138};
 139
 140
 141STATIC int
 142suffix_kstrtoint(const substring_t *s, unsigned int base, int *res)
 143{
 144        int     last, shift_left_factor = 0, _res;
 145        char    *value;
 146        int     ret = 0;
 147
 148        value = match_strdup(s);
 149        if (!value)
 150                return -ENOMEM;
 151
 152        last = strlen(value) - 1;
 153        if (value[last] == 'K' || value[last] == 'k') {
 154                shift_left_factor = 10;
 155                value[last] = '\0';
 156        }
 157        if (value[last] == 'M' || value[last] == 'm') {
 158                shift_left_factor = 20;
 159                value[last] = '\0';
 160        }
 161        if (value[last] == 'G' || value[last] == 'g') {
 162                shift_left_factor = 30;
 163                value[last] = '\0';
 164        }
 165
 166        if (kstrtoint(value, base, &_res))
 167                ret = -EINVAL;
 168        kfree(value);
 169        *res = _res << shift_left_factor;
 170        return ret;
 171}
 172
 173/*
 174 * This function fills in xfs_mount_t fields based on mount args.
 175 * Note: the superblock has _not_ yet been read in.
 176 *
 177 * Note that this function leaks the various device name allocations on
 178 * failure.  The caller takes care of them.
 179 *
 180 * *sb is const because this is also used to test options on the remount
 181 * path, and we don't want this to have any side effects at remount time.
 182 * Today this function does not change *sb, but just to future-proof...
 183 */
 184STATIC int
 185xfs_parseargs(
 186        struct xfs_mount        *mp,
 187        char                    *options)
 188{
 189        const struct super_block *sb = mp->m_super;
 190        char                    *p;
 191        substring_t             args[MAX_OPT_ARGS];
 192        int                     dsunit = 0;
 193        int                     dswidth = 0;
 194        int                     iosize = 0;
 195        __uint8_t               iosizelog = 0;
 196
 197        /*
 198         * set up the mount name first so all the errors will refer to the
 199         * correct device.
 200         */
 201        mp->m_fsname = kstrndup(sb->s_id, MAXNAMELEN, GFP_KERNEL);
 202        if (!mp->m_fsname)
 203                return -ENOMEM;
 204        mp->m_fsname_len = strlen(mp->m_fsname) + 1;
 205
 206        /*
 207         * Copy binary VFS mount flags we are interested in.
 208         */
 209        if (sb->s_flags & MS_RDONLY)
 210                mp->m_flags |= XFS_MOUNT_RDONLY;
 211        if (sb->s_flags & MS_DIRSYNC)
 212                mp->m_flags |= XFS_MOUNT_DIRSYNC;
 213        if (sb->s_flags & MS_SYNCHRONOUS)
 214                mp->m_flags |= XFS_MOUNT_WSYNC;
 215
 216        /*
 217         * Set some default flags that could be cleared by the mount option
 218         * parsing.
 219         */
 220        mp->m_flags |= XFS_MOUNT_BARRIER;
 221        mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
 222
 223        /*
 224         * These can be overridden by the mount option parsing.
 225         */
 226        mp->m_logbufs = -1;
 227        mp->m_logbsize = -1;
 228
 229        if (!options)
 230                goto done;
 231
 232        while ((p = strsep(&options, ",")) != NULL) {
 233                int             token;
 234
 235                if (!*p)
 236                        continue;
 237
 238                token = match_token(p, tokens, args);
 239                switch (token) {
 240                case Opt_logbufs:
 241                        if (match_int(args, &mp->m_logbufs))
 242                                return -EINVAL;
 243                        break;
 244                case Opt_logbsize:
 245                        if (suffix_kstrtoint(args, 10, &mp->m_logbsize))
 246                                return -EINVAL;
 247                        break;
 248                case Opt_logdev:
 249                        mp->m_logname = match_strdup(args);
 250                        if (!mp->m_logname)
 251                                return -ENOMEM;
 252                        break;
 253                case Opt_mtpt:
 254                        xfs_warn(mp, "%s option not allowed on this system", p);
 255                        return -EINVAL;
 256                case Opt_rtdev:
 257                        mp->m_rtname = match_strdup(args);
 258                        if (!mp->m_rtname)
 259                                return -ENOMEM;
 260                        break;
 261                case Opt_allocsize:
 262                case Opt_biosize:
 263                        if (suffix_kstrtoint(args, 10, &iosize))
 264                                return -EINVAL;
 265                        iosizelog = ffs(iosize) - 1;
 266                        break;
 267                case Opt_grpid:
 268                case Opt_bsdgroups:
 269                        mp->m_flags |= XFS_MOUNT_GRPID;
 270                        break;
 271                case Opt_nogrpid:
 272                case Opt_sysvgroups:
 273                        mp->m_flags &= ~XFS_MOUNT_GRPID;
 274                        break;
 275                case Opt_wsync:
 276                        mp->m_flags |= XFS_MOUNT_WSYNC;
 277                        break;
 278                case Opt_norecovery:
 279                        mp->m_flags |= XFS_MOUNT_NORECOVERY;
 280                        break;
 281                case Opt_noalign:
 282                        mp->m_flags |= XFS_MOUNT_NOALIGN;
 283                        break;
 284                case Opt_swalloc:
 285                        mp->m_flags |= XFS_MOUNT_SWALLOC;
 286                        break;
 287                case Opt_sunit:
 288                        if (match_int(args, &dsunit))
 289                                return -EINVAL;
 290                        break;
 291                case Opt_swidth:
 292                        if (match_int(args, &dswidth))
 293                                return -EINVAL;
 294                        break;
 295                case Opt_inode32:
 296                        mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
 297                        break;
 298                case Opt_inode64:
 299                        mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
 300                        break;
 301                case Opt_nouuid:
 302                        mp->m_flags |= XFS_MOUNT_NOUUID;
 303                        break;
 304                case Opt_barrier:
 305                        mp->m_flags |= XFS_MOUNT_BARRIER;
 306                        break;
 307                case Opt_nobarrier:
 308                        mp->m_flags &= ~XFS_MOUNT_BARRIER;
 309                        break;
 310                case Opt_ikeep:
 311                        mp->m_flags |= XFS_MOUNT_IKEEP;
 312                        break;
 313                case Opt_noikeep:
 314                        mp->m_flags &= ~XFS_MOUNT_IKEEP;
 315                        break;
 316                case Opt_largeio:
 317                        mp->m_flags &= ~XFS_MOUNT_COMPAT_IOSIZE;
 318                        break;
 319                case Opt_nolargeio:
 320                        mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
 321                        break;
 322                case Opt_attr2:
 323                        mp->m_flags |= XFS_MOUNT_ATTR2;
 324                        break;
 325                case Opt_noattr2:
 326                        mp->m_flags &= ~XFS_MOUNT_ATTR2;
 327                        mp->m_flags |= XFS_MOUNT_NOATTR2;
 328                        break;
 329                case Opt_filestreams:
 330                        mp->m_flags |= XFS_MOUNT_FILESTREAMS;
 331                        break;
 332                case Opt_noquota:
 333                        mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
 334                        mp->m_qflags &= ~XFS_ALL_QUOTA_ENFD;
 335                        mp->m_qflags &= ~XFS_ALL_QUOTA_ACTIVE;
 336                        break;
 337                case Opt_quota:
 338                case Opt_uquota:
 339                case Opt_usrquota:
 340                        mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE |
 341                                         XFS_UQUOTA_ENFD);
 342                        break;
 343                case Opt_qnoenforce:
 344                case Opt_uqnoenforce:
 345                        mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE);
 346                        mp->m_qflags &= ~XFS_UQUOTA_ENFD;
 347                        break;
 348                case Opt_pquota:
 349                case Opt_prjquota:
 350                        mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE |
 351                                         XFS_PQUOTA_ENFD);
 352                        break;
 353                case Opt_pqnoenforce:
 354                        mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE);
 355                        mp->m_qflags &= ~XFS_PQUOTA_ENFD;
 356                        break;
 357                case Opt_gquota:
 358                case Opt_grpquota:
 359                        mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE |
 360                                         XFS_GQUOTA_ENFD);
 361                        break;
 362                case Opt_gqnoenforce:
 363                        mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
 364                        mp->m_qflags &= ~XFS_GQUOTA_ENFD;
 365                        break;
 366                case Opt_discard:
 367                        mp->m_flags |= XFS_MOUNT_DISCARD;
 368                        break;
 369                case Opt_nodiscard:
 370                        mp->m_flags &= ~XFS_MOUNT_DISCARD;
 371                        break;
 372#ifdef CONFIG_FS_DAX
 373                case Opt_dax:
 374                        mp->m_flags |= XFS_MOUNT_DAX;
 375                        break;
 376#endif
 377                default:
 378                        xfs_warn(mp, "unknown mount option [%s].", p);
 379                        return -EINVAL;
 380                }
 381        }
 382
 383        /*
 384         * no recovery flag requires a read-only mount
 385         */
 386        if ((mp->m_flags & XFS_MOUNT_NORECOVERY) &&
 387            !(mp->m_flags & XFS_MOUNT_RDONLY)) {
 388                xfs_warn(mp, "no-recovery mounts must be read-only.");
 389                return -EINVAL;
 390        }
 391
 392        if ((mp->m_flags & XFS_MOUNT_NOALIGN) && (dsunit || dswidth)) {
 393                xfs_warn(mp,
 394        "sunit and swidth options incompatible with the noalign option");
 395                return -EINVAL;
 396        }
 397
 398#ifndef CONFIG_XFS_QUOTA
 399        if (XFS_IS_QUOTA_RUNNING(mp)) {
 400                xfs_warn(mp, "quota support not available in this kernel.");
 401                return -EINVAL;
 402        }
 403#endif
 404
 405        if ((dsunit && !dswidth) || (!dsunit && dswidth)) {
 406                xfs_warn(mp, "sunit and swidth must be specified together");
 407                return -EINVAL;
 408        }
 409
 410        if (dsunit && (dswidth % dsunit != 0)) {
 411                xfs_warn(mp,
 412        "stripe width (%d) must be a multiple of the stripe unit (%d)",
 413                        dswidth, dsunit);
 414                return -EINVAL;
 415        }
 416
 417done:
 418        if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) {
 419                /*
 420                 * At this point the superblock has not been read
 421                 * in, therefore we do not know the block size.
 422                 * Before the mount call ends we will convert
 423                 * these to FSBs.
 424                 */
 425                mp->m_dalign = dsunit;
 426                mp->m_swidth = dswidth;
 427        }
 428
 429        if (mp->m_logbufs != -1 &&
 430            mp->m_logbufs != 0 &&
 431            (mp->m_logbufs < XLOG_MIN_ICLOGS ||
 432             mp->m_logbufs > XLOG_MAX_ICLOGS)) {
 433                xfs_warn(mp, "invalid logbufs value: %d [not %d-%d]",
 434                        mp->m_logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS);
 435                return -EINVAL;
 436        }
 437        if (mp->m_logbsize != -1 &&
 438            mp->m_logbsize !=  0 &&
 439            (mp->m_logbsize < XLOG_MIN_RECORD_BSIZE ||
 440             mp->m_logbsize > XLOG_MAX_RECORD_BSIZE ||
 441             !is_power_of_2(mp->m_logbsize))) {
 442                xfs_warn(mp,
 443                        "invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]",
 444                        mp->m_logbsize);
 445                return -EINVAL;
 446        }
 447
 448        if (iosizelog) {
 449                if (iosizelog > XFS_MAX_IO_LOG ||
 450                    iosizelog < XFS_MIN_IO_LOG) {
 451                        xfs_warn(mp, "invalid log iosize: %d [not %d-%d]",
 452                                iosizelog, XFS_MIN_IO_LOG,
 453                                XFS_MAX_IO_LOG);
 454                        return -EINVAL;
 455                }
 456
 457                mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE;
 458                mp->m_readio_log = iosizelog;
 459                mp->m_writeio_log = iosizelog;
 460        }
 461
 462        return 0;
 463}
 464
 465struct proc_xfs_info {
 466        uint64_t        flag;
 467        char            *str;
 468};
 469
 470STATIC int
 471xfs_showargs(
 472        struct xfs_mount        *mp,
 473        struct seq_file         *m)
 474{
 475        static struct proc_xfs_info xfs_info_set[] = {
 476                /* the few simple ones we can get from the mount struct */
 477                { XFS_MOUNT_IKEEP,              ",ikeep" },
 478                { XFS_MOUNT_WSYNC,              ",wsync" },
 479                { XFS_MOUNT_NOALIGN,            ",noalign" },
 480                { XFS_MOUNT_SWALLOC,            ",swalloc" },
 481                { XFS_MOUNT_NOUUID,             ",nouuid" },
 482                { XFS_MOUNT_NORECOVERY,         ",norecovery" },
 483                { XFS_MOUNT_ATTR2,              ",attr2" },
 484                { XFS_MOUNT_FILESTREAMS,        ",filestreams" },
 485                { XFS_MOUNT_GRPID,              ",grpid" },
 486                { XFS_MOUNT_DISCARD,            ",discard" },
 487                { XFS_MOUNT_SMALL_INUMS,        ",inode32" },
 488                { XFS_MOUNT_DAX,                ",dax" },
 489                { 0, NULL }
 490        };
 491        static struct proc_xfs_info xfs_info_unset[] = {
 492                /* the few simple ones we can get from the mount struct */
 493                { XFS_MOUNT_COMPAT_IOSIZE,      ",largeio" },
 494                { XFS_MOUNT_BARRIER,            ",nobarrier" },
 495                { XFS_MOUNT_SMALL_INUMS,        ",inode64" },
 496                { 0, NULL }
 497        };
 498        struct proc_xfs_info    *xfs_infop;
 499
 500        for (xfs_infop = xfs_info_set; xfs_infop->flag; xfs_infop++) {
 501                if (mp->m_flags & xfs_infop->flag)
 502                        seq_puts(m, xfs_infop->str);
 503        }
 504        for (xfs_infop = xfs_info_unset; xfs_infop->flag; xfs_infop++) {
 505                if (!(mp->m_flags & xfs_infop->flag))
 506                        seq_puts(m, xfs_infop->str);
 507        }
 508
 509        if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE)
 510                seq_printf(m, ",allocsize=%dk",
 511                                (int)(1 << mp->m_writeio_log) >> 10);
 512
 513        if (mp->m_logbufs > 0)
 514                seq_printf(m, ",logbufs=%d", mp->m_logbufs);
 515        if (mp->m_logbsize > 0)
 516                seq_printf(m, ",logbsize=%dk", mp->m_logbsize >> 10);
 517
 518        if (mp->m_logname)
 519                seq_show_option(m, "logdev", mp->m_logname);
 520        if (mp->m_rtname)
 521                seq_show_option(m, "rtdev", mp->m_rtname);
 522
 523        if (mp->m_dalign > 0)
 524                seq_printf(m, ",sunit=%d",
 525                                (int)XFS_FSB_TO_BB(mp, mp->m_dalign));
 526        if (mp->m_swidth > 0)
 527                seq_printf(m, ",swidth=%d",
 528                                (int)XFS_FSB_TO_BB(mp, mp->m_swidth));
 529
 530        if (mp->m_qflags & (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD))
 531                seq_puts(m, ",usrquota");
 532        else if (mp->m_qflags & XFS_UQUOTA_ACCT)
 533                seq_puts(m, ",uqnoenforce");
 534
 535        if (mp->m_qflags & XFS_PQUOTA_ACCT) {
 536                if (mp->m_qflags & XFS_PQUOTA_ENFD)
 537                        seq_puts(m, ",prjquota");
 538                else
 539                        seq_puts(m, ",pqnoenforce");
 540        }
 541        if (mp->m_qflags & XFS_GQUOTA_ACCT) {
 542                if (mp->m_qflags & XFS_GQUOTA_ENFD)
 543                        seq_puts(m, ",grpquota");
 544                else
 545                        seq_puts(m, ",gqnoenforce");
 546        }
 547
 548        if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT))
 549                seq_puts(m, ",noquota");
 550
 551        return 0;
 552}
 553static __uint64_t
 554xfs_max_file_offset(
 555        unsigned int            blockshift)
 556{
 557        unsigned int            pagefactor = 1;
 558        unsigned int            bitshift = BITS_PER_LONG - 1;
 559
 560        /* Figure out maximum filesize, on Linux this can depend on
 561         * the filesystem blocksize (on 32 bit platforms).
 562         * __block_write_begin does this in an [unsigned] long...
 563         *      page->index << (PAGE_SHIFT - bbits)
 564         * So, for page sized blocks (4K on 32 bit platforms),
 565         * this wraps at around 8Tb (hence MAX_LFS_FILESIZE which is
 566         *      (((u64)PAGE_SIZE << (BITS_PER_LONG-1))-1)
 567         * but for smaller blocksizes it is less (bbits = log2 bsize).
 568         * Note1: get_block_t takes a long (implicit cast from above)
 569         * Note2: The Large Block Device (LBD and HAVE_SECTOR_T) patch
 570         * can optionally convert the [unsigned] long from above into
 571         * an [unsigned] long long.
 572         */
 573
 574#if BITS_PER_LONG == 32
 575# if defined(CONFIG_LBDAF)
 576        ASSERT(sizeof(sector_t) == 8);
 577        pagefactor = PAGE_SIZE;
 578        bitshift = BITS_PER_LONG;
 579# else
 580        pagefactor = PAGE_SIZE >> (PAGE_SHIFT - blockshift);
 581# endif
 582#endif
 583
 584        return (((__uint64_t)pagefactor) << bitshift) - 1;
 585}
 586
 587/*
 588 * Set parameters for inode allocation heuristics, taking into account
 589 * filesystem size and inode32/inode64 mount options; i.e. specifically
 590 * whether or not XFS_MOUNT_SMALL_INUMS is set.
 591 *
 592 * Inode allocation patterns are altered only if inode32 is requested
 593 * (XFS_MOUNT_SMALL_INUMS), and the filesystem is sufficiently large.
 594 * If altered, XFS_MOUNT_32BITINODES is set as well.
 595 *
 596 * An agcount independent of that in the mount structure is provided
 597 * because in the growfs case, mp->m_sb.sb_agcount is not yet updated
 598 * to the potentially higher ag count.
 599 *
 600 * Returns the maximum AG index which may contain inodes.
 601 */
 602xfs_agnumber_t
 603xfs_set_inode_alloc(
 604        struct xfs_mount *mp,
 605        xfs_agnumber_t  agcount)
 606{
 607        xfs_agnumber_t  index;
 608        xfs_agnumber_t  maxagi = 0;
 609        xfs_sb_t        *sbp = &mp->m_sb;
 610        xfs_agnumber_t  max_metadata;
 611        xfs_agino_t     agino;
 612        xfs_ino_t       ino;
 613
 614        /*
 615         * Calculate how much should be reserved for inodes to meet
 616         * the max inode percentage.  Used only for inode32.
 617         */
 618        if (mp->m_maxicount) {
 619                __uint64_t      icount;
 620
 621                icount = sbp->sb_dblocks * sbp->sb_imax_pct;
 622                do_div(icount, 100);
 623                icount += sbp->sb_agblocks - 1;
 624                do_div(icount, sbp->sb_agblocks);
 625                max_metadata = icount;
 626        } else {
 627                max_metadata = agcount;
 628        }
 629
 630        /* Get the last possible inode in the filesystem */
 631        agino = XFS_OFFBNO_TO_AGINO(mp, sbp->sb_agblocks - 1, 0);
 632        ino = XFS_AGINO_TO_INO(mp, agcount - 1, agino);
 633
 634        /*
 635         * If user asked for no more than 32-bit inodes, and the fs is
 636         * sufficiently large, set XFS_MOUNT_32BITINODES if we must alter
 637         * the allocator to accommodate the request.
 638         */
 639        if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) && ino > XFS_MAXINUMBER_32)
 640                mp->m_flags |= XFS_MOUNT_32BITINODES;
 641        else
 642                mp->m_flags &= ~XFS_MOUNT_32BITINODES;
 643
 644        for (index = 0; index < agcount; index++) {
 645                struct xfs_perag        *pag;
 646
 647                ino = XFS_AGINO_TO_INO(mp, index, agino);
 648
 649                pag = xfs_perag_get(mp, index);
 650
 651                if (mp->m_flags & XFS_MOUNT_32BITINODES) {
 652                        if (ino > XFS_MAXINUMBER_32) {
 653                                pag->pagi_inodeok = 0;
 654                                pag->pagf_metadata = 0;
 655                        } else {
 656                                pag->pagi_inodeok = 1;
 657                                maxagi++;
 658                                if (index < max_metadata)
 659                                        pag->pagf_metadata = 1;
 660                                else
 661                                        pag->pagf_metadata = 0;
 662                        }
 663                } else {
 664                        pag->pagi_inodeok = 1;
 665                        pag->pagf_metadata = 0;
 666                }
 667
 668                xfs_perag_put(pag);
 669        }
 670
 671        return (mp->m_flags & XFS_MOUNT_32BITINODES) ? maxagi : agcount;
 672}
 673
 674STATIC int
 675xfs_blkdev_get(
 676        xfs_mount_t             *mp,
 677        const char              *name,
 678        struct block_device     **bdevp)
 679{
 680        int                     error = 0;
 681
 682        *bdevp = blkdev_get_by_path(name, FMODE_READ|FMODE_WRITE|FMODE_EXCL,
 683                                    mp);
 684        if (IS_ERR(*bdevp)) {
 685                error = PTR_ERR(*bdevp);
 686                xfs_warn(mp, "Invalid device [%s], error=%d", name, error);
 687        }
 688
 689        return error;
 690}
 691
 692STATIC void
 693xfs_blkdev_put(
 694        struct block_device     *bdev)
 695{
 696        if (bdev)
 697                blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
 698}
 699
 700void
 701xfs_blkdev_issue_flush(
 702        xfs_buftarg_t           *buftarg)
 703{
 704        blkdev_issue_flush(buftarg->bt_bdev, GFP_NOFS, NULL);
 705}
 706
 707STATIC void
 708xfs_close_devices(
 709        struct xfs_mount        *mp)
 710{
 711        if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
 712                struct block_device *logdev = mp->m_logdev_targp->bt_bdev;
 713                xfs_free_buftarg(mp, mp->m_logdev_targp);
 714                xfs_blkdev_put(logdev);
 715        }
 716        if (mp->m_rtdev_targp) {
 717                struct block_device *rtdev = mp->m_rtdev_targp->bt_bdev;
 718                xfs_free_buftarg(mp, mp->m_rtdev_targp);
 719                xfs_blkdev_put(rtdev);
 720        }
 721        xfs_free_buftarg(mp, mp->m_ddev_targp);
 722}
 723
 724/*
 725 * The file system configurations are:
 726 *      (1) device (partition) with data and internal log
 727 *      (2) logical volume with data and log subvolumes.
 728 *      (3) logical volume with data, log, and realtime subvolumes.
 729 *
 730 * We only have to handle opening the log and realtime volumes here if
 731 * they are present.  The data subvolume has already been opened by
 732 * get_sb_bdev() and is stored in sb->s_bdev.
 733 */
 734STATIC int
 735xfs_open_devices(
 736        struct xfs_mount        *mp)
 737{
 738        struct block_device     *ddev = mp->m_super->s_bdev;
 739        struct block_device     *logdev = NULL, *rtdev = NULL;
 740        int                     error;
 741
 742        /*
 743         * Open real time and log devices - order is important.
 744         */
 745        if (mp->m_logname) {
 746                error = xfs_blkdev_get(mp, mp->m_logname, &logdev);
 747                if (error)
 748                        goto out;
 749        }
 750
 751        if (mp->m_rtname) {
 752                error = xfs_blkdev_get(mp, mp->m_rtname, &rtdev);
 753                if (error)
 754                        goto out_close_logdev;
 755
 756                if (rtdev == ddev || rtdev == logdev) {
 757                        xfs_warn(mp,
 758        "Cannot mount filesystem with identical rtdev and ddev/logdev.");
 759                        error = -EINVAL;
 760                        goto out_close_rtdev;
 761                }
 762        }
 763
 764        /*
 765         * Setup xfs_mount buffer target pointers
 766         */
 767        error = -ENOMEM;
 768        mp->m_ddev_targp = xfs_alloc_buftarg(mp, ddev);
 769        if (!mp->m_ddev_targp)
 770                goto out_close_rtdev;
 771
 772        if (rtdev) {
 773                mp->m_rtdev_targp = xfs_alloc_buftarg(mp, rtdev);
 774                if (!mp->m_rtdev_targp)
 775                        goto out_free_ddev_targ;
 776        }
 777
 778        if (logdev && logdev != ddev) {
 779                mp->m_logdev_targp = xfs_alloc_buftarg(mp, logdev);
 780                if (!mp->m_logdev_targp)
 781                        goto out_free_rtdev_targ;
 782        } else {
 783                mp->m_logdev_targp = mp->m_ddev_targp;
 784        }
 785
 786        return 0;
 787
 788 out_free_rtdev_targ:
 789        if (mp->m_rtdev_targp)
 790                xfs_free_buftarg(mp, mp->m_rtdev_targp);
 791 out_free_ddev_targ:
 792        xfs_free_buftarg(mp, mp->m_ddev_targp);
 793 out_close_rtdev:
 794        xfs_blkdev_put(rtdev);
 795 out_close_logdev:
 796        if (logdev && logdev != ddev)
 797                xfs_blkdev_put(logdev);
 798 out:
 799        return error;
 800}
 801
 802/*
 803 * Setup xfs_mount buffer target pointers based on superblock
 804 */
 805STATIC int
 806xfs_setup_devices(
 807        struct xfs_mount        *mp)
 808{
 809        int                     error;
 810
 811        error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_sectsize);
 812        if (error)
 813                return error;
 814
 815        if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
 816                unsigned int    log_sector_size = BBSIZE;
 817
 818                if (xfs_sb_version_hassector(&mp->m_sb))
 819                        log_sector_size = mp->m_sb.sb_logsectsize;
 820                error = xfs_setsize_buftarg(mp->m_logdev_targp,
 821                                            log_sector_size);
 822                if (error)
 823                        return error;
 824        }
 825        if (mp->m_rtdev_targp) {
 826                error = xfs_setsize_buftarg(mp->m_rtdev_targp,
 827                                            mp->m_sb.sb_sectsize);
 828                if (error)
 829                        return error;
 830        }
 831
 832        return 0;
 833}
 834
 835STATIC int
 836xfs_init_mount_workqueues(
 837        struct xfs_mount        *mp)
 838{
 839        mp->m_buf_workqueue = alloc_workqueue("xfs-buf/%s",
 840                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 1, mp->m_fsname);
 841        if (!mp->m_buf_workqueue)
 842                goto out;
 843
 844        mp->m_data_workqueue = alloc_workqueue("xfs-data/%s",
 845                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
 846        if (!mp->m_data_workqueue)
 847                goto out_destroy_buf;
 848
 849        mp->m_unwritten_workqueue = alloc_workqueue("xfs-conv/%s",
 850                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
 851        if (!mp->m_unwritten_workqueue)
 852                goto out_destroy_data_iodone_queue;
 853
 854        mp->m_cil_workqueue = alloc_workqueue("xfs-cil/%s",
 855                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
 856        if (!mp->m_cil_workqueue)
 857                goto out_destroy_unwritten;
 858
 859        mp->m_reclaim_workqueue = alloc_workqueue("xfs-reclaim/%s",
 860                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
 861        if (!mp->m_reclaim_workqueue)
 862                goto out_destroy_cil;
 863
 864        mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
 865                        WQ_MEM_RECLAIM|WQ_FREEZABLE|WQ_HIGHPRI, 0,
 866                        mp->m_fsname);
 867        if (!mp->m_log_workqueue)
 868                goto out_destroy_reclaim;
 869
 870        mp->m_eofblocks_workqueue = alloc_workqueue("xfs-eofblocks/%s",
 871                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
 872        if (!mp->m_eofblocks_workqueue)
 873                goto out_destroy_log;
 874
 875        return 0;
 876
 877out_destroy_log:
 878        destroy_workqueue(mp->m_log_workqueue);
 879out_destroy_reclaim:
 880        destroy_workqueue(mp->m_reclaim_workqueue);
 881out_destroy_cil:
 882        destroy_workqueue(mp->m_cil_workqueue);
 883out_destroy_unwritten:
 884        destroy_workqueue(mp->m_unwritten_workqueue);
 885out_destroy_data_iodone_queue:
 886        destroy_workqueue(mp->m_data_workqueue);
 887out_destroy_buf:
 888        destroy_workqueue(mp->m_buf_workqueue);
 889out:
 890        return -ENOMEM;
 891}
 892
 893STATIC void
 894xfs_destroy_mount_workqueues(
 895        struct xfs_mount        *mp)
 896{
 897        destroy_workqueue(mp->m_eofblocks_workqueue);
 898        destroy_workqueue(mp->m_log_workqueue);
 899        destroy_workqueue(mp->m_reclaim_workqueue);
 900        destroy_workqueue(mp->m_cil_workqueue);
 901        destroy_workqueue(mp->m_data_workqueue);
 902        destroy_workqueue(mp->m_unwritten_workqueue);
 903        destroy_workqueue(mp->m_buf_workqueue);
 904}
 905
 906/*
 907 * Flush all dirty data to disk. Must not be called while holding an XFS_ILOCK
 908 * or a page lock. We use sync_inodes_sb() here to ensure we block while waiting
 909 * for IO to complete so that we effectively throttle multiple callers to the
 910 * rate at which IO is completing.
 911 */
 912void
 913xfs_flush_inodes(
 914        struct xfs_mount        *mp)
 915{
 916        struct super_block      *sb = mp->m_super;
 917
 918        if (down_read_trylock(&sb->s_umount)) {
 919                sync_inodes_sb(sb);
 920                up_read(&sb->s_umount);
 921        }
 922}
 923
 924/* Catch misguided souls that try to use this interface on XFS */
 925STATIC struct inode *
 926xfs_fs_alloc_inode(
 927        struct super_block      *sb)
 928{
 929        BUG();
 930        return NULL;
 931}
 932
 933/*
 934 * Now that the generic code is guaranteed not to be accessing
 935 * the linux inode, we can inactivate and reclaim the inode.
 936 */
 937STATIC void
 938xfs_fs_destroy_inode(
 939        struct inode            *inode)
 940{
 941        struct xfs_inode        *ip = XFS_I(inode);
 942        int                     error;
 943
 944        trace_xfs_destroy_inode(ip);
 945
 946        ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock));
 947        XFS_STATS_INC(ip->i_mount, vn_rele);
 948        XFS_STATS_INC(ip->i_mount, vn_remove);
 949
 950        if (xfs_is_reflink_inode(ip)) {
 951                error = xfs_reflink_cancel_cow_range(ip, 0, NULLFILEOFF);
 952                if (error && !XFS_FORCED_SHUTDOWN(ip->i_mount))
 953                        xfs_warn(ip->i_mount,
 954"Error %d while evicting CoW blocks for inode %llu.",
 955                                        error, ip->i_ino);
 956        }
 957
 958        xfs_inactive(ip);
 959
 960        ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0);
 961        XFS_STATS_INC(ip->i_mount, vn_reclaim);
 962
 963        /*
 964         * We should never get here with one of the reclaim flags already set.
 965         */
 966        ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIMABLE));
 967        ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIM));
 968
 969        /*
 970         * We always use background reclaim here because even if the
 971         * inode is clean, it still may be under IO and hence we have
 972         * to take the flush lock. The background reclaim path handles
 973         * this more efficiently than we can here, so simply let background
 974         * reclaim tear down all inodes.
 975         */
 976        xfs_inode_set_reclaim_tag(ip);
 977}
 978
 979/*
 980 * Slab object creation initialisation for the XFS inode.
 981 * This covers only the idempotent fields in the XFS inode;
 982 * all other fields need to be initialised on allocation
 983 * from the slab. This avoids the need to repeatedly initialise
 984 * fields in the xfs inode that left in the initialise state
 985 * when freeing the inode.
 986 */
 987STATIC void
 988xfs_fs_inode_init_once(
 989        void                    *inode)
 990{
 991        struct xfs_inode        *ip = inode;
 992
 993        memset(ip, 0, sizeof(struct xfs_inode));
 994
 995        /* vfs inode */
 996        inode_init_once(VFS_I(ip));
 997
 998        /* xfs inode */
 999        atomic_set(&ip->i_pincount, 0);
1000        spin_lock_init(&ip->i_flags_lock);
1001
1002        mrlock_init(&ip->i_mmaplock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER,
1003                     "xfsino", ip->i_ino);
1004        mrlock_init(&ip->i_lock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER,
1005                     "xfsino", ip->i_ino);
1006}
1007
1008/*
1009 * We do an unlocked check for XFS_IDONTCACHE here because we are already
1010 * serialised against cache hits here via the inode->i_lock and igrab() in
1011 * xfs_iget_cache_hit(). Hence a lookup that might clear this flag will not be
1012 * racing with us, and it avoids needing to grab a spinlock here for every inode
1013 * we drop the final reference on.
1014 */
1015STATIC int
1016xfs_fs_drop_inode(
1017        struct inode            *inode)
1018{
1019        struct xfs_inode        *ip = XFS_I(inode);
1020
1021        /*
1022         * If this unlinked inode is in the middle of recovery, don't
1023         * drop the inode just yet; log recovery will take care of
1024         * that.  See the comment for this inode flag.
1025         */
1026        if (ip->i_flags & XFS_IRECOVERY) {
1027                ASSERT(ip->i_mount->m_log->l_flags & XLOG_RECOVERY_NEEDED);
1028                return 0;
1029        }
1030
1031        return generic_drop_inode(inode) || (ip->i_flags & XFS_IDONTCACHE);
1032}
1033
1034STATIC void
1035xfs_free_fsname(
1036        struct xfs_mount        *mp)
1037{
1038        kfree(mp->m_fsname);
1039        kfree(mp->m_rtname);
1040        kfree(mp->m_logname);
1041}
1042
1043STATIC int
1044xfs_fs_sync_fs(
1045        struct super_block      *sb,
1046        int                     wait)
1047{
1048        struct xfs_mount        *mp = XFS_M(sb);
1049
1050        /*
1051         * Doing anything during the async pass would be counterproductive.
1052         */
1053        if (!wait)
1054                return 0;
1055
1056        xfs_log_force(mp, XFS_LOG_SYNC);
1057        if (laptop_mode) {
1058                /*
1059                 * The disk must be active because we're syncing.
1060                 * We schedule log work now (now that the disk is
1061                 * active) instead of later (when it might not be).
1062                 */
1063                flush_delayed_work(&mp->m_log->l_work);
1064        }
1065
1066        return 0;
1067}
1068
1069STATIC int
1070xfs_fs_statfs(
1071        struct dentry           *dentry,
1072        struct kstatfs          *statp)
1073{
1074        struct xfs_mount        *mp = XFS_M(dentry->d_sb);
1075        xfs_sb_t                *sbp = &mp->m_sb;
1076        struct xfs_inode        *ip = XFS_I(d_inode(dentry));
1077        __uint64_t              fakeinos, id;
1078        __uint64_t              icount;
1079        __uint64_t              ifree;
1080        __uint64_t              fdblocks;
1081        xfs_extlen_t            lsize;
1082        __int64_t               ffree;
1083
1084        statp->f_type = XFS_SB_MAGIC;
1085        statp->f_namelen = MAXNAMELEN - 1;
1086
1087        id = huge_encode_dev(mp->m_ddev_targp->bt_dev);
1088        statp->f_fsid.val[0] = (u32)id;
1089        statp->f_fsid.val[1] = (u32)(id >> 32);
1090
1091        icount = percpu_counter_sum(&mp->m_icount);
1092        ifree = percpu_counter_sum(&mp->m_ifree);
1093        fdblocks = percpu_counter_sum(&mp->m_fdblocks);
1094
1095        spin_lock(&mp->m_sb_lock);
1096        statp->f_bsize = sbp->sb_blocksize;
1097        lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0;
1098        statp->f_blocks = sbp->sb_dblocks - lsize;
1099        spin_unlock(&mp->m_sb_lock);
1100
1101        statp->f_bfree = fdblocks - mp->m_alloc_set_aside;
1102        statp->f_bavail = statp->f_bfree;
1103
1104        fakeinos = statp->f_bfree << sbp->sb_inopblog;
1105        statp->f_files = MIN(icount + fakeinos, (__uint64_t)XFS_MAXINUMBER);
1106        if (mp->m_maxicount)
1107                statp->f_files = min_t(typeof(statp->f_files),
1108                                        statp->f_files,
1109                                        mp->m_maxicount);
1110
1111        /* If sb_icount overshot maxicount, report actual allocation */
1112        statp->f_files = max_t(typeof(statp->f_files),
1113                                        statp->f_files,
1114                                        sbp->sb_icount);
1115
1116        /* make sure statp->f_ffree does not underflow */
1117        ffree = statp->f_files - (icount - ifree);
1118        statp->f_ffree = max_t(__int64_t, ffree, 0);
1119
1120
1121        if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) &&
1122            ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
1123                              (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
1124                xfs_qm_statvfs(ip, statp);
1125        return 0;
1126}
1127
1128STATIC void
1129xfs_save_resvblks(struct xfs_mount *mp)
1130{
1131        __uint64_t resblks = 0;
1132
1133        mp->m_resblks_save = mp->m_resblks;
1134        xfs_reserve_blocks(mp, &resblks, NULL);
1135}
1136
1137STATIC void
1138xfs_restore_resvblks(struct xfs_mount *mp)
1139{
1140        __uint64_t resblks;
1141
1142        if (mp->m_resblks_save) {
1143                resblks = mp->m_resblks_save;
1144                mp->m_resblks_save = 0;
1145        } else
1146                resblks = xfs_default_resblks(mp);
1147
1148        xfs_reserve_blocks(mp, &resblks, NULL);
1149}
1150
1151/*
1152 * Trigger writeback of all the dirty metadata in the file system.
1153 *
1154 * This ensures that the metadata is written to their location on disk rather
1155 * than just existing in transactions in the log. This means after a quiesce
1156 * there is no log replay required to write the inodes to disk - this is the
1157 * primary difference between a sync and a quiesce.
1158 *
1159 * Note: xfs_log_quiesce() stops background log work - the callers must ensure
1160 * it is started again when appropriate.
1161 */
1162void
1163xfs_quiesce_attr(
1164        struct xfs_mount        *mp)
1165{
1166        int     error = 0;
1167
1168        /* wait for all modifications to complete */
1169        while (atomic_read(&mp->m_active_trans) > 0)
1170                delay(100);
1171
1172        /* force the log to unpin objects from the now complete transactions */
1173        xfs_log_force(mp, XFS_LOG_SYNC);
1174
1175        /* reclaim inodes to do any IO before the freeze completes */
1176        xfs_reclaim_inodes(mp, 0);
1177        xfs_reclaim_inodes(mp, SYNC_WAIT);
1178
1179        /* Push the superblock and write an unmount record */
1180        error = xfs_log_sbcount(mp);
1181        if (error)
1182                xfs_warn(mp, "xfs_attr_quiesce: failed to log sb changes. "
1183                                "Frozen image may not be consistent.");
1184        /*
1185         * Just warn here till VFS can correctly support
1186         * read-only remount without racing.
1187         */
1188        WARN_ON(atomic_read(&mp->m_active_trans) != 0);
1189
1190        xfs_log_quiesce(mp);
1191}
1192
1193STATIC int
1194xfs_test_remount_options(
1195        struct super_block      *sb,
1196        struct xfs_mount        *mp,
1197        char                    *options)
1198{
1199        int                     error = 0;
1200        struct xfs_mount        *tmp_mp;
1201
1202        tmp_mp = kmem_zalloc(sizeof(*tmp_mp), KM_MAYFAIL);
1203        if (!tmp_mp)
1204                return -ENOMEM;
1205
1206        tmp_mp->m_super = sb;
1207        error = xfs_parseargs(tmp_mp, options);
1208        xfs_free_fsname(tmp_mp);
1209        kfree(tmp_mp);
1210
1211        return error;
1212}
1213
1214STATIC int
1215xfs_fs_remount(
1216        struct super_block      *sb,
1217        int                     *flags,
1218        char                    *options)
1219{
1220        struct xfs_mount        *mp = XFS_M(sb);
1221        xfs_sb_t                *sbp = &mp->m_sb;
1222        substring_t             args[MAX_OPT_ARGS];
1223        char                    *p;
1224        int                     error;
1225
1226        /* First, check for complete junk; i.e. invalid options */
1227        error = xfs_test_remount_options(sb, mp, options);
1228        if (error)
1229                return error;
1230
1231        sync_filesystem(sb);
1232        while ((p = strsep(&options, ",")) != NULL) {
1233                int token;
1234
1235                if (!*p)
1236                        continue;
1237
1238                token = match_token(p, tokens, args);
1239                switch (token) {
1240                case Opt_barrier:
1241                        mp->m_flags |= XFS_MOUNT_BARRIER;
1242                        break;
1243                case Opt_nobarrier:
1244                        mp->m_flags &= ~XFS_MOUNT_BARRIER;
1245                        break;
1246                case Opt_inode64:
1247                        mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
1248                        mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
1249                        break;
1250                case Opt_inode32:
1251                        mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
1252                        mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
1253                        break;
1254                default:
1255                        /*
1256                         * Logically we would return an error here to prevent
1257                         * users from believing they might have changed
1258                         * mount options using remount which can't be changed.
1259                         *
1260                         * But unfortunately mount(8) adds all options from
1261                         * mtab and fstab to the mount arguments in some cases
1262                         * so we can't blindly reject options, but have to
1263                         * check for each specified option if it actually
1264                         * differs from the currently set option and only
1265                         * reject it if that's the case.
1266                         *
1267                         * Until that is implemented we return success for
1268                         * every remount request, and silently ignore all
1269                         * options that we can't actually change.
1270                         */
1271#if 0
1272                        xfs_info(mp,
1273                "mount option \"%s\" not supported for remount", p);
1274                        return -EINVAL;
1275#else
1276                        break;
1277#endif
1278                }
1279        }
1280
1281        /* ro -> rw */
1282        if ((mp->m_flags & XFS_MOUNT_RDONLY) && !(*flags & MS_RDONLY)) {
1283                if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
1284                        xfs_warn(mp,
1285                "ro->rw transition prohibited on norecovery mount");
1286                        return -EINVAL;
1287                }
1288
1289                if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
1290                    xfs_sb_has_ro_compat_feature(sbp,
1291                                        XFS_SB_FEAT_RO_COMPAT_UNKNOWN)) {
1292                        xfs_warn(mp,
1293"ro->rw transition prohibited on unknown (0x%x) ro-compat filesystem",
1294                                (sbp->sb_features_ro_compat &
1295                                        XFS_SB_FEAT_RO_COMPAT_UNKNOWN));
1296                        return -EINVAL;
1297                }
1298
1299                mp->m_flags &= ~XFS_MOUNT_RDONLY;
1300
1301                /*
1302                 * If this is the first remount to writeable state we
1303                 * might have some superblock changes to update.
1304                 */
1305                if (mp->m_update_sb) {
1306                        error = xfs_sync_sb(mp, false);
1307                        if (error) {
1308                                xfs_warn(mp, "failed to write sb changes");
1309                                return error;
1310                        }
1311                        mp->m_update_sb = false;
1312                }
1313
1314                /*
1315                 * Fill out the reserve pool if it is empty. Use the stashed
1316                 * value if it is non-zero, otherwise go with the default.
1317                 */
1318                xfs_restore_resvblks(mp);
1319                xfs_log_work_queue(mp);
1320                xfs_queue_eofblocks(mp);
1321
1322                /* Recover any CoW blocks that never got remapped. */
1323                error = xfs_reflink_recover_cow(mp);
1324                if (error) {
1325                        xfs_err(mp,
1326        "Error %d recovering leftover CoW allocations.", error);
1327                        xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
1328                        return error;
1329                }
1330
1331                /* Create the per-AG metadata reservation pool .*/
1332                error = xfs_fs_reserve_ag_blocks(mp);
1333                if (error && error != -ENOSPC)
1334                        return error;
1335        }
1336
1337        /* rw -> ro */
1338        if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) {
1339                /* Free the per-AG metadata reservation pool. */
1340                error = xfs_fs_unreserve_ag_blocks(mp);
1341                if (error) {
1342                        xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
1343                        return error;
1344                }
1345
1346                /*
1347                 * Before we sync the metadata, we need to free up the reserve
1348                 * block pool so that the used block count in the superblock on
1349                 * disk is correct at the end of the remount. Stash the current
1350                 * reserve pool size so that if we get remounted rw, we can
1351                 * return it to the same size.
1352                 */
1353                xfs_save_resvblks(mp);
1354
1355                /*
1356                 * Cancel background eofb scanning so it cannot race with the
1357                 * final log force+buftarg wait and deadlock the remount.
1358                 */
1359                cancel_delayed_work_sync(&mp->m_eofblocks_work);
1360
1361                xfs_quiesce_attr(mp);
1362                mp->m_flags |= XFS_MOUNT_RDONLY;
1363        }
1364
1365        return 0;
1366}
1367
1368/*
1369 * Second stage of a freeze. The data is already frozen so we only
1370 * need to take care of the metadata. Once that's done sync the superblock
1371 * to the log to dirty it in case of a crash while frozen. This ensures that we
1372 * will recover the unlinked inode lists on the next mount.
1373 */
1374STATIC int
1375xfs_fs_freeze(
1376        struct super_block      *sb)
1377{
1378        struct xfs_mount        *mp = XFS_M(sb);
1379
1380        xfs_save_resvblks(mp);
1381        xfs_quiesce_attr(mp);
1382        return xfs_sync_sb(mp, true);
1383}
1384
1385STATIC int
1386xfs_fs_unfreeze(
1387        struct super_block      *sb)
1388{
1389        struct xfs_mount        *mp = XFS_M(sb);
1390
1391        xfs_restore_resvblks(mp);
1392        xfs_log_work_queue(mp);
1393        return 0;
1394}
1395
1396STATIC int
1397xfs_fs_show_options(
1398        struct seq_file         *m,
1399        struct dentry           *root)
1400{
1401        return xfs_showargs(XFS_M(root->d_sb), m);
1402}
1403
1404/*
1405 * This function fills in xfs_mount_t fields based on mount args.
1406 * Note: the superblock _has_ now been read in.
1407 */
1408STATIC int
1409xfs_finish_flags(
1410        struct xfs_mount        *mp)
1411{
1412        int                     ronly = (mp->m_flags & XFS_MOUNT_RDONLY);
1413
1414        /* Fail a mount where the logbuf is smaller than the log stripe */
1415        if (xfs_sb_version_haslogv2(&mp->m_sb)) {
1416                if (mp->m_logbsize <= 0 &&
1417                    mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE) {
1418                        mp->m_logbsize = mp->m_sb.sb_logsunit;
1419                } else if (mp->m_logbsize > 0 &&
1420                           mp->m_logbsize < mp->m_sb.sb_logsunit) {
1421                        xfs_warn(mp,
1422                "logbuf size must be greater than or equal to log stripe size");
1423                        return -EINVAL;
1424                }
1425        } else {
1426                /* Fail a mount if the logbuf is larger than 32K */
1427                if (mp->m_logbsize > XLOG_BIG_RECORD_BSIZE) {
1428                        xfs_warn(mp,
1429                "logbuf size for version 1 logs must be 16K or 32K");
1430                        return -EINVAL;
1431                }
1432        }
1433
1434        /*
1435         * V5 filesystems always use attr2 format for attributes.
1436         */
1437        if (xfs_sb_version_hascrc(&mp->m_sb) &&
1438            (mp->m_flags & XFS_MOUNT_NOATTR2)) {
1439                xfs_warn(mp, "Cannot mount a V5 filesystem as noattr2. "
1440                             "attr2 is always enabled for V5 filesystems.");
1441                return -EINVAL;
1442        }
1443
1444        /*
1445         * mkfs'ed attr2 will turn on attr2 mount unless explicitly
1446         * told by noattr2 to turn it off
1447         */
1448        if (xfs_sb_version_hasattr2(&mp->m_sb) &&
1449            !(mp->m_flags & XFS_MOUNT_NOATTR2))
1450                mp->m_flags |= XFS_MOUNT_ATTR2;
1451
1452        /*
1453         * prohibit r/w mounts of read-only filesystems
1454         */
1455        if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) {
1456                xfs_warn(mp,
1457                        "cannot mount a read-only filesystem as read-write");
1458                return -EROFS;
1459        }
1460
1461        if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) &&
1462            (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) &&
1463            !xfs_sb_version_has_pquotino(&mp->m_sb)) {
1464                xfs_warn(mp,
1465                  "Super block does not support project and group quota together");
1466                return -EINVAL;
1467        }
1468
1469        return 0;
1470}
1471
1472static int
1473xfs_init_percpu_counters(
1474        struct xfs_mount        *mp)
1475{
1476        int             error;
1477
1478        error = percpu_counter_init(&mp->m_icount, 0, GFP_KERNEL);
1479        if (error)
1480                return -ENOMEM;
1481
1482        error = percpu_counter_init(&mp->m_ifree, 0, GFP_KERNEL);
1483        if (error)
1484                goto free_icount;
1485
1486        error = percpu_counter_init(&mp->m_fdblocks, 0, GFP_KERNEL);
1487        if (error)
1488                goto free_ifree;
1489
1490        return 0;
1491
1492free_ifree:
1493        percpu_counter_destroy(&mp->m_ifree);
1494free_icount:
1495        percpu_counter_destroy(&mp->m_icount);
1496        return -ENOMEM;
1497}
1498
1499void
1500xfs_reinit_percpu_counters(
1501        struct xfs_mount        *mp)
1502{
1503        percpu_counter_set(&mp->m_icount, mp->m_sb.sb_icount);
1504        percpu_counter_set(&mp->m_ifree, mp->m_sb.sb_ifree);
1505        percpu_counter_set(&mp->m_fdblocks, mp->m_sb.sb_fdblocks);
1506}
1507
1508static void
1509xfs_destroy_percpu_counters(
1510        struct xfs_mount        *mp)
1511{
1512        percpu_counter_destroy(&mp->m_icount);
1513        percpu_counter_destroy(&mp->m_ifree);
1514        percpu_counter_destroy(&mp->m_fdblocks);
1515}
1516
1517STATIC int
1518xfs_fs_fill_super(
1519        struct super_block      *sb,
1520        void                    *data,
1521        int                     silent)
1522{
1523        struct inode            *root;
1524        struct xfs_mount        *mp = NULL;
1525        int                     flags = 0, error = -ENOMEM;
1526
1527        mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL);
1528        if (!mp)
1529                goto out;
1530
1531        spin_lock_init(&mp->m_sb_lock);
1532        mutex_init(&mp->m_growlock);
1533        atomic_set(&mp->m_active_trans, 0);
1534        INIT_DELAYED_WORK(&mp->m_reclaim_work, xfs_reclaim_worker);
1535        INIT_DELAYED_WORK(&mp->m_eofblocks_work, xfs_eofblocks_worker);
1536        INIT_DELAYED_WORK(&mp->m_cowblocks_work, xfs_cowblocks_worker);
1537        mp->m_kobj.kobject.kset = xfs_kset;
1538
1539        mp->m_super = sb;
1540        sb->s_fs_info = mp;
1541
1542        error = xfs_parseargs(mp, (char *)data);
1543        if (error)
1544                goto out_free_fsname;
1545
1546        sb_min_blocksize(sb, BBSIZE);
1547        sb->s_xattr = xfs_xattr_handlers;
1548        sb->s_export_op = &xfs_export_operations;
1549#ifdef CONFIG_XFS_QUOTA
1550        sb->s_qcop = &xfs_quotactl_operations;
1551        sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
1552#endif
1553        sb->s_op = &xfs_super_operations;
1554
1555        if (silent)
1556                flags |= XFS_MFSI_QUIET;
1557
1558        error = xfs_open_devices(mp);
1559        if (error)
1560                goto out_free_fsname;
1561
1562        error = xfs_init_mount_workqueues(mp);
1563        if (error)
1564                goto out_close_devices;
1565
1566        error = xfs_init_percpu_counters(mp);
1567        if (error)
1568                goto out_destroy_workqueues;
1569
1570        /* Allocate stats memory before we do operations that might use it */
1571        mp->m_stats.xs_stats = alloc_percpu(struct xfsstats);
1572        if (!mp->m_stats.xs_stats) {
1573                error = -ENOMEM;
1574                goto out_destroy_counters;
1575        }
1576
1577        error = xfs_readsb(mp, flags);
1578        if (error)
1579                goto out_free_stats;
1580
1581        error = xfs_finish_flags(mp);
1582        if (error)
1583                goto out_free_sb;
1584
1585        error = xfs_setup_devices(mp);
1586        if (error)
1587                goto out_free_sb;
1588
1589        error = xfs_filestream_mount(mp);
1590        if (error)
1591                goto out_free_sb;
1592
1593        /*
1594         * we must configure the block size in the superblock before we run the
1595         * full mount process as the mount process can lookup and cache inodes.
1596         */
1597        sb->s_magic = XFS_SB_MAGIC;
1598        sb->s_blocksize = mp->m_sb.sb_blocksize;
1599        sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
1600        sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits);
1601        sb->s_max_links = XFS_MAXLINK;
1602        sb->s_time_gran = 1;
1603        set_posix_acl_flag(sb);
1604
1605        /* version 5 superblocks support inode version counters. */
1606        if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
1607                sb->s_flags |= MS_I_VERSION;
1608
1609        if (mp->m_flags & XFS_MOUNT_DAX) {
1610                xfs_warn(mp,
1611                "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
1612
1613                error = bdev_dax_supported(sb, sb->s_blocksize);
1614                if (error) {
1615                        xfs_alert(mp,
1616                        "DAX unsupported by block device. Turning off DAX.");
1617                        mp->m_flags &= ~XFS_MOUNT_DAX;
1618                }
1619                if (xfs_sb_version_hasreflink(&mp->m_sb))
1620                        xfs_alert(mp,
1621                "DAX and reflink have not been tested together!");
1622        }
1623
1624        if (xfs_sb_version_hasrmapbt(&mp->m_sb)) {
1625                if (mp->m_sb.sb_rblocks) {
1626                        xfs_alert(mp,
1627        "EXPERIMENTAL reverse mapping btree not compatible with realtime device!");
1628                        error = -EINVAL;
1629                        goto out_filestream_unmount;
1630                }
1631                xfs_alert(mp,
1632        "EXPERIMENTAL reverse mapping btree feature enabled. Use at your own risk!");
1633        }
1634
1635        if (xfs_sb_version_hasreflink(&mp->m_sb))
1636                xfs_alert(mp,
1637        "EXPERIMENTAL reflink feature enabled. Use at your own risk!");
1638
1639        error = xfs_mountfs(mp);
1640        if (error)
1641                goto out_filestream_unmount;
1642
1643        root = igrab(VFS_I(mp->m_rootip));
1644        if (!root) {
1645                error = -ENOENT;
1646                goto out_unmount;
1647        }
1648        sb->s_root = d_make_root(root);
1649        if (!sb->s_root) {
1650                error = -ENOMEM;
1651                goto out_unmount;
1652        }
1653
1654        return 0;
1655
1656 out_filestream_unmount:
1657        xfs_filestream_unmount(mp);
1658 out_free_sb:
1659        xfs_freesb(mp);
1660 out_free_stats:
1661        free_percpu(mp->m_stats.xs_stats);
1662 out_destroy_counters:
1663        xfs_destroy_percpu_counters(mp);
1664 out_destroy_workqueues:
1665        xfs_destroy_mount_workqueues(mp);
1666 out_close_devices:
1667        xfs_close_devices(mp);
1668 out_free_fsname:
1669        xfs_free_fsname(mp);
1670        kfree(mp);
1671 out:
1672        return error;
1673
1674 out_unmount:
1675        xfs_filestream_unmount(mp);
1676        xfs_unmountfs(mp);
1677        goto out_free_sb;
1678}
1679
1680STATIC void
1681xfs_fs_put_super(
1682        struct super_block      *sb)
1683{
1684        struct xfs_mount        *mp = XFS_M(sb);
1685
1686        xfs_notice(mp, "Unmounting Filesystem");
1687        xfs_filestream_unmount(mp);
1688        xfs_unmountfs(mp);
1689
1690        xfs_freesb(mp);
1691        free_percpu(mp->m_stats.xs_stats);
1692        xfs_destroy_percpu_counters(mp);
1693        xfs_destroy_mount_workqueues(mp);
1694        xfs_close_devices(mp);
1695        xfs_free_fsname(mp);
1696        kfree(mp);
1697}
1698
1699STATIC struct dentry *
1700xfs_fs_mount(
1701        struct file_system_type *fs_type,
1702        int                     flags,
1703        const char              *dev_name,
1704        void                    *data)
1705{
1706        return mount_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super);
1707}
1708
1709static long
1710xfs_fs_nr_cached_objects(
1711        struct super_block      *sb,
1712        struct shrink_control   *sc)
1713{
1714        return xfs_reclaim_inodes_count(XFS_M(sb));
1715}
1716
1717static long
1718xfs_fs_free_cached_objects(
1719        struct super_block      *sb,
1720        struct shrink_control   *sc)
1721{
1722        return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan);
1723}
1724
1725static const struct super_operations xfs_super_operations = {
1726        .alloc_inode            = xfs_fs_alloc_inode,
1727        .destroy_inode          = xfs_fs_destroy_inode,
1728        .drop_inode             = xfs_fs_drop_inode,
1729        .put_super              = xfs_fs_put_super,
1730        .sync_fs                = xfs_fs_sync_fs,
1731        .freeze_fs              = xfs_fs_freeze,
1732        .unfreeze_fs            = xfs_fs_unfreeze,
1733        .statfs                 = xfs_fs_statfs,
1734        .remount_fs             = xfs_fs_remount,
1735        .show_options           = xfs_fs_show_options,
1736        .nr_cached_objects      = xfs_fs_nr_cached_objects,
1737        .free_cached_objects    = xfs_fs_free_cached_objects,
1738};
1739
1740static struct file_system_type xfs_fs_type = {
1741        .owner                  = THIS_MODULE,
1742        .name                   = "xfs",
1743        .mount                  = xfs_fs_mount,
1744        .kill_sb                = kill_block_super,
1745        .fs_flags               = FS_REQUIRES_DEV,
1746};
1747MODULE_ALIAS_FS("xfs");
1748
1749STATIC int __init
1750xfs_init_zones(void)
1751{
1752        xfs_ioend_bioset = bioset_create(4 * MAX_BUF_PER_PAGE,
1753                        offsetof(struct xfs_ioend, io_inline_bio));
1754        if (!xfs_ioend_bioset)
1755                goto out;
1756
1757        xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t),
1758                                                "xfs_log_ticket");
1759        if (!xfs_log_ticket_zone)
1760                goto out_free_ioend_bioset;
1761
1762        xfs_bmap_free_item_zone = kmem_zone_init(
1763                        sizeof(struct xfs_extent_free_item),
1764                        "xfs_bmap_free_item");
1765        if (!xfs_bmap_free_item_zone)
1766                goto out_destroy_log_ticket_zone;
1767
1768        xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t),
1769                                                "xfs_btree_cur");
1770        if (!xfs_btree_cur_zone)
1771                goto out_destroy_bmap_free_item_zone;
1772
1773        xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t),
1774                                                "xfs_da_state");
1775        if (!xfs_da_state_zone)
1776                goto out_destroy_btree_cur_zone;
1777
1778        xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork");
1779        if (!xfs_ifork_zone)
1780                goto out_destroy_da_state_zone;
1781
1782        xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans");
1783        if (!xfs_trans_zone)
1784                goto out_destroy_ifork_zone;
1785
1786        xfs_log_item_desc_zone =
1787                kmem_zone_init(sizeof(struct xfs_log_item_desc),
1788                               "xfs_log_item_desc");
1789        if (!xfs_log_item_desc_zone)
1790                goto out_destroy_trans_zone;
1791
1792        /*
1793         * The size of the zone allocated buf log item is the maximum
1794         * size possible under XFS.  This wastes a little bit of memory,
1795         * but it is much faster.
1796         */
1797        xfs_buf_item_zone = kmem_zone_init(sizeof(struct xfs_buf_log_item),
1798                                           "xfs_buf_item");
1799        if (!xfs_buf_item_zone)
1800                goto out_destroy_log_item_desc_zone;
1801
1802        xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) +
1803                        ((XFS_EFD_MAX_FAST_EXTENTS - 1) *
1804                                 sizeof(xfs_extent_t))), "xfs_efd_item");
1805        if (!xfs_efd_zone)
1806                goto out_destroy_buf_item_zone;
1807
1808        xfs_efi_zone = kmem_zone_init((sizeof(xfs_efi_log_item_t) +
1809                        ((XFS_EFI_MAX_FAST_EXTENTS - 1) *
1810                                sizeof(xfs_extent_t))), "xfs_efi_item");
1811        if (!xfs_efi_zone)
1812                goto out_destroy_efd_zone;
1813
1814        xfs_inode_zone =
1815                kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode",
1816                        KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | KM_ZONE_SPREAD |
1817                        KM_ZONE_ACCOUNT, xfs_fs_inode_init_once);
1818        if (!xfs_inode_zone)
1819                goto out_destroy_efi_zone;
1820
1821        xfs_ili_zone =
1822                kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili",
1823                                        KM_ZONE_SPREAD, NULL);
1824        if (!xfs_ili_zone)
1825                goto out_destroy_inode_zone;
1826        xfs_icreate_zone = kmem_zone_init(sizeof(struct xfs_icreate_item),
1827                                        "xfs_icr");
1828        if (!xfs_icreate_zone)
1829                goto out_destroy_ili_zone;
1830
1831        xfs_rud_zone = kmem_zone_init(sizeof(struct xfs_rud_log_item),
1832                        "xfs_rud_item");
1833        if (!xfs_rud_zone)
1834                goto out_destroy_icreate_zone;
1835
1836        xfs_rui_zone = kmem_zone_init(
1837                        xfs_rui_log_item_sizeof(XFS_RUI_MAX_FAST_EXTENTS),
1838                        "xfs_rui_item");
1839        if (!xfs_rui_zone)
1840                goto out_destroy_rud_zone;
1841
1842        xfs_cud_zone = kmem_zone_init(sizeof(struct xfs_cud_log_item),
1843                        "xfs_cud_item");
1844        if (!xfs_cud_zone)
1845                goto out_destroy_rui_zone;
1846
1847        xfs_cui_zone = kmem_zone_init(
1848                        xfs_cui_log_item_sizeof(XFS_CUI_MAX_FAST_EXTENTS),
1849                        "xfs_cui_item");
1850        if (!xfs_cui_zone)
1851                goto out_destroy_cud_zone;
1852
1853        xfs_bud_zone = kmem_zone_init(sizeof(struct xfs_bud_log_item),
1854                        "xfs_bud_item");
1855        if (!xfs_bud_zone)
1856                goto out_destroy_cui_zone;
1857
1858        xfs_bui_zone = kmem_zone_init(
1859                        xfs_bui_log_item_sizeof(XFS_BUI_MAX_FAST_EXTENTS),
1860                        "xfs_bui_item");
1861        if (!xfs_bui_zone)
1862                goto out_destroy_bud_zone;
1863
1864        return 0;
1865
1866 out_destroy_bud_zone:
1867        kmem_zone_destroy(xfs_bud_zone);
1868 out_destroy_cui_zone:
1869        kmem_zone_destroy(xfs_cui_zone);
1870 out_destroy_cud_zone:
1871        kmem_zone_destroy(xfs_cud_zone);
1872 out_destroy_rui_zone:
1873        kmem_zone_destroy(xfs_rui_zone);
1874 out_destroy_rud_zone:
1875        kmem_zone_destroy(xfs_rud_zone);
1876 out_destroy_icreate_zone:
1877        kmem_zone_destroy(xfs_icreate_zone);
1878 out_destroy_ili_zone:
1879        kmem_zone_destroy(xfs_ili_zone);
1880 out_destroy_inode_zone:
1881        kmem_zone_destroy(xfs_inode_zone);
1882 out_destroy_efi_zone:
1883        kmem_zone_destroy(xfs_efi_zone);
1884 out_destroy_efd_zone:
1885        kmem_zone_destroy(xfs_efd_zone);
1886 out_destroy_buf_item_zone:
1887        kmem_zone_destroy(xfs_buf_item_zone);
1888 out_destroy_log_item_desc_zone:
1889        kmem_zone_destroy(xfs_log_item_desc_zone);
1890 out_destroy_trans_zone:
1891        kmem_zone_destroy(xfs_trans_zone);
1892 out_destroy_ifork_zone:
1893        kmem_zone_destroy(xfs_ifork_zone);
1894 out_destroy_da_state_zone:
1895        kmem_zone_destroy(xfs_da_state_zone);
1896 out_destroy_btree_cur_zone:
1897        kmem_zone_destroy(xfs_btree_cur_zone);
1898 out_destroy_bmap_free_item_zone:
1899        kmem_zone_destroy(xfs_bmap_free_item_zone);
1900 out_destroy_log_ticket_zone:
1901        kmem_zone_destroy(xfs_log_ticket_zone);
1902 out_free_ioend_bioset:
1903        bioset_free(xfs_ioend_bioset);
1904 out:
1905        return -ENOMEM;
1906}
1907
1908STATIC void
1909xfs_destroy_zones(void)
1910{
1911        /*
1912         * Make sure all delayed rcu free are flushed before we
1913         * destroy caches.
1914         */
1915        rcu_barrier();
1916        kmem_zone_destroy(xfs_bui_zone);
1917        kmem_zone_destroy(xfs_bud_zone);
1918        kmem_zone_destroy(xfs_cui_zone);
1919        kmem_zone_destroy(xfs_cud_zone);
1920        kmem_zone_destroy(xfs_rui_zone);
1921        kmem_zone_destroy(xfs_rud_zone);
1922        kmem_zone_destroy(xfs_icreate_zone);
1923        kmem_zone_destroy(xfs_ili_zone);
1924        kmem_zone_destroy(xfs_inode_zone);
1925        kmem_zone_destroy(xfs_efi_zone);
1926        kmem_zone_destroy(xfs_efd_zone);
1927        kmem_zone_destroy(xfs_buf_item_zone);
1928        kmem_zone_destroy(xfs_log_item_desc_zone);
1929        kmem_zone_destroy(xfs_trans_zone);
1930        kmem_zone_destroy(xfs_ifork_zone);
1931        kmem_zone_destroy(xfs_da_state_zone);
1932        kmem_zone_destroy(xfs_btree_cur_zone);
1933        kmem_zone_destroy(xfs_bmap_free_item_zone);
1934        kmem_zone_destroy(xfs_log_ticket_zone);
1935        bioset_free(xfs_ioend_bioset);
1936}
1937
1938STATIC int __init
1939xfs_init_workqueues(void)
1940{
1941        /*
1942         * The allocation workqueue can be used in memory reclaim situations
1943         * (writepage path), and parallelism is only limited by the number of
1944         * AGs in all the filesystems mounted. Hence use the default large
1945         * max_active value for this workqueue.
1946         */
1947        xfs_alloc_wq = alloc_workqueue("xfsalloc",
1948                        WQ_MEM_RECLAIM|WQ_FREEZABLE, 0);
1949        if (!xfs_alloc_wq)
1950                return -ENOMEM;
1951
1952        return 0;
1953}
1954
1955STATIC void
1956xfs_destroy_workqueues(void)
1957{
1958        destroy_workqueue(xfs_alloc_wq);
1959}
1960
1961STATIC int __init
1962init_xfs_fs(void)
1963{
1964        int                     error;
1965
1966        xfs_check_ondisk_structs();
1967
1968        printk(KERN_INFO XFS_VERSION_STRING " with "
1969                         XFS_BUILD_OPTIONS " enabled\n");
1970
1971        xfs_extent_free_init_defer_op();
1972        xfs_rmap_update_init_defer_op();
1973        xfs_refcount_update_init_defer_op();
1974        xfs_bmap_update_init_defer_op();
1975
1976        xfs_dir_startup();
1977
1978        error = xfs_init_zones();
1979        if (error)
1980                goto out;
1981
1982        error = xfs_init_workqueues();
1983        if (error)
1984                goto out_destroy_zones;
1985
1986        error = xfs_mru_cache_init();
1987        if (error)
1988                goto out_destroy_wq;
1989
1990        error = xfs_buf_init();
1991        if (error)
1992                goto out_mru_cache_uninit;
1993
1994        error = xfs_init_procfs();
1995        if (error)
1996                goto out_buf_terminate;
1997
1998        error = xfs_sysctl_register();
1999        if (error)
2000                goto out_cleanup_procfs;
2001
2002        xfs_kset = kset_create_and_add("xfs", NULL, fs_kobj);
2003        if (!xfs_kset) {
2004                error = -ENOMEM;
2005                goto out_sysctl_unregister;
2006        }
2007
2008        xfsstats.xs_kobj.kobject.kset = xfs_kset;
2009
2010        xfsstats.xs_stats = alloc_percpu(struct xfsstats);
2011        if (!xfsstats.xs_stats) {
2012                error = -ENOMEM;
2013                goto out_kset_unregister;
2014        }
2015
2016        error = xfs_sysfs_init(&xfsstats.xs_kobj, &xfs_stats_ktype, NULL,
2017                               "stats");
2018        if (error)
2019                goto out_free_stats;
2020
2021#ifdef DEBUG
2022        xfs_dbg_kobj.kobject.kset = xfs_kset;
2023        error = xfs_sysfs_init(&xfs_dbg_kobj, &xfs_dbg_ktype, NULL, "debug");
2024        if (error)
2025                goto out_remove_stats_kobj;
2026#endif
2027
2028        error = xfs_qm_init();
2029        if (error)
2030                goto out_remove_dbg_kobj;
2031
2032        error = register_filesystem(&xfs_fs_type);
2033        if (error)
2034                goto out_qm_exit;
2035        return 0;
2036
2037 out_qm_exit:
2038        xfs_qm_exit();
2039 out_remove_dbg_kobj:
2040#ifdef DEBUG
2041        xfs_sysfs_del(&xfs_dbg_kobj);
2042 out_remove_stats_kobj:
2043#endif
2044        xfs_sysfs_del(&xfsstats.xs_kobj);
2045 out_free_stats:
2046        free_percpu(xfsstats.xs_stats);
2047 out_kset_unregister:
2048        kset_unregister(xfs_kset);
2049 out_sysctl_unregister:
2050        xfs_sysctl_unregister();
2051 out_cleanup_procfs:
2052        xfs_cleanup_procfs();
2053 out_buf_terminate:
2054        xfs_buf_terminate();
2055 out_mru_cache_uninit:
2056        xfs_mru_cache_uninit();
2057 out_destroy_wq:
2058        xfs_destroy_workqueues();
2059 out_destroy_zones:
2060        xfs_destroy_zones();
2061 out:
2062        return error;
2063}
2064
2065STATIC void __exit
2066exit_xfs_fs(void)
2067{
2068        xfs_qm_exit();
2069        unregister_filesystem(&xfs_fs_type);
2070#ifdef DEBUG
2071        xfs_sysfs_del(&xfs_dbg_kobj);
2072#endif
2073        xfs_sysfs_del(&xfsstats.xs_kobj);
2074        free_percpu(xfsstats.xs_stats);
2075        kset_unregister(xfs_kset);
2076        xfs_sysctl_unregister();
2077        xfs_cleanup_procfs();
2078        xfs_buf_terminate();
2079        xfs_mru_cache_uninit();
2080        xfs_destroy_workqueues();
2081        xfs_destroy_zones();
2082        xfs_uuid_table_free();
2083}
2084
2085module_init(init_xfs_fs);
2086module_exit(exit_xfs_fs);
2087
2088MODULE_AUTHOR("Silicon Graphics, Inc.");
2089MODULE_DESCRIPTION(XFS_VERSION_STRING " with " XFS_BUILD_OPTIONS " enabled");
2090MODULE_LICENSE("GPL");
2091