linux/fs/btrfs/super.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2007 Oracle.  All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or
   5 * modify it under the terms of the GNU General Public
   6 * License v2 as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11 * General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public
  14 * License along with this program; if not, write to the
  15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16 * Boston, MA 021110-1307, USA.
  17 */
  18
  19#include <linux/blkdev.h>
  20#include <linux/module.h>
  21#include <linux/buffer_head.h>
  22#include <linux/fs.h>
  23#include <linux/pagemap.h>
  24#include <linux/highmem.h>
  25#include <linux/time.h>
  26#include <linux/init.h>
  27#include <linux/seq_file.h>
  28#include <linux/string.h>
  29#include <linux/backing-dev.h>
  30#include <linux/mount.h>
  31#include <linux/mpage.h>
  32#include <linux/swap.h>
  33#include <linux/writeback.h>
  34#include <linux/statfs.h>
  35#include <linux/compat.h>
  36#include <linux/parser.h>
  37#include <linux/ctype.h>
  38#include <linux/namei.h>
  39#include <linux/miscdevice.h>
  40#include <linux/magic.h>
  41#include <linux/slab.h>
  42#include <linux/cleancache.h>
  43#include <linux/ratelimit.h>
  44#include <linux/btrfs.h>
  45#include "compat.h"
  46#include "delayed-inode.h"
  47#include "ctree.h"
  48#include "disk-io.h"
  49#include "transaction.h"
  50#include "btrfs_inode.h"
  51#include "print-tree.h"
  52#include "xattr.h"
  53#include "volumes.h"
  54#include "export.h"
  55#include "compression.h"
  56#include "rcu-string.h"
  57#include "dev-replace.h"
  58#include "free-space-cache.h"
  59
  60#define CREATE_TRACE_POINTS
  61#include <trace/events/btrfs.h>
  62
  63static const struct super_operations btrfs_super_ops;
  64static struct file_system_type btrfs_fs_type;
  65
  66static const char *btrfs_decode_error(int errno)
  67{
  68        char *errstr = "unknown";
  69
  70        switch (errno) {
  71        case -EIO:
  72                errstr = "IO failure";
  73                break;
  74        case -ENOMEM:
  75                errstr = "Out of memory";
  76                break;
  77        case -EROFS:
  78                errstr = "Readonly filesystem";
  79                break;
  80        case -EEXIST:
  81                errstr = "Object already exists";
  82                break;
  83        case -ENOSPC:
  84                errstr = "No space left";
  85                break;
  86        case -ENOENT:
  87                errstr = "No such entry";
  88                break;
  89        }
  90
  91        return errstr;
  92}
  93
  94static void save_error_info(struct btrfs_fs_info *fs_info)
  95{
  96        /*
  97         * today we only save the error info into ram.  Long term we'll
  98         * also send it down to the disk
  99         */
 100        set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state);
 101}
 102
 103/* btrfs handle error by forcing the filesystem readonly */
 104static void btrfs_handle_error(struct btrfs_fs_info *fs_info)
 105{
 106        struct super_block *sb = fs_info->sb;
 107
 108        if (sb->s_flags & MS_RDONLY)
 109                return;
 110
 111        if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
 112                sb->s_flags |= MS_RDONLY;
 113                btrfs_info(fs_info, "forced readonly");
 114                /*
 115                 * Note that a running device replace operation is not
 116                 * canceled here although there is no way to update
 117                 * the progress. It would add the risk of a deadlock,
 118                 * therefore the canceling is ommited. The only penalty
 119                 * is that some I/O remains active until the procedure
 120                 * completes. The next time when the filesystem is
 121                 * mounted writeable again, the device replace
 122                 * operation continues.
 123                 */
 124        }
 125}
 126
 127#ifdef CONFIG_PRINTK
 128/*
 129 * __btrfs_std_error decodes expected errors from the caller and
 130 * invokes the approciate error response.
 131 */
 132void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
 133                       unsigned int line, int errno, const char *fmt, ...)
 134{
 135        struct super_block *sb = fs_info->sb;
 136        const char *errstr;
 137
 138        /*
 139         * Special case: if the error is EROFS, and we're already
 140         * under MS_RDONLY, then it is safe here.
 141         */
 142        if (errno == -EROFS && (sb->s_flags & MS_RDONLY))
 143                return;
 144
 145        errstr = btrfs_decode_error(errno);
 146        if (fmt) {
 147                struct va_format vaf;
 148                va_list args;
 149
 150                va_start(args, fmt);
 151                vaf.fmt = fmt;
 152                vaf.va = &args;
 153
 154                printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: errno=%d %s (%pV)\n",
 155                        sb->s_id, function, line, errno, errstr, &vaf);
 156                va_end(args);
 157        } else {
 158                printk(KERN_CRIT "BTRFS error (device %s) in %s:%d: errno=%d %s\n",
 159                        sb->s_id, function, line, errno, errstr);
 160        }
 161
 162        /* Don't go through full error handling during mount */
 163        save_error_info(fs_info);
 164        if (sb->s_flags & MS_BORN)
 165                btrfs_handle_error(fs_info);
 166}
 167
 168static const char * const logtypes[] = {
 169        "emergency",
 170        "alert",
 171        "critical",
 172        "error",
 173        "warning",
 174        "notice",
 175        "info",
 176        "debug",
 177};
 178
 179void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
 180{
 181        struct super_block *sb = fs_info->sb;
 182        char lvl[4];
 183        struct va_format vaf;
 184        va_list args;
 185        const char *type = logtypes[4];
 186        int kern_level;
 187
 188        va_start(args, fmt);
 189
 190        kern_level = printk_get_level(fmt);
 191        if (kern_level) {
 192                size_t size = printk_skip_level(fmt) - fmt;
 193                memcpy(lvl, fmt,  size);
 194                lvl[size] = '\0';
 195                fmt += size;
 196                type = logtypes[kern_level - '0'];
 197        } else
 198                *lvl = '\0';
 199
 200        vaf.fmt = fmt;
 201        vaf.va = &args;
 202
 203        printk("%sBTRFS %s (device %s): %pV\n", lvl, type, sb->s_id, &vaf);
 204
 205        va_end(args);
 206}
 207
 208#else
 209
 210void __btrfs_std_error(struct btrfs_fs_info *fs_info, const char *function,
 211                       unsigned int line, int errno, const char *fmt, ...)
 212{
 213        struct super_block *sb = fs_info->sb;
 214
 215        /*
 216         * Special case: if the error is EROFS, and we're already
 217         * under MS_RDONLY, then it is safe here.
 218         */
 219        if (errno == -EROFS && (sb->s_flags & MS_RDONLY))
 220                return;
 221
 222        /* Don't go through full error handling during mount */
 223        if (sb->s_flags & MS_BORN) {
 224                save_error_info(fs_info);
 225                btrfs_handle_error(fs_info);
 226        }
 227}
 228#endif
 229
 230/*
 231 * We only mark the transaction aborted and then set the file system read-only.
 232 * This will prevent new transactions from starting or trying to join this
 233 * one.
 234 *
 235 * This means that error recovery at the call site is limited to freeing
 236 * any local memory allocations and passing the error code up without
 237 * further cleanup. The transaction should complete as it normally would
 238 * in the call path but will return -EIO.
 239 *
 240 * We'll complete the cleanup in btrfs_end_transaction and
 241 * btrfs_commit_transaction.
 242 */
 243void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
 244                               struct btrfs_root *root, const char *function,
 245                               unsigned int line, int errno)
 246{
 247        /*
 248         * Report first abort since mount
 249         */
 250        if (!test_and_set_bit(BTRFS_FS_STATE_TRANS_ABORTED,
 251                                &root->fs_info->fs_state)) {
 252                WARN(1, KERN_DEBUG "btrfs: Transaction aborted (error %d)\n",
 253                                errno);
 254        }
 255        trans->aborted = errno;
 256        /* Nothing used. The other threads that have joined this
 257         * transaction may be able to continue. */
 258        if (!trans->blocks_used) {
 259                const char *errstr;
 260
 261                errstr = btrfs_decode_error(errno);
 262                btrfs_warn(root->fs_info,
 263                           "%s:%d: Aborting unused transaction(%s).",
 264                           function, line, errstr);
 265                return;
 266        }
 267        ACCESS_ONCE(trans->transaction->aborted) = errno;
 268        /* Wake up anybody who may be waiting on this transaction */
 269        wake_up(&root->fs_info->transaction_wait);
 270        wake_up(&root->fs_info->transaction_blocked_wait);
 271        __btrfs_std_error(root->fs_info, function, line, errno, NULL);
 272}
 273/*
 274 * __btrfs_panic decodes unexpected, fatal errors from the caller,
 275 * issues an alert, and either panics or BUGs, depending on mount options.
 276 */
 277void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
 278                   unsigned int line, int errno, const char *fmt, ...)
 279{
 280        char *s_id = "<unknown>";
 281        const char *errstr;
 282        struct va_format vaf = { .fmt = fmt };
 283        va_list args;
 284
 285        if (fs_info)
 286                s_id = fs_info->sb->s_id;
 287
 288        va_start(args, fmt);
 289        vaf.va = &args;
 290
 291        errstr = btrfs_decode_error(errno);
 292        if (fs_info && (fs_info->mount_opt & BTRFS_MOUNT_PANIC_ON_FATAL_ERROR))
 293                panic(KERN_CRIT "BTRFS panic (device %s) in %s:%d: %pV (errno=%d %s)\n",
 294                        s_id, function, line, &vaf, errno, errstr);
 295
 296        printk(KERN_CRIT "BTRFS panic (device %s) in %s:%d: %pV (errno=%d %s)\n",
 297               s_id, function, line, &vaf, errno, errstr);
 298        va_end(args);
 299        /* Caller calls BUG() */
 300}
 301
 302static void btrfs_put_super(struct super_block *sb)
 303{
 304        (void)close_ctree(btrfs_sb(sb)->tree_root);
 305        /* FIXME: need to fix VFS to return error? */
 306        /* AV: return it _where_?  ->put_super() can be triggered by any number
 307         * of async events, up to and including delivery of SIGKILL to the
 308         * last process that kept it busy.  Or segfault in the aforementioned
 309         * process...  Whom would you report that to?
 310         */
 311}
 312
 313enum {
 314        Opt_degraded, Opt_subvol, Opt_subvolid, Opt_device, Opt_nodatasum,
 315        Opt_nodatacow, Opt_max_inline, Opt_alloc_start, Opt_nobarrier, Opt_ssd,
 316        Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl, Opt_compress,
 317        Opt_compress_type, Opt_compress_force, Opt_compress_force_type,
 318        Opt_notreelog, Opt_ratio, Opt_flushoncommit, Opt_discard,
 319        Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed,
 320        Opt_enospc_debug, Opt_subvolrootid, Opt_defrag, Opt_inode_cache,
 321        Opt_no_space_cache, Opt_recovery, Opt_skip_balance,
 322        Opt_check_integrity, Opt_check_integrity_including_extent_data,
 323        Opt_check_integrity_print_mask, Opt_fatal_errors,
 324        Opt_err,
 325};
 326
 327static match_table_t tokens = {
 328        {Opt_degraded, "degraded"},
 329        {Opt_subvol, "subvol=%s"},
 330        {Opt_subvolid, "subvolid=%d"},
 331        {Opt_device, "device=%s"},
 332        {Opt_nodatasum, "nodatasum"},
 333        {Opt_nodatacow, "nodatacow"},
 334        {Opt_nobarrier, "nobarrier"},
 335        {Opt_max_inline, "max_inline=%s"},
 336        {Opt_alloc_start, "alloc_start=%s"},
 337        {Opt_thread_pool, "thread_pool=%d"},
 338        {Opt_compress, "compress"},
 339        {Opt_compress_type, "compress=%s"},
 340        {Opt_compress_force, "compress-force"},
 341        {Opt_compress_force_type, "compress-force=%s"},
 342        {Opt_ssd, "ssd"},
 343        {Opt_ssd_spread, "ssd_spread"},
 344        {Opt_nossd, "nossd"},
 345        {Opt_noacl, "noacl"},
 346        {Opt_notreelog, "notreelog"},
 347        {Opt_flushoncommit, "flushoncommit"},
 348        {Opt_ratio, "metadata_ratio=%d"},
 349        {Opt_discard, "discard"},
 350        {Opt_space_cache, "space_cache"},
 351        {Opt_clear_cache, "clear_cache"},
 352        {Opt_user_subvol_rm_allowed, "user_subvol_rm_allowed"},
 353        {Opt_enospc_debug, "enospc_debug"},
 354        {Opt_subvolrootid, "subvolrootid=%d"},
 355        {Opt_defrag, "autodefrag"},
 356        {Opt_inode_cache, "inode_cache"},
 357        {Opt_no_space_cache, "nospace_cache"},
 358        {Opt_recovery, "recovery"},
 359        {Opt_skip_balance, "skip_balance"},
 360        {Opt_check_integrity, "check_int"},
 361        {Opt_check_integrity_including_extent_data, "check_int_data"},
 362        {Opt_check_integrity_print_mask, "check_int_print_mask=%d"},
 363        {Opt_fatal_errors, "fatal_errors=%s"},
 364        {Opt_err, NULL},
 365};
 366
 367/*
 368 * Regular mount options parser.  Everything that is needed only when
 369 * reading in a new superblock is parsed here.
 370 * XXX JDM: This needs to be cleaned up for remount.
 371 */
 372int btrfs_parse_options(struct btrfs_root *root, char *options)
 373{
 374        struct btrfs_fs_info *info = root->fs_info;
 375        substring_t args[MAX_OPT_ARGS];
 376        char *p, *num, *orig = NULL;
 377        u64 cache_gen;
 378        int intarg;
 379        int ret = 0;
 380        char *compress_type;
 381        bool compress_force = false;
 382
 383        cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy);
 384        if (cache_gen)
 385                btrfs_set_opt(info->mount_opt, SPACE_CACHE);
 386
 387        if (!options)
 388                goto out;
 389
 390        /*
 391         * strsep changes the string, duplicate it because parse_options
 392         * gets called twice
 393         */
 394        options = kstrdup(options, GFP_NOFS);
 395        if (!options)
 396                return -ENOMEM;
 397
 398        orig = options;
 399
 400        while ((p = strsep(&options, ",")) != NULL) {
 401                int token;
 402                if (!*p)
 403                        continue;
 404
 405                token = match_token(p, tokens, args);
 406                switch (token) {
 407                case Opt_degraded:
 408                        printk(KERN_INFO "btrfs: allowing degraded mounts\n");
 409                        btrfs_set_opt(info->mount_opt, DEGRADED);
 410                        break;
 411                case Opt_subvol:
 412                case Opt_subvolid:
 413                case Opt_subvolrootid:
 414                case Opt_device:
 415                        /*
 416                         * These are parsed by btrfs_parse_early_options
 417                         * and can be happily ignored here.
 418                         */
 419                        break;
 420                case Opt_nodatasum:
 421                        printk(KERN_INFO "btrfs: setting nodatasum\n");
 422                        btrfs_set_opt(info->mount_opt, NODATASUM);
 423                        break;
 424                case Opt_nodatacow:
 425                        if (!btrfs_test_opt(root, COMPRESS) ||
 426                                !btrfs_test_opt(root, FORCE_COMPRESS)) {
 427                                        printk(KERN_INFO "btrfs: setting nodatacow, compression disabled\n");
 428                        } else {
 429                                printk(KERN_INFO "btrfs: setting nodatacow\n");
 430                        }
 431                        info->compress_type = BTRFS_COMPRESS_NONE;
 432                        btrfs_clear_opt(info->mount_opt, COMPRESS);
 433                        btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
 434                        btrfs_set_opt(info->mount_opt, NODATACOW);
 435                        btrfs_set_opt(info->mount_opt, NODATASUM);
 436                        break;
 437                case Opt_compress_force:
 438                case Opt_compress_force_type:
 439                        compress_force = true;
 440                        /* Fallthrough */
 441                case Opt_compress:
 442                case Opt_compress_type:
 443                        if (token == Opt_compress ||
 444                            token == Opt_compress_force ||
 445                            strcmp(args[0].from, "zlib") == 0) {
 446                                compress_type = "zlib";
 447                                info->compress_type = BTRFS_COMPRESS_ZLIB;
 448                                btrfs_set_opt(info->mount_opt, COMPRESS);
 449                                btrfs_clear_opt(info->mount_opt, NODATACOW);
 450                                btrfs_clear_opt(info->mount_opt, NODATASUM);
 451                        } else if (strcmp(args[0].from, "lzo") == 0) {
 452                                compress_type = "lzo";
 453                                info->compress_type = BTRFS_COMPRESS_LZO;
 454                                btrfs_set_opt(info->mount_opt, COMPRESS);
 455                                btrfs_clear_opt(info->mount_opt, NODATACOW);
 456                                btrfs_clear_opt(info->mount_opt, NODATASUM);
 457                                btrfs_set_fs_incompat(info, COMPRESS_LZO);
 458                        } else if (strncmp(args[0].from, "no", 2) == 0) {
 459                                compress_type = "no";
 460                                info->compress_type = BTRFS_COMPRESS_NONE;
 461                                btrfs_clear_opt(info->mount_opt, COMPRESS);
 462                                btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
 463                                compress_force = false;
 464                        } else {
 465                                ret = -EINVAL;
 466                                goto out;
 467                        }
 468
 469                        if (compress_force) {
 470                                btrfs_set_opt(info->mount_opt, FORCE_COMPRESS);
 471                                pr_info("btrfs: force %s compression\n",
 472                                        compress_type);
 473                        } else
 474                                pr_info("btrfs: use %s compression\n",
 475                                        compress_type);
 476                        break;
 477                case Opt_ssd:
 478                        printk(KERN_INFO "btrfs: use ssd allocation scheme\n");
 479                        btrfs_set_opt(info->mount_opt, SSD);
 480                        break;
 481                case Opt_ssd_spread:
 482                        printk(KERN_INFO "btrfs: use spread ssd "
 483                               "allocation scheme\n");
 484                        btrfs_set_opt(info->mount_opt, SSD);
 485                        btrfs_set_opt(info->mount_opt, SSD_SPREAD);
 486                        break;
 487                case Opt_nossd:
 488                        printk(KERN_INFO "btrfs: not using ssd allocation "
 489                               "scheme\n");
 490                        btrfs_set_opt(info->mount_opt, NOSSD);
 491                        btrfs_clear_opt(info->mount_opt, SSD);
 492                        btrfs_clear_opt(info->mount_opt, SSD_SPREAD);
 493                        break;
 494                case Opt_nobarrier:
 495                        printk(KERN_INFO "btrfs: turning off barriers\n");
 496                        btrfs_set_opt(info->mount_opt, NOBARRIER);
 497                        break;
 498                case Opt_thread_pool:
 499                        intarg = 0;
 500                        match_int(&args[0], &intarg);
 501                        if (intarg)
 502                                info->thread_pool_size = intarg;
 503                        break;
 504                case Opt_max_inline:
 505                        num = match_strdup(&args[0]);
 506                        if (num) {
 507                                info->max_inline = memparse(num, NULL);
 508                                kfree(num);
 509
 510                                if (info->max_inline) {
 511                                        info->max_inline = max_t(u64,
 512                                                info->max_inline,
 513                                                root->sectorsize);
 514                                }
 515                                printk(KERN_INFO "btrfs: max_inline at %llu\n",
 516                                        (unsigned long long)info->max_inline);
 517                        }
 518                        break;
 519                case Opt_alloc_start:
 520                        num = match_strdup(&args[0]);
 521                        if (num) {
 522                                mutex_lock(&info->chunk_mutex);
 523                                info->alloc_start = memparse(num, NULL);
 524                                mutex_unlock(&info->chunk_mutex);
 525                                kfree(num);
 526                                printk(KERN_INFO
 527                                        "btrfs: allocations start at %llu\n",
 528                                        (unsigned long long)info->alloc_start);
 529                        }
 530                        break;
 531                case Opt_noacl:
 532                        root->fs_info->sb->s_flags &= ~MS_POSIXACL;
 533                        break;
 534                case Opt_notreelog:
 535                        printk(KERN_INFO "btrfs: disabling tree log\n");
 536                        btrfs_set_opt(info->mount_opt, NOTREELOG);
 537                        break;
 538                case Opt_flushoncommit:
 539                        printk(KERN_INFO "btrfs: turning on flush-on-commit\n");
 540                        btrfs_set_opt(info->mount_opt, FLUSHONCOMMIT);
 541                        break;
 542                case Opt_ratio:
 543                        intarg = 0;
 544                        match_int(&args[0], &intarg);
 545                        if (intarg) {
 546                                info->metadata_ratio = intarg;
 547                                printk(KERN_INFO "btrfs: metadata ratio %d\n",
 548                                       info->metadata_ratio);
 549                        }
 550                        break;
 551                case Opt_discard:
 552                        btrfs_set_opt(info->mount_opt, DISCARD);
 553                        break;
 554                case Opt_space_cache:
 555                        btrfs_set_opt(info->mount_opt, SPACE_CACHE);
 556                        break;
 557                case Opt_no_space_cache:
 558                        printk(KERN_INFO "btrfs: disabling disk space caching\n");
 559                        btrfs_clear_opt(info->mount_opt, SPACE_CACHE);
 560                        break;
 561                case Opt_inode_cache:
 562                        printk(KERN_INFO "btrfs: enabling inode map caching\n");
 563                        btrfs_set_opt(info->mount_opt, INODE_MAP_CACHE);
 564                        break;
 565                case Opt_clear_cache:
 566                        printk(KERN_INFO "btrfs: force clearing of disk cache\n");
 567                        btrfs_set_opt(info->mount_opt, CLEAR_CACHE);
 568                        break;
 569                case Opt_user_subvol_rm_allowed:
 570                        btrfs_set_opt(info->mount_opt, USER_SUBVOL_RM_ALLOWED);
 571                        break;
 572                case Opt_enospc_debug:
 573                        btrfs_set_opt(info->mount_opt, ENOSPC_DEBUG);
 574                        break;
 575                case Opt_defrag:
 576                        printk(KERN_INFO "btrfs: enabling auto defrag\n");
 577                        btrfs_set_opt(info->mount_opt, AUTO_DEFRAG);
 578                        break;
 579                case Opt_recovery:
 580                        printk(KERN_INFO "btrfs: enabling auto recovery\n");
 581                        btrfs_set_opt(info->mount_opt, RECOVERY);
 582                        break;
 583                case Opt_skip_balance:
 584                        btrfs_set_opt(info->mount_opt, SKIP_BALANCE);
 585                        break;
 586#ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
 587                case Opt_check_integrity_including_extent_data:
 588                        printk(KERN_INFO "btrfs: enabling check integrity"
 589                               " including extent data\n");
 590                        btrfs_set_opt(info->mount_opt,
 591                                      CHECK_INTEGRITY_INCLUDING_EXTENT_DATA);
 592                        btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
 593                        break;
 594                case Opt_check_integrity:
 595                        printk(KERN_INFO "btrfs: enabling check integrity\n");
 596                        btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
 597                        break;
 598                case Opt_check_integrity_print_mask:
 599                        intarg = 0;
 600                        match_int(&args[0], &intarg);
 601                        if (intarg) {
 602                                info->check_integrity_print_mask = intarg;
 603                                printk(KERN_INFO "btrfs:"
 604                                       " check_integrity_print_mask 0x%x\n",
 605                                       info->check_integrity_print_mask);
 606                        }
 607                        break;
 608#else
 609                case Opt_check_integrity_including_extent_data:
 610                case Opt_check_integrity:
 611                case Opt_check_integrity_print_mask:
 612                        printk(KERN_ERR "btrfs: support for check_integrity*"
 613                               " not compiled in!\n");
 614                        ret = -EINVAL;
 615                        goto out;
 616#endif
 617                case Opt_fatal_errors:
 618                        if (strcmp(args[0].from, "panic") == 0)
 619                                btrfs_set_opt(info->mount_opt,
 620                                              PANIC_ON_FATAL_ERROR);
 621                        else if (strcmp(args[0].from, "bug") == 0)
 622                                btrfs_clear_opt(info->mount_opt,
 623                                              PANIC_ON_FATAL_ERROR);
 624                        else {
 625                                ret = -EINVAL;
 626                                goto out;
 627                        }
 628                        break;
 629                case Opt_err:
 630                        printk(KERN_INFO "btrfs: unrecognized mount option "
 631                               "'%s'\n", p);
 632                        ret = -EINVAL;
 633                        goto out;
 634                default:
 635                        break;
 636                }
 637        }
 638out:
 639        if (!ret && btrfs_test_opt(root, SPACE_CACHE))
 640                printk(KERN_INFO "btrfs: disk space caching is enabled\n");
 641        kfree(orig);
 642        return ret;
 643}
 644
 645/*
 646 * Parse mount options that are required early in the mount process.
 647 *
 648 * All other options will be parsed on much later in the mount process and
 649 * only when we need to allocate a new super block.
 650 */
 651static int btrfs_parse_early_options(const char *options, fmode_t flags,
 652                void *holder, char **subvol_name, u64 *subvol_objectid,
 653                struct btrfs_fs_devices **fs_devices)
 654{
 655        substring_t args[MAX_OPT_ARGS];
 656        char *device_name, *opts, *orig, *p;
 657        int error = 0;
 658        int intarg;
 659
 660        if (!options)
 661                return 0;
 662
 663        /*
 664         * strsep changes the string, duplicate it because parse_options
 665         * gets called twice
 666         */
 667        opts = kstrdup(options, GFP_KERNEL);
 668        if (!opts)
 669                return -ENOMEM;
 670        orig = opts;
 671
 672        while ((p = strsep(&opts, ",")) != NULL) {
 673                int token;
 674                if (!*p)
 675                        continue;
 676
 677                token = match_token(p, tokens, args);
 678                switch (token) {
 679                case Opt_subvol:
 680                        kfree(*subvol_name);
 681                        *subvol_name = match_strdup(&args[0]);
 682                        break;
 683                case Opt_subvolid:
 684                        intarg = 0;
 685                        error = match_int(&args[0], &intarg);
 686                        if (!error) {
 687                                /* we want the original fs_tree */
 688                                if (!intarg)
 689                                        *subvol_objectid =
 690                                                BTRFS_FS_TREE_OBJECTID;
 691                                else
 692                                        *subvol_objectid = intarg;
 693                        }
 694                        break;
 695                case Opt_subvolrootid:
 696                        printk(KERN_WARNING
 697                                "btrfs: 'subvolrootid' mount option is deprecated and has no effect\n");
 698                        break;
 699                case Opt_device:
 700                        device_name = match_strdup(&args[0]);
 701                        if (!device_name) {
 702                                error = -ENOMEM;
 703                                goto out;
 704                        }
 705                        error = btrfs_scan_one_device(device_name,
 706                                        flags, holder, fs_devices);
 707                        kfree(device_name);
 708                        if (error)
 709                                goto out;
 710                        break;
 711                default:
 712                        break;
 713                }
 714        }
 715
 716out:
 717        kfree(orig);
 718        return error;
 719}
 720
 721static struct dentry *get_default_root(struct super_block *sb,
 722                                       u64 subvol_objectid)
 723{
 724        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
 725        struct btrfs_root *root = fs_info->tree_root;
 726        struct btrfs_root *new_root;
 727        struct btrfs_dir_item *di;
 728        struct btrfs_path *path;
 729        struct btrfs_key location;
 730        struct inode *inode;
 731        u64 dir_id;
 732        int new = 0;
 733
 734        /*
 735         * We have a specific subvol we want to mount, just setup location and
 736         * go look up the root.
 737         */
 738        if (subvol_objectid) {
 739                location.objectid = subvol_objectid;
 740                location.type = BTRFS_ROOT_ITEM_KEY;
 741                location.offset = (u64)-1;
 742                goto find_root;
 743        }
 744
 745        path = btrfs_alloc_path();
 746        if (!path)
 747                return ERR_PTR(-ENOMEM);
 748        path->leave_spinning = 1;
 749
 750        /*
 751         * Find the "default" dir item which points to the root item that we
 752         * will mount by default if we haven't been given a specific subvolume
 753         * to mount.
 754         */
 755        dir_id = btrfs_super_root_dir(fs_info->super_copy);
 756        di = btrfs_lookup_dir_item(NULL, root, path, dir_id, "default", 7, 0);
 757        if (IS_ERR(di)) {
 758                btrfs_free_path(path);
 759                return ERR_CAST(di);
 760        }
 761        if (!di) {
 762                /*
 763                 * Ok the default dir item isn't there.  This is weird since
 764                 * it's always been there, but don't freak out, just try and
 765                 * mount to root most subvolume.
 766                 */
 767                btrfs_free_path(path);
 768                dir_id = BTRFS_FIRST_FREE_OBJECTID;
 769                new_root = fs_info->fs_root;
 770                goto setup_root;
 771        }
 772
 773        btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);
 774        btrfs_free_path(path);
 775
 776find_root:
 777        new_root = btrfs_read_fs_root_no_name(fs_info, &location);
 778        if (IS_ERR(new_root))
 779                return ERR_CAST(new_root);
 780
 781        dir_id = btrfs_root_dirid(&new_root->root_item);
 782setup_root:
 783        location.objectid = dir_id;
 784        location.type = BTRFS_INODE_ITEM_KEY;
 785        location.offset = 0;
 786
 787        inode = btrfs_iget(sb, &location, new_root, &new);
 788        if (IS_ERR(inode))
 789                return ERR_CAST(inode);
 790
 791        /*
 792         * If we're just mounting the root most subvol put the inode and return
 793         * a reference to the dentry.  We will have already gotten a reference
 794         * to the inode in btrfs_fill_super so we're good to go.
 795         */
 796        if (!new && sb->s_root->d_inode == inode) {
 797                iput(inode);
 798                return dget(sb->s_root);
 799        }
 800
 801        return d_obtain_alias(inode);
 802}
 803
 804static int btrfs_fill_super(struct super_block *sb,
 805                            struct btrfs_fs_devices *fs_devices,
 806                            void *data, int silent)
 807{
 808        struct inode *inode;
 809        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
 810        struct btrfs_key key;
 811        int err;
 812
 813        sb->s_maxbytes = MAX_LFS_FILESIZE;
 814        sb->s_magic = BTRFS_SUPER_MAGIC;
 815        sb->s_op = &btrfs_super_ops;
 816        sb->s_d_op = &btrfs_dentry_operations;
 817        sb->s_export_op = &btrfs_export_ops;
 818        sb->s_xattr = btrfs_xattr_handlers;
 819        sb->s_time_gran = 1;
 820#ifdef CONFIG_BTRFS_FS_POSIX_ACL
 821        sb->s_flags |= MS_POSIXACL;
 822#endif
 823        sb->s_flags |= MS_I_VERSION;
 824        err = open_ctree(sb, fs_devices, (char *)data);
 825        if (err) {
 826                printk("btrfs: open_ctree failed\n");
 827                return err;
 828        }
 829
 830        key.objectid = BTRFS_FIRST_FREE_OBJECTID;
 831        key.type = BTRFS_INODE_ITEM_KEY;
 832        key.offset = 0;
 833        inode = btrfs_iget(sb, &key, fs_info->fs_root, NULL);
 834        if (IS_ERR(inode)) {
 835                err = PTR_ERR(inode);
 836                goto fail_close;
 837        }
 838
 839        sb->s_root = d_make_root(inode);
 840        if (!sb->s_root) {
 841                err = -ENOMEM;
 842                goto fail_close;
 843        }
 844
 845        save_mount_options(sb, data);
 846        cleancache_init_fs(sb);
 847        sb->s_flags |= MS_ACTIVE;
 848        return 0;
 849
 850fail_close:
 851        close_ctree(fs_info->tree_root);
 852        return err;
 853}
 854
 855int btrfs_sync_fs(struct super_block *sb, int wait)
 856{
 857        struct btrfs_trans_handle *trans;
 858        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
 859        struct btrfs_root *root = fs_info->tree_root;
 860
 861        trace_btrfs_sync_fs(wait);
 862
 863        if (!wait) {
 864                filemap_flush(fs_info->btree_inode->i_mapping);
 865                return 0;
 866        }
 867
 868        btrfs_wait_all_ordered_extents(fs_info, 1);
 869
 870        trans = btrfs_attach_transaction_barrier(root);
 871        if (IS_ERR(trans)) {
 872                /* no transaction, don't bother */
 873                if (PTR_ERR(trans) == -ENOENT)
 874                        return 0;
 875                return PTR_ERR(trans);
 876        }
 877        return btrfs_commit_transaction(trans, root);
 878}
 879
 880static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
 881{
 882        struct btrfs_fs_info *info = btrfs_sb(dentry->d_sb);
 883        struct btrfs_root *root = info->tree_root;
 884        char *compress_type;
 885
 886        if (btrfs_test_opt(root, DEGRADED))
 887                seq_puts(seq, ",degraded");
 888        if (btrfs_test_opt(root, NODATASUM))
 889                seq_puts(seq, ",nodatasum");
 890        if (btrfs_test_opt(root, NODATACOW))
 891                seq_puts(seq, ",nodatacow");
 892        if (btrfs_test_opt(root, NOBARRIER))
 893                seq_puts(seq, ",nobarrier");
 894        if (info->max_inline != 8192 * 1024)
 895                seq_printf(seq, ",max_inline=%llu",
 896                           (unsigned long long)info->max_inline);
 897        if (info->alloc_start != 0)
 898                seq_printf(seq, ",alloc_start=%llu",
 899                           (unsigned long long)info->alloc_start);
 900        if (info->thread_pool_size !=  min_t(unsigned long,
 901                                             num_online_cpus() + 2, 8))
 902                seq_printf(seq, ",thread_pool=%d", info->thread_pool_size);
 903        if (btrfs_test_opt(root, COMPRESS)) {
 904                if (info->compress_type == BTRFS_COMPRESS_ZLIB)
 905                        compress_type = "zlib";
 906                else
 907                        compress_type = "lzo";
 908                if (btrfs_test_opt(root, FORCE_COMPRESS))
 909                        seq_printf(seq, ",compress-force=%s", compress_type);
 910                else
 911                        seq_printf(seq, ",compress=%s", compress_type);
 912        }
 913        if (btrfs_test_opt(root, NOSSD))
 914                seq_puts(seq, ",nossd");
 915        if (btrfs_test_opt(root, SSD_SPREAD))
 916                seq_puts(seq, ",ssd_spread");
 917        else if (btrfs_test_opt(root, SSD))
 918                seq_puts(seq, ",ssd");
 919        if (btrfs_test_opt(root, NOTREELOG))
 920                seq_puts(seq, ",notreelog");
 921        if (btrfs_test_opt(root, FLUSHONCOMMIT))
 922                seq_puts(seq, ",flushoncommit");
 923        if (btrfs_test_opt(root, DISCARD))
 924                seq_puts(seq, ",discard");
 925        if (!(root->fs_info->sb->s_flags & MS_POSIXACL))
 926                seq_puts(seq, ",noacl");
 927        if (btrfs_test_opt(root, SPACE_CACHE))
 928                seq_puts(seq, ",space_cache");
 929        else
 930                seq_puts(seq, ",nospace_cache");
 931        if (btrfs_test_opt(root, CLEAR_CACHE))
 932                seq_puts(seq, ",clear_cache");
 933        if (btrfs_test_opt(root, USER_SUBVOL_RM_ALLOWED))
 934                seq_puts(seq, ",user_subvol_rm_allowed");
 935        if (btrfs_test_opt(root, ENOSPC_DEBUG))
 936                seq_puts(seq, ",enospc_debug");
 937        if (btrfs_test_opt(root, AUTO_DEFRAG))
 938                seq_puts(seq, ",autodefrag");
 939        if (btrfs_test_opt(root, INODE_MAP_CACHE))
 940                seq_puts(seq, ",inode_cache");
 941        if (btrfs_test_opt(root, SKIP_BALANCE))
 942                seq_puts(seq, ",skip_balance");
 943        if (btrfs_test_opt(root, PANIC_ON_FATAL_ERROR))
 944                seq_puts(seq, ",fatal_errors=panic");
 945        return 0;
 946}
 947
 948static int btrfs_test_super(struct super_block *s, void *data)
 949{
 950        struct btrfs_fs_info *p = data;
 951        struct btrfs_fs_info *fs_info = btrfs_sb(s);
 952
 953        return fs_info->fs_devices == p->fs_devices;
 954}
 955
 956static int btrfs_set_super(struct super_block *s, void *data)
 957{
 958        int err = set_anon_super(s, data);
 959        if (!err)
 960                s->s_fs_info = data;
 961        return err;
 962}
 963
 964/*
 965 * subvolumes are identified by ino 256
 966 */
 967static inline int is_subvolume_inode(struct inode *inode)
 968{
 969        if (inode && inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
 970                return 1;
 971        return 0;
 972}
 973
 974/*
 975 * This will strip out the subvol=%s argument for an argument string and add
 976 * subvolid=0 to make sure we get the actual tree root for path walking to the
 977 * subvol we want.
 978 */
 979static char *setup_root_args(char *args)
 980{
 981        unsigned len = strlen(args) + 2 + 1;
 982        char *src, *dst, *buf;
 983
 984        /*
 985         * We need the same args as before, but with this substitution:
 986         * s!subvol=[^,]+!subvolid=0!
 987         *
 988         * Since the replacement string is up to 2 bytes longer than the
 989         * original, allocate strlen(args) + 2 + 1 bytes.
 990         */
 991
 992        src = strstr(args, "subvol=");
 993        /* This shouldn't happen, but just in case.. */
 994        if (!src)
 995                return NULL;
 996
 997        buf = dst = kmalloc(len, GFP_NOFS);
 998        if (!buf)
 999                return NULL;
1000
1001        /*
1002         * If the subvol= arg is not at the start of the string,
1003         * copy whatever precedes it into buf.
1004         */
1005        if (src != args) {
1006                *src++ = '\0';
1007                strcpy(buf, args);
1008                dst += strlen(args);
1009        }
1010
1011        strcpy(dst, "subvolid=0");
1012        dst += strlen("subvolid=0");
1013
1014        /*
1015         * If there is a "," after the original subvol=... string,
1016         * copy that suffix into our buffer.  Otherwise, we're done.
1017         */
1018        src = strchr(src, ',');
1019        if (src)
1020                strcpy(dst, src);
1021
1022        return buf;
1023}
1024
1025static struct dentry *mount_subvol(const char *subvol_name, int flags,
1026                                   const char *device_name, char *data)
1027{
1028        struct dentry *root;
1029        struct vfsmount *mnt;
1030        char *newargs;
1031
1032        newargs = setup_root_args(data);
1033        if (!newargs)
1034                return ERR_PTR(-ENOMEM);
1035        mnt = vfs_kern_mount(&btrfs_fs_type, flags, device_name,
1036                             newargs);
1037        kfree(newargs);
1038        if (IS_ERR(mnt))
1039                return ERR_CAST(mnt);
1040
1041        root = mount_subtree(mnt, subvol_name);
1042
1043        if (!IS_ERR(root) && !is_subvolume_inode(root->d_inode)) {
1044                struct super_block *s = root->d_sb;
1045                dput(root);
1046                root = ERR_PTR(-EINVAL);
1047                deactivate_locked_super(s);
1048                printk(KERN_ERR "btrfs: '%s' is not a valid subvolume\n",
1049                                subvol_name);
1050        }
1051
1052        return root;
1053}
1054
1055/*
1056 * Find a superblock for the given device / mount point.
1057 *
1058 * Note:  This is based on get_sb_bdev from fs/super.c with a few additions
1059 *        for multiple device setup.  Make sure to keep it in sync.
1060 */
1061static struct dentry *btrfs_mount(struct file_system_type *fs_type, int flags,
1062                const char *device_name, void *data)
1063{
1064        struct block_device *bdev = NULL;
1065        struct super_block *s;
1066        struct dentry *root;
1067        struct btrfs_fs_devices *fs_devices = NULL;
1068        struct btrfs_fs_info *fs_info = NULL;
1069        fmode_t mode = FMODE_READ;
1070        char *subvol_name = NULL;
1071        u64 subvol_objectid = 0;
1072        int error = 0;
1073
1074        if (!(flags & MS_RDONLY))
1075                mode |= FMODE_WRITE;
1076
1077        error = btrfs_parse_early_options(data, mode, fs_type,
1078                                          &subvol_name, &subvol_objectid,
1079                                          &fs_devices);
1080        if (error) {
1081                kfree(subvol_name);
1082                return ERR_PTR(error);
1083        }
1084
1085        if (subvol_name) {
1086                root = mount_subvol(subvol_name, flags, device_name, data);
1087                kfree(subvol_name);
1088                return root;
1089        }
1090
1091        error = btrfs_scan_one_device(device_name, mode, fs_type, &fs_devices);
1092        if (error)
1093                return ERR_PTR(error);
1094
1095        /*
1096         * Setup a dummy root and fs_info for test/set super.  This is because
1097         * we don't actually fill this stuff out until open_ctree, but we need
1098         * it for searching for existing supers, so this lets us do that and
1099         * then open_ctree will properly initialize everything later.
1100         */
1101        fs_info = kzalloc(sizeof(struct btrfs_fs_info), GFP_NOFS);
1102        if (!fs_info)
1103                return ERR_PTR(-ENOMEM);
1104
1105        fs_info->fs_devices = fs_devices;
1106
1107        fs_info->super_copy = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_NOFS);
1108        fs_info->super_for_commit = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_NOFS);
1109        if (!fs_info->super_copy || !fs_info->super_for_commit) {
1110                error = -ENOMEM;
1111                goto error_fs_info;
1112        }
1113
1114        error = btrfs_open_devices(fs_devices, mode, fs_type);
1115        if (error)
1116                goto error_fs_info;
1117
1118        if (!(flags & MS_RDONLY) && fs_devices->rw_devices == 0) {
1119                error = -EACCES;
1120                goto error_close_devices;
1121        }
1122
1123        bdev = fs_devices->latest_bdev;
1124        s = sget(fs_type, btrfs_test_super, btrfs_set_super, flags | MS_NOSEC,
1125                 fs_info);
1126        if (IS_ERR(s)) {
1127                error = PTR_ERR(s);
1128                goto error_close_devices;
1129        }
1130
1131        if (s->s_root) {
1132                btrfs_close_devices(fs_devices);
1133                free_fs_info(fs_info);
1134                if ((flags ^ s->s_flags) & MS_RDONLY)
1135                        error = -EBUSY;
1136        } else {
1137                char b[BDEVNAME_SIZE];
1138
1139                strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));
1140                btrfs_sb(s)->bdev_holder = fs_type;
1141                error = btrfs_fill_super(s, fs_devices, data,
1142                                         flags & MS_SILENT ? 1 : 0);
1143        }
1144
1145        root = !error ? get_default_root(s, subvol_objectid) : ERR_PTR(error);
1146        if (IS_ERR(root))
1147                deactivate_locked_super(s);
1148
1149        return root;
1150
1151error_close_devices:
1152        btrfs_close_devices(fs_devices);
1153error_fs_info:
1154        free_fs_info(fs_info);
1155        return ERR_PTR(error);
1156}
1157
1158static void btrfs_set_max_workers(struct btrfs_workers *workers, int new_limit)
1159{
1160        spin_lock_irq(&workers->lock);
1161        workers->max_workers = new_limit;
1162        spin_unlock_irq(&workers->lock);
1163}
1164
1165static void btrfs_resize_thread_pool(struct btrfs_fs_info *fs_info,
1166                                     int new_pool_size, int old_pool_size)
1167{
1168        if (new_pool_size == old_pool_size)
1169                return;
1170
1171        fs_info->thread_pool_size = new_pool_size;
1172
1173        printk(KERN_INFO "btrfs: resize thread pool %d -> %d\n",
1174               old_pool_size, new_pool_size);
1175
1176        btrfs_set_max_workers(&fs_info->generic_worker, new_pool_size);
1177        btrfs_set_max_workers(&fs_info->workers, new_pool_size);
1178        btrfs_set_max_workers(&fs_info->delalloc_workers, new_pool_size);
1179        btrfs_set_max_workers(&fs_info->submit_workers, new_pool_size);
1180        btrfs_set_max_workers(&fs_info->caching_workers, new_pool_size);
1181        btrfs_set_max_workers(&fs_info->fixup_workers, new_pool_size);
1182        btrfs_set_max_workers(&fs_info->endio_workers, new_pool_size);
1183        btrfs_set_max_workers(&fs_info->endio_meta_workers, new_pool_size);
1184        btrfs_set_max_workers(&fs_info->endio_meta_write_workers, new_pool_size);
1185        btrfs_set_max_workers(&fs_info->endio_write_workers, new_pool_size);
1186        btrfs_set_max_workers(&fs_info->endio_freespace_worker, new_pool_size);
1187        btrfs_set_max_workers(&fs_info->delayed_workers, new_pool_size);
1188        btrfs_set_max_workers(&fs_info->readahead_workers, new_pool_size);
1189        btrfs_set_max_workers(&fs_info->scrub_wr_completion_workers,
1190                              new_pool_size);
1191}
1192
1193static inline void btrfs_remount_prepare(struct btrfs_fs_info *fs_info)
1194{
1195        set_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
1196}
1197
1198static inline void btrfs_remount_begin(struct btrfs_fs_info *fs_info,
1199                                       unsigned long old_opts, int flags)
1200{
1201        if (btrfs_raw_test_opt(old_opts, AUTO_DEFRAG) &&
1202            (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) ||
1203             (flags & MS_RDONLY))) {
1204                /* wait for any defraggers to finish */
1205                wait_event(fs_info->transaction_wait,
1206                           (atomic_read(&fs_info->defrag_running) == 0));
1207                if (flags & MS_RDONLY)
1208                        sync_filesystem(fs_info->sb);
1209        }
1210}
1211
1212static inline void btrfs_remount_cleanup(struct btrfs_fs_info *fs_info,
1213                                         unsigned long old_opts)
1214{
1215        /*
1216         * We need cleanup all defragable inodes if the autodefragment is
1217         * close or the fs is R/O.
1218         */
1219        if (btrfs_raw_test_opt(old_opts, AUTO_DEFRAG) &&
1220            (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) ||
1221             (fs_info->sb->s_flags & MS_RDONLY))) {
1222                btrfs_cleanup_defrag_inodes(fs_info);
1223        }
1224
1225        clear_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
1226}
1227
1228static int btrfs_remount(struct super_block *sb, int *flags, char *data)
1229{
1230        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
1231        struct btrfs_root *root = fs_info->tree_root;
1232        unsigned old_flags = sb->s_flags;
1233        unsigned long old_opts = fs_info->mount_opt;
1234        unsigned long old_compress_type = fs_info->compress_type;
1235        u64 old_max_inline = fs_info->max_inline;
1236        u64 old_alloc_start = fs_info->alloc_start;
1237        int old_thread_pool_size = fs_info->thread_pool_size;
1238        unsigned int old_metadata_ratio = fs_info->metadata_ratio;
1239        int ret;
1240
1241        btrfs_remount_prepare(fs_info);
1242
1243        ret = btrfs_parse_options(root, data);
1244        if (ret) {
1245                ret = -EINVAL;
1246                goto restore;
1247        }
1248
1249        btrfs_remount_begin(fs_info, old_opts, *flags);
1250        btrfs_resize_thread_pool(fs_info,
1251                fs_info->thread_pool_size, old_thread_pool_size);
1252
1253        if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
1254                goto out;
1255
1256        if (*flags & MS_RDONLY) {
1257                /*
1258                 * this also happens on 'umount -rf' or on shutdown, when
1259                 * the filesystem is busy.
1260                 */
1261                sb->s_flags |= MS_RDONLY;
1262
1263                btrfs_dev_replace_suspend_for_unmount(fs_info);
1264                btrfs_scrub_cancel(fs_info);
1265                btrfs_pause_balance(fs_info);
1266
1267                ret = btrfs_commit_super(root);
1268                if (ret)
1269                        goto restore;
1270        } else {
1271                if (fs_info->fs_devices->rw_devices == 0) {
1272                        ret = -EACCES;
1273                        goto restore;
1274                }
1275
1276                if (fs_info->fs_devices->missing_devices >
1277                     fs_info->num_tolerated_disk_barrier_failures &&
1278                    !(*flags & MS_RDONLY)) {
1279                        printk(KERN_WARNING
1280                               "Btrfs: too many missing devices, writeable remount is not allowed\n");
1281                        ret = -EACCES;
1282                        goto restore;
1283                }
1284
1285                if (btrfs_super_log_root(fs_info->super_copy) != 0) {
1286                        ret = -EINVAL;
1287                        goto restore;
1288                }
1289
1290                ret = btrfs_cleanup_fs_roots(fs_info);
1291                if (ret)
1292                        goto restore;
1293
1294                /* recover relocation */
1295                ret = btrfs_recover_relocation(root);
1296                if (ret)
1297                        goto restore;
1298
1299                ret = btrfs_resume_balance_async(fs_info);
1300                if (ret)
1301                        goto restore;
1302
1303                ret = btrfs_resume_dev_replace_async(fs_info);
1304                if (ret) {
1305                        pr_warn("btrfs: failed to resume dev_replace\n");
1306                        goto restore;
1307                }
1308                sb->s_flags &= ~MS_RDONLY;
1309        }
1310out:
1311        btrfs_remount_cleanup(fs_info, old_opts);
1312        return 0;
1313
1314restore:
1315        /* We've hit an error - don't reset MS_RDONLY */
1316        if (sb->s_flags & MS_RDONLY)
1317                old_flags |= MS_RDONLY;
1318        sb->s_flags = old_flags;
1319        fs_info->mount_opt = old_opts;
1320        fs_info->compress_type = old_compress_type;
1321        fs_info->max_inline = old_max_inline;
1322        mutex_lock(&fs_info->chunk_mutex);
1323        fs_info->alloc_start = old_alloc_start;
1324        mutex_unlock(&fs_info->chunk_mutex);
1325        btrfs_resize_thread_pool(fs_info,
1326                old_thread_pool_size, fs_info->thread_pool_size);
1327        fs_info->metadata_ratio = old_metadata_ratio;
1328        btrfs_remount_cleanup(fs_info, old_opts);
1329        return ret;
1330}
1331
1332/* Used to sort the devices by max_avail(descending sort) */
1333static int btrfs_cmp_device_free_bytes(const void *dev_info1,
1334                                       const void *dev_info2)
1335{
1336        if (((struct btrfs_device_info *)dev_info1)->max_avail >
1337            ((struct btrfs_device_info *)dev_info2)->max_avail)
1338                return -1;
1339        else if (((struct btrfs_device_info *)dev_info1)->max_avail <
1340                 ((struct btrfs_device_info *)dev_info2)->max_avail)
1341                return 1;
1342        else
1343        return 0;
1344}
1345
1346/*
1347 * sort the devices by max_avail, in which max free extent size of each device
1348 * is stored.(Descending Sort)
1349 */
1350static inline void btrfs_descending_sort_devices(
1351                                        struct btrfs_device_info *devices,
1352                                        size_t nr_devices)
1353{
1354        sort(devices, nr_devices, sizeof(struct btrfs_device_info),
1355             btrfs_cmp_device_free_bytes, NULL);
1356}
1357
1358/*
1359 * The helper to calc the free space on the devices that can be used to store
1360 * file data.
1361 */
1362static int btrfs_calc_avail_data_space(struct btrfs_root *root, u64 *free_bytes)
1363{
1364        struct btrfs_fs_info *fs_info = root->fs_info;
1365        struct btrfs_device_info *devices_info;
1366        struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
1367        struct btrfs_device *device;
1368        u64 skip_space;
1369        u64 type;
1370        u64 avail_space;
1371        u64 used_space;
1372        u64 min_stripe_size;
1373        int min_stripes = 1, num_stripes = 1;
1374        int i = 0, nr_devices;
1375        int ret;
1376
1377        nr_devices = fs_info->fs_devices->open_devices;
1378        BUG_ON(!nr_devices);
1379
1380        devices_info = kmalloc(sizeof(*devices_info) * nr_devices,
1381                               GFP_NOFS);
1382        if (!devices_info)
1383                return -ENOMEM;
1384
1385        /* calc min stripe number for data space alloction */
1386        type = btrfs_get_alloc_profile(root, 1);
1387        if (type & BTRFS_BLOCK_GROUP_RAID0) {
1388                min_stripes = 2;
1389                num_stripes = nr_devices;
1390        } else if (type & BTRFS_BLOCK_GROUP_RAID1) {
1391                min_stripes = 2;
1392                num_stripes = 2;
1393        } else if (type & BTRFS_BLOCK_GROUP_RAID10) {
1394                min_stripes = 4;
1395                num_stripes = 4;
1396        }
1397
1398        if (type & BTRFS_BLOCK_GROUP_DUP)
1399                min_stripe_size = 2 * BTRFS_STRIPE_LEN;
1400        else
1401                min_stripe_size = BTRFS_STRIPE_LEN;
1402
1403        list_for_each_entry(device, &fs_devices->devices, dev_list) {
1404                if (!device->in_fs_metadata || !device->bdev ||
1405                    device->is_tgtdev_for_dev_replace)
1406                        continue;
1407
1408                avail_space = device->total_bytes - device->bytes_used;
1409
1410                /* align with stripe_len */
1411                do_div(avail_space, BTRFS_STRIPE_LEN);
1412                avail_space *= BTRFS_STRIPE_LEN;
1413
1414                /*
1415                 * In order to avoid overwritting the superblock on the drive,
1416                 * btrfs starts at an offset of at least 1MB when doing chunk
1417                 * allocation.
1418                 */
1419                skip_space = 1024 * 1024;
1420
1421                /* user can set the offset in fs_info->alloc_start. */
1422                if (fs_info->alloc_start + BTRFS_STRIPE_LEN <=
1423                    device->total_bytes)
1424                        skip_space = max(fs_info->alloc_start, skip_space);
1425
1426                /*
1427                 * btrfs can not use the free space in [0, skip_space - 1],
1428                 * we must subtract it from the total. In order to implement
1429                 * it, we account the used space in this range first.
1430                 */
1431                ret = btrfs_account_dev_extents_size(device, 0, skip_space - 1,
1432                                                     &used_space);
1433                if (ret) {
1434                        kfree(devices_info);
1435                        return ret;
1436                }
1437
1438                /* calc the free space in [0, skip_space - 1] */
1439                skip_space -= used_space;
1440
1441                /*
1442                 * we can use the free space in [0, skip_space - 1], subtract
1443                 * it from the total.
1444                 */
1445                if (avail_space && avail_space >= skip_space)
1446                        avail_space -= skip_space;
1447                else
1448                        avail_space = 0;
1449
1450                if (avail_space < min_stripe_size)
1451                        continue;
1452
1453                devices_info[i].dev = device;
1454                devices_info[i].max_avail = avail_space;
1455
1456                i++;
1457        }
1458
1459        nr_devices = i;
1460
1461        btrfs_descending_sort_devices(devices_info, nr_devices);
1462
1463        i = nr_devices - 1;
1464        avail_space = 0;
1465        while (nr_devices >= min_stripes) {
1466                if (num_stripes > nr_devices)
1467                        num_stripes = nr_devices;
1468
1469                if (devices_info[i].max_avail >= min_stripe_size) {
1470                        int j;
1471                        u64 alloc_size;
1472
1473                        avail_space += devices_info[i].max_avail * num_stripes;
1474                        alloc_size = devices_info[i].max_avail;
1475                        for (j = i + 1 - num_stripes; j <= i; j++)
1476                                devices_info[j].max_avail -= alloc_size;
1477                }
1478                i--;
1479                nr_devices--;
1480        }
1481
1482        kfree(devices_info);
1483        *free_bytes = avail_space;
1484        return 0;
1485}
1486
1487static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)
1488{
1489        struct btrfs_fs_info *fs_info = btrfs_sb(dentry->d_sb);
1490        struct btrfs_super_block *disk_super = fs_info->super_copy;
1491        struct list_head *head = &fs_info->space_info;
1492        struct btrfs_space_info *found;
1493        u64 total_used = 0;
1494        u64 total_free_data = 0;
1495        int bits = dentry->d_sb->s_blocksize_bits;
1496        __be32 *fsid = (__be32 *)fs_info->fsid;
1497        int ret;
1498
1499        /* holding chunk_muext to avoid allocating new chunks */
1500        mutex_lock(&fs_info->chunk_mutex);
1501        rcu_read_lock();
1502        list_for_each_entry_rcu(found, head, list) {
1503                if (found->flags & BTRFS_BLOCK_GROUP_DATA) {
1504                        total_free_data += found->disk_total - found->disk_used;
1505                        total_free_data -=
1506                                btrfs_account_ro_block_groups_free_space(found);
1507                }
1508
1509                total_used += found->disk_used;
1510        }
1511        rcu_read_unlock();
1512
1513        buf->f_namelen = BTRFS_NAME_LEN;
1514        buf->f_blocks = btrfs_super_total_bytes(disk_super) >> bits;
1515        buf->f_bfree = buf->f_blocks - (total_used >> bits);
1516        buf->f_bsize = dentry->d_sb->s_blocksize;
1517        buf->f_type = BTRFS_SUPER_MAGIC;
1518        buf->f_bavail = total_free_data;
1519        ret = btrfs_calc_avail_data_space(fs_info->tree_root, &total_free_data);
1520        if (ret) {
1521                mutex_unlock(&fs_info->chunk_mutex);
1522                return ret;
1523        }
1524        buf->f_bavail += total_free_data;
1525        buf->f_bavail = buf->f_bavail >> bits;
1526        mutex_unlock(&fs_info->chunk_mutex);
1527
1528        /* We treat it as constant endianness (it doesn't matter _which_)
1529           because we want the fsid to come out the same whether mounted
1530           on a big-endian or little-endian host */
1531        buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
1532        buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
1533        /* Mask in the root object ID too, to disambiguate subvols */
1534        buf->f_fsid.val[0] ^= BTRFS_I(dentry->d_inode)->root->objectid >> 32;
1535        buf->f_fsid.val[1] ^= BTRFS_I(dentry->d_inode)->root->objectid;
1536
1537        return 0;
1538}
1539
1540static void btrfs_kill_super(struct super_block *sb)
1541{
1542        struct btrfs_fs_info *fs_info = btrfs_sb(sb);
1543        kill_anon_super(sb);
1544        free_fs_info(fs_info);
1545}
1546
1547static struct file_system_type btrfs_fs_type = {
1548        .owner          = THIS_MODULE,
1549        .name           = "btrfs",
1550        .mount          = btrfs_mount,
1551        .kill_sb        = btrfs_kill_super,
1552        .fs_flags       = FS_REQUIRES_DEV,
1553};
1554MODULE_ALIAS_FS("btrfs");
1555
1556/*
1557 * used by btrfsctl to scan devices when no FS is mounted
1558 */
1559static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
1560                                unsigned long arg)
1561{
1562        struct btrfs_ioctl_vol_args *vol;
1563        struct btrfs_fs_devices *fs_devices;
1564        int ret = -ENOTTY;
1565
1566        if (!capable(CAP_SYS_ADMIN))
1567                return -EPERM;
1568
1569        vol = memdup_user((void __user *)arg, sizeof(*vol));
1570        if (IS_ERR(vol))
1571                return PTR_ERR(vol);
1572
1573        switch (cmd) {
1574        case BTRFS_IOC_SCAN_DEV:
1575                ret = btrfs_scan_one_device(vol->name, FMODE_READ,
1576                                            &btrfs_fs_type, &fs_devices);
1577                break;
1578        case BTRFS_IOC_DEVICES_READY:
1579                ret = btrfs_scan_one_device(vol->name, FMODE_READ,
1580                                            &btrfs_fs_type, &fs_devices);
1581                if (ret)
1582                        break;
1583                ret = !(fs_devices->num_devices == fs_devices->total_devices);
1584                break;
1585        }
1586
1587        kfree(vol);
1588        return ret;
1589}
1590
1591static int btrfs_freeze(struct super_block *sb)
1592{
1593        struct btrfs_trans_handle *trans;
1594        struct btrfs_root *root = btrfs_sb(sb)->tree_root;
1595
1596        trans = btrfs_attach_transaction_barrier(root);
1597        if (IS_ERR(trans)) {
1598                /* no transaction, don't bother */
1599                if (PTR_ERR(trans) == -ENOENT)
1600                        return 0;
1601                return PTR_ERR(trans);
1602        }
1603        return btrfs_commit_transaction(trans, root);
1604}
1605
1606static int btrfs_unfreeze(struct super_block *sb)
1607{
1608        return 0;
1609}
1610
1611static int btrfs_show_devname(struct seq_file *m, struct dentry *root)
1612{
1613        struct btrfs_fs_info *fs_info = btrfs_sb(root->d_sb);
1614        struct btrfs_fs_devices *cur_devices;
1615        struct btrfs_device *dev, *first_dev = NULL;
1616        struct list_head *head;
1617        struct rcu_string *name;
1618
1619        mutex_lock(&fs_info->fs_devices->device_list_mutex);
1620        cur_devices = fs_info->fs_devices;
1621        while (cur_devices) {
1622                head = &cur_devices->devices;
1623                list_for_each_entry(dev, head, dev_list) {
1624                        if (dev->missing)
1625                                continue;
1626                        if (!first_dev || dev->devid < first_dev->devid)
1627                                first_dev = dev;
1628                }
1629                cur_devices = cur_devices->seed;
1630        }
1631
1632        if (first_dev) {
1633                rcu_read_lock();
1634                name = rcu_dereference(first_dev->name);
1635                seq_escape(m, name->str, " \t\n\\");
1636                rcu_read_unlock();
1637        } else {
1638                WARN_ON(1);
1639        }
1640        mutex_unlock(&fs_info->fs_devices->device_list_mutex);
1641        return 0;
1642}
1643
1644static const struct super_operations btrfs_super_ops = {
1645        .drop_inode     = btrfs_drop_inode,
1646        .evict_inode    = btrfs_evict_inode,
1647        .put_super      = btrfs_put_super,
1648        .sync_fs        = btrfs_sync_fs,
1649        .show_options   = btrfs_show_options,
1650        .show_devname   = btrfs_show_devname,
1651        .write_inode    = btrfs_write_inode,
1652        .alloc_inode    = btrfs_alloc_inode,
1653        .destroy_inode  = btrfs_destroy_inode,
1654        .statfs         = btrfs_statfs,
1655        .remount_fs     = btrfs_remount,
1656        .freeze_fs      = btrfs_freeze,
1657        .unfreeze_fs    = btrfs_unfreeze,
1658};
1659
1660static const struct file_operations btrfs_ctl_fops = {
1661        .unlocked_ioctl  = btrfs_control_ioctl,
1662        .compat_ioctl = btrfs_control_ioctl,
1663        .owner   = THIS_MODULE,
1664        .llseek = noop_llseek,
1665};
1666
1667static struct miscdevice btrfs_misc = {
1668        .minor          = BTRFS_MINOR,
1669        .name           = "btrfs-control",
1670        .fops           = &btrfs_ctl_fops
1671};
1672
1673MODULE_ALIAS_MISCDEV(BTRFS_MINOR);
1674MODULE_ALIAS("devname:btrfs-control");
1675
1676static int btrfs_interface_init(void)
1677{
1678        return misc_register(&btrfs_misc);
1679}
1680
1681static void btrfs_interface_exit(void)
1682{
1683        if (misc_deregister(&btrfs_misc) < 0)
1684                printk(KERN_INFO "btrfs: misc_deregister failed for control device\n");
1685}
1686
1687static void btrfs_print_info(void)
1688{
1689        printk(KERN_INFO "Btrfs loaded"
1690#ifdef CONFIG_BTRFS_DEBUG
1691                        ", debug=on"
1692#endif
1693#ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
1694                        ", integrity-checker=on"
1695#endif
1696                        "\n");
1697}
1698
1699static int __init init_btrfs_fs(void)
1700{
1701        int err;
1702
1703        err = btrfs_init_sysfs();
1704        if (err)
1705                return err;
1706
1707        btrfs_init_compress();
1708
1709        err = btrfs_init_cachep();
1710        if (err)
1711                goto free_compress;
1712
1713        err = extent_io_init();
1714        if (err)
1715                goto free_cachep;
1716
1717        err = extent_map_init();
1718        if (err)
1719                goto free_extent_io;
1720
1721        err = ordered_data_init();
1722        if (err)
1723                goto free_extent_map;
1724
1725        err = btrfs_delayed_inode_init();
1726        if (err)
1727                goto free_ordered_data;
1728
1729        err = btrfs_auto_defrag_init();
1730        if (err)
1731                goto free_delayed_inode;
1732
1733        err = btrfs_delayed_ref_init();
1734        if (err)
1735                goto free_auto_defrag;
1736
1737        err = btrfs_interface_init();
1738        if (err)
1739                goto free_delayed_ref;
1740
1741        err = register_filesystem(&btrfs_fs_type);
1742        if (err)
1743                goto unregister_ioctl;
1744
1745        btrfs_init_lockdep();
1746
1747        btrfs_print_info();
1748        btrfs_test_free_space_cache();
1749
1750        return 0;
1751
1752unregister_ioctl:
1753        btrfs_interface_exit();
1754free_delayed_ref:
1755        btrfs_delayed_ref_exit();
1756free_auto_defrag:
1757        btrfs_auto_defrag_exit();
1758free_delayed_inode:
1759        btrfs_delayed_inode_exit();
1760free_ordered_data:
1761        ordered_data_exit();
1762free_extent_map:
1763        extent_map_exit();
1764free_extent_io:
1765        extent_io_exit();
1766free_cachep:
1767        btrfs_destroy_cachep();
1768free_compress:
1769        btrfs_exit_compress();
1770        btrfs_exit_sysfs();
1771        return err;
1772}
1773
1774static void __exit exit_btrfs_fs(void)
1775{
1776        btrfs_destroy_cachep();
1777        btrfs_delayed_ref_exit();
1778        btrfs_auto_defrag_exit();
1779        btrfs_delayed_inode_exit();
1780        ordered_data_exit();
1781        extent_map_exit();
1782        extent_io_exit();
1783        btrfs_interface_exit();
1784        unregister_filesystem(&btrfs_fs_type);
1785        btrfs_exit_sysfs();
1786        btrfs_cleanup_fs_uuids();
1787        btrfs_exit_compress();
1788}
1789
1790module_init(init_btrfs_fs)
1791module_exit(exit_btrfs_fs)
1792
1793MODULE_LICENSE("GPL");
1794