~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/btrfs/super.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/btrfs/super.c (Version linux-6.12-rc7) and /fs/btrfs/super.c (Version linux-6.0.19)


  1 // SPDX-License-Identifier: GPL-2.0                 1 // SPDX-License-Identifier: GPL-2.0
  2 /*                                                  2 /*
  3  * Copyright (C) 2007 Oracle.  All rights rese      3  * Copyright (C) 2007 Oracle.  All rights reserved.
  4  */                                                 4  */
  5                                                     5 
  6 #include <linux/blkdev.h>                           6 #include <linux/blkdev.h>
  7 #include <linux/module.h>                           7 #include <linux/module.h>
  8 #include <linux/fs.h>                               8 #include <linux/fs.h>
  9 #include <linux/pagemap.h>                          9 #include <linux/pagemap.h>
 10 #include <linux/highmem.h>                         10 #include <linux/highmem.h>
 11 #include <linux/time.h>                            11 #include <linux/time.h>
 12 #include <linux/init.h>                            12 #include <linux/init.h>
 13 #include <linux/seq_file.h>                        13 #include <linux/seq_file.h>
 14 #include <linux/string.h>                          14 #include <linux/string.h>
 15 #include <linux/backing-dev.h>                     15 #include <linux/backing-dev.h>
 16 #include <linux/mount.h>                           16 #include <linux/mount.h>
 17 #include <linux/writeback.h>                       17 #include <linux/writeback.h>
 18 #include <linux/statfs.h>                          18 #include <linux/statfs.h>
 19 #include <linux/compat.h>                          19 #include <linux/compat.h>
 20 #include <linux/parser.h>                          20 #include <linux/parser.h>
 21 #include <linux/ctype.h>                           21 #include <linux/ctype.h>
 22 #include <linux/namei.h>                           22 #include <linux/namei.h>
 23 #include <linux/miscdevice.h>                      23 #include <linux/miscdevice.h>
 24 #include <linux/magic.h>                           24 #include <linux/magic.h>
 25 #include <linux/slab.h>                            25 #include <linux/slab.h>
 26 #include <linux/ratelimit.h>                       26 #include <linux/ratelimit.h>
 27 #include <linux/crc32c.h>                          27 #include <linux/crc32c.h>
 28 #include <linux/btrfs.h>                           28 #include <linux/btrfs.h>
 29 #include <linux/security.h>                    << 
 30 #include <linux/fs_parser.h>                   << 
 31 #include <linux/swap.h>                        << 
 32 #include "messages.h"                          << 
 33 #include "delayed-inode.h"                         29 #include "delayed-inode.h"
 34 #include "ctree.h"                                 30 #include "ctree.h"
 35 #include "disk-io.h"                               31 #include "disk-io.h"
 36 #include "transaction.h"                           32 #include "transaction.h"
 37 #include "btrfs_inode.h"                           33 #include "btrfs_inode.h"
 38 #include "direct-io.h"                         !!  34 #include "print-tree.h"
 39 #include "props.h"                                 35 #include "props.h"
 40 #include "xattr.h"                                 36 #include "xattr.h"
 41 #include "bio.h"                               !!  37 #include "volumes.h"
 42 #include "export.h"                                38 #include "export.h"
 43 #include "compression.h"                           39 #include "compression.h"
                                                   >>  40 #include "rcu-string.h"
 44 #include "dev-replace.h"                           41 #include "dev-replace.h"
 45 #include "free-space-cache.h"                      42 #include "free-space-cache.h"
 46 #include "backref.h"                               43 #include "backref.h"
 47 #include "space-info.h"                            44 #include "space-info.h"
 48 #include "sysfs.h"                                 45 #include "sysfs.h"
 49 #include "zoned.h"                                 46 #include "zoned.h"
 50 #include "tests/btrfs-tests.h"                     47 #include "tests/btrfs-tests.h"
 51 #include "block-group.h"                           48 #include "block-group.h"
 52 #include "discard.h"                               49 #include "discard.h"
 53 #include "qgroup.h"                                50 #include "qgroup.h"
 54 #include "raid56.h"                                51 #include "raid56.h"
 55 #include "fs.h"                                << 
 56 #include "accessors.h"                         << 
 57 #include "defrag.h"                            << 
 58 #include "dir-item.h"                          << 
 59 #include "ioctl.h"                             << 
 60 #include "scrub.h"                             << 
 61 #include "verity.h"                            << 
 62 #include "super.h"                             << 
 63 #include "extent-tree.h"                       << 
 64 #define CREATE_TRACE_POINTS                        52 #define CREATE_TRACE_POINTS
 65 #include <trace/events/btrfs.h>                    53 #include <trace/events/btrfs.h>
 66                                                    54 
 67 static const struct super_operations btrfs_sup     55 static const struct super_operations btrfs_super_ops;
                                                   >>  56 
                                                   >>  57 /*
                                                   >>  58  * Types for mounting the default subvolume and a subvolume explicitly
                                                   >>  59  * requested by subvol=/path. That way the callchain is straightforward and we
                                                   >>  60  * don't have to play tricks with the mount options and recursive calls to
                                                   >>  61  * btrfs_mount.
                                                   >>  62  *
                                                   >>  63  * The new btrfs_root_fs_type also servers as a tag for the bdev_holder.
                                                   >>  64  */
 68 static struct file_system_type btrfs_fs_type;      65 static struct file_system_type btrfs_fs_type;
                                                   >>  66 static struct file_system_type btrfs_root_fs_type;
 69                                                    67 
 70 static void btrfs_put_super(struct super_block !!  68 static int btrfs_remount(struct super_block *sb, int *flags, char *data);
                                                   >>  69 
                                                   >>  70 #ifdef CONFIG_PRINTK
                                                   >>  71 
                                                   >>  72 #define STATE_STRING_PREFACE    ": state "
                                                   >>  73 #define STATE_STRING_BUF_LEN    (sizeof(STATE_STRING_PREFACE) + BTRFS_FS_STATE_COUNT)
                                                   >>  74 
                                                   >>  75 /*
                                                   >>  76  * Characters to print to indicate error conditions or uncommon filesystem state.
                                                   >>  77  * RO is not an error.
                                                   >>  78  */
                                                   >>  79 static const char fs_state_chars[] = {
                                                   >>  80         [BTRFS_FS_STATE_ERROR]                  = 'E',
                                                   >>  81         [BTRFS_FS_STATE_REMOUNTING]             = 'M',
                                                   >>  82         [BTRFS_FS_STATE_RO]                     = 0,
                                                   >>  83         [BTRFS_FS_STATE_TRANS_ABORTED]          = 'A',
                                                   >>  84         [BTRFS_FS_STATE_DEV_REPLACING]          = 'R',
                                                   >>  85         [BTRFS_FS_STATE_DUMMY_FS_INFO]          = 0,
                                                   >>  86         [BTRFS_FS_STATE_NO_CSUMS]               = 'C',
                                                   >>  87         [BTRFS_FS_STATE_LOG_CLEANUP_ERROR]      = 'L',
                                                   >>  88 };
                                                   >>  89 
                                                   >>  90 static void btrfs_state_to_string(const struct btrfs_fs_info *info, char *buf)
 71 {                                                  91 {
 72         struct btrfs_fs_info *fs_info = btrfs_ !!  92         unsigned int bit;
                                                   >>  93         bool states_printed = false;
                                                   >>  94         unsigned long fs_state = READ_ONCE(info->fs_state);
                                                   >>  95         char *curr = buf;
 73                                                    96 
 74         btrfs_info(fs_info, "last unmount of f !!  97         memcpy(curr, STATE_STRING_PREFACE, sizeof(STATE_STRING_PREFACE));
 75         close_ctree(fs_info);                  !!  98         curr += sizeof(STATE_STRING_PREFACE) - 1;
                                                   >>  99 
                                                   >> 100         for_each_set_bit(bit, &fs_state, sizeof(fs_state)) {
                                                   >> 101                 WARN_ON_ONCE(bit >= BTRFS_FS_STATE_COUNT);
                                                   >> 102                 if ((bit < BTRFS_FS_STATE_COUNT) && fs_state_chars[bit]) {
                                                   >> 103                         *curr++ = fs_state_chars[bit];
                                                   >> 104                         states_printed = true;
                                                   >> 105                 }
                                                   >> 106         }
                                                   >> 107 
                                                   >> 108         /* If no states were printed, reset the buffer */
                                                   >> 109         if (!states_printed)
                                                   >> 110                 curr = buf;
                                                   >> 111 
                                                   >> 112         *curr++ = 0;
                                                   >> 113 }
                                                   >> 114 #endif
                                                   >> 115 
                                                   >> 116 /*
                                                   >> 117  * Generally the error codes correspond to their respective errors, but there
                                                   >> 118  * are a few special cases.
                                                   >> 119  *
                                                   >> 120  * EUCLEAN: Any sort of corruption that we encounter.  The tree-checker for
                                                   >> 121  *          instance will return EUCLEAN if any of the blocks are corrupted in
                                                   >> 122  *          a way that is problematic.  We want to reserve EUCLEAN for these
                                                   >> 123  *          sort of corruptions.
                                                   >> 124  *
                                                   >> 125  * EROFS: If we check BTRFS_FS_STATE_ERROR and fail out with a return error, we
                                                   >> 126  *        need to use EROFS for this case.  We will have no idea of the
                                                   >> 127  *        original failure, that will have been reported at the time we tripped
                                                   >> 128  *        over the error.  Each subsequent error that doesn't have any context
                                                   >> 129  *        of the original error should use EROFS when handling BTRFS_FS_STATE_ERROR.
                                                   >> 130  */
                                                   >> 131 const char * __attribute_const__ btrfs_decode_error(int errno)
                                                   >> 132 {
                                                   >> 133         char *errstr = "unknown";
                                                   >> 134 
                                                   >> 135         switch (errno) {
                                                   >> 136         case -ENOENT:           /* -2 */
                                                   >> 137                 errstr = "No such entry";
                                                   >> 138                 break;
                                                   >> 139         case -EIO:              /* -5 */
                                                   >> 140                 errstr = "IO failure";
                                                   >> 141                 break;
                                                   >> 142         case -ENOMEM:           /* -12*/
                                                   >> 143                 errstr = "Out of memory";
                                                   >> 144                 break;
                                                   >> 145         case -EEXIST:           /* -17 */
                                                   >> 146                 errstr = "Object already exists";
                                                   >> 147                 break;
                                                   >> 148         case -ENOSPC:           /* -28 */
                                                   >> 149                 errstr = "No space left";
                                                   >> 150                 break;
                                                   >> 151         case -EROFS:            /* -30 */
                                                   >> 152                 errstr = "Readonly filesystem";
                                                   >> 153                 break;
                                                   >> 154         case -EOPNOTSUPP:       /* -95 */
                                                   >> 155                 errstr = "Operation not supported";
                                                   >> 156                 break;
                                                   >> 157         case -EUCLEAN:          /* -117 */
                                                   >> 158                 errstr = "Filesystem corrupted";
                                                   >> 159                 break;
                                                   >> 160         case -EDQUOT:           /* -122 */
                                                   >> 161                 errstr = "Quota exceeded";
                                                   >> 162                 break;
                                                   >> 163         }
                                                   >> 164 
                                                   >> 165         return errstr;
                                                   >> 166 }
                                                   >> 167 
                                                   >> 168 /*
                                                   >> 169  * __btrfs_handle_fs_error decodes expected errors from the caller and
                                                   >> 170  * invokes the appropriate error response.
                                                   >> 171  */
                                                   >> 172 __cold
                                                   >> 173 void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function,
                                                   >> 174                        unsigned int line, int errno, const char *fmt, ...)
                                                   >> 175 {
                                                   >> 176         struct super_block *sb = fs_info->sb;
                                                   >> 177 #ifdef CONFIG_PRINTK
                                                   >> 178         char statestr[STATE_STRING_BUF_LEN];
                                                   >> 179         const char *errstr;
                                                   >> 180 #endif
                                                   >> 181 
                                                   >> 182         /*
                                                   >> 183          * Special case: if the error is EROFS, and we're already
                                                   >> 184          * under SB_RDONLY, then it is safe here.
                                                   >> 185          */
                                                   >> 186         if (errno == -EROFS && sb_rdonly(sb))
                                                   >> 187                 return;
                                                   >> 188 
                                                   >> 189 #ifdef CONFIG_PRINTK
                                                   >> 190         errstr = btrfs_decode_error(errno);
                                                   >> 191         btrfs_state_to_string(fs_info, statestr);
                                                   >> 192         if (fmt) {
                                                   >> 193                 struct va_format vaf;
                                                   >> 194                 va_list args;
                                                   >> 195 
                                                   >> 196                 va_start(args, fmt);
                                                   >> 197                 vaf.fmt = fmt;
                                                   >> 198                 vaf.va = &args;
                                                   >> 199 
                                                   >> 200                 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s (%pV)\n",
                                                   >> 201                         sb->s_id, statestr, function, line, errno, errstr, &vaf);
                                                   >> 202                 va_end(args);
                                                   >> 203         } else {
                                                   >> 204                 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s\n",
                                                   >> 205                         sb->s_id, statestr, function, line, errno, errstr);
                                                   >> 206         }
                                                   >> 207 #endif
                                                   >> 208 
                                                   >> 209         /*
                                                   >> 210          * Today we only save the error info to memory.  Long term we'll
                                                   >> 211          * also send it down to the disk
                                                   >> 212          */
                                                   >> 213         set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state);
                                                   >> 214 
                                                   >> 215         /* Don't go through full error handling during mount */
                                                   >> 216         if (!(sb->s_flags & SB_BORN))
                                                   >> 217                 return;
                                                   >> 218 
                                                   >> 219         if (sb_rdonly(sb))
                                                   >> 220                 return;
                                                   >> 221 
                                                   >> 222         btrfs_discard_stop(fs_info);
                                                   >> 223 
                                                   >> 224         /* btrfs handle error by forcing the filesystem readonly */
                                                   >> 225         btrfs_set_sb_rdonly(sb);
                                                   >> 226         btrfs_info(fs_info, "forced readonly");
                                                   >> 227         /*
                                                   >> 228          * Note that a running device replace operation is not canceled here
                                                   >> 229          * although there is no way to update the progress. It would add the
                                                   >> 230          * risk of a deadlock, therefore the canceling is omitted. The only
                                                   >> 231          * penalty is that some I/O remains active until the procedure
                                                   >> 232          * completes. The next time when the filesystem is mounted writable
                                                   >> 233          * again, the device replace operation continues.
                                                   >> 234          */
 76 }                                                 235 }
 77                                                   236 
 78 /* Store the mount options related information !! 237 #ifdef CONFIG_PRINTK
 79 struct btrfs_fs_context {                      !! 238 static const char * const logtypes[] = {
 80         char *subvol_name;                     !! 239         "emergency",
 81         u64 subvol_objectid;                   !! 240         "alert",
 82         u64 max_inline;                        !! 241         "critical",
 83         u32 commit_interval;                   !! 242         "error",
 84         u32 metadata_ratio;                    !! 243         "warning",
 85         u32 thread_pool_size;                  !! 244         "notice",
 86         unsigned long long mount_opt;          !! 245         "info",
 87         unsigned long compress_type:4;         !! 246         "debug",
 88         unsigned int compress_level;           << 
 89         refcount_t refs;                       << 
 90 };                                                247 };
 91                                                   248 
                                                   >> 249 
                                                   >> 250 /*
                                                   >> 251  * Use one ratelimit state per log level so that a flood of less important
                                                   >> 252  * messages doesn't cause more important ones to be dropped.
                                                   >> 253  */
                                                   >> 254 static struct ratelimit_state printk_limits[] = {
                                                   >> 255         RATELIMIT_STATE_INIT(printk_limits[0], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 256         RATELIMIT_STATE_INIT(printk_limits[1], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 257         RATELIMIT_STATE_INIT(printk_limits[2], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 258         RATELIMIT_STATE_INIT(printk_limits[3], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 259         RATELIMIT_STATE_INIT(printk_limits[4], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 260         RATELIMIT_STATE_INIT(printk_limits[5], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 261         RATELIMIT_STATE_INIT(printk_limits[6], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 262         RATELIMIT_STATE_INIT(printk_limits[7], DEFAULT_RATELIMIT_INTERVAL, 100),
                                                   >> 263 };
                                                   >> 264 
                                                   >> 265 void __cold _btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
                                                   >> 266 {
                                                   >> 267         char lvl[PRINTK_MAX_SINGLE_HEADER_LEN + 1] = "\0";
                                                   >> 268         struct va_format vaf;
                                                   >> 269         va_list args;
                                                   >> 270         int kern_level;
                                                   >> 271         const char *type = logtypes[4];
                                                   >> 272         struct ratelimit_state *ratelimit = &printk_limits[4];
                                                   >> 273 
                                                   >> 274         va_start(args, fmt);
                                                   >> 275 
                                                   >> 276         while ((kern_level = printk_get_level(fmt)) != 0) {
                                                   >> 277                 size_t size = printk_skip_level(fmt) - fmt;
                                                   >> 278 
                                                   >> 279                 if (kern_level >= '' && kern_level <= '7') {
                                                   >> 280                         memcpy(lvl, fmt,  size);
                                                   >> 281                         lvl[size] = '\0';
                                                   >> 282                         type = logtypes[kern_level - ''];
                                                   >> 283                         ratelimit = &printk_limits[kern_level - ''];
                                                   >> 284                 }
                                                   >> 285                 fmt += size;
                                                   >> 286         }
                                                   >> 287 
                                                   >> 288         vaf.fmt = fmt;
                                                   >> 289         vaf.va = &args;
                                                   >> 290 
                                                   >> 291         if (__ratelimit(ratelimit)) {
                                                   >> 292                 if (fs_info) {
                                                   >> 293                         char statestr[STATE_STRING_BUF_LEN];
                                                   >> 294 
                                                   >> 295                         btrfs_state_to_string(fs_info, statestr);
                                                   >> 296                         _printk("%sBTRFS %s (device %s%s): %pV\n", lvl, type,
                                                   >> 297                                 fs_info->sb->s_id, statestr, &vaf);
                                                   >> 298                 } else {
                                                   >> 299                         _printk("%sBTRFS %s: %pV\n", lvl, type, &vaf);
                                                   >> 300                 }
                                                   >> 301         }
                                                   >> 302 
                                                   >> 303         va_end(args);
                                                   >> 304 }
                                                   >> 305 #endif
                                                   >> 306 
                                                   >> 307 #if BITS_PER_LONG == 32
                                                   >> 308 void __cold btrfs_warn_32bit_limit(struct btrfs_fs_info *fs_info)
                                                   >> 309 {
                                                   >> 310         if (!test_and_set_bit(BTRFS_FS_32BIT_WARN, &fs_info->flags)) {
                                                   >> 311                 btrfs_warn(fs_info, "reaching 32bit limit for logical addresses");
                                                   >> 312                 btrfs_warn(fs_info,
                                                   >> 313 "due to page cache limit on 32bit systems, btrfs can't access metadata at or beyond %lluT",
                                                   >> 314                            BTRFS_32BIT_MAX_FILE_SIZE >> 40);
                                                   >> 315                 btrfs_warn(fs_info,
                                                   >> 316                            "please consider upgrading to 64bit kernel/hardware");
                                                   >> 317         }
                                                   >> 318 }
                                                   >> 319 
                                                   >> 320 void __cold btrfs_err_32bit_limit(struct btrfs_fs_info *fs_info)
                                                   >> 321 {
                                                   >> 322         if (!test_and_set_bit(BTRFS_FS_32BIT_ERROR, &fs_info->flags)) {
                                                   >> 323                 btrfs_err(fs_info, "reached 32bit limit for logical addresses");
                                                   >> 324                 btrfs_err(fs_info,
                                                   >> 325 "due to page cache limit on 32bit systems, metadata beyond %lluT can't be accessed",
                                                   >> 326                           BTRFS_32BIT_MAX_FILE_SIZE >> 40);
                                                   >> 327                 btrfs_err(fs_info,
                                                   >> 328                            "please consider upgrading to 64bit kernel/hardware");
                                                   >> 329         }
                                                   >> 330 }
                                                   >> 331 #endif
                                                   >> 332 
                                                   >> 333 /*
                                                   >> 334  * We only mark the transaction aborted and then set the file system read-only.
                                                   >> 335  * This will prevent new transactions from starting or trying to join this
                                                   >> 336  * one.
                                                   >> 337  *
                                                   >> 338  * This means that error recovery at the call site is limited to freeing
                                                   >> 339  * any local memory allocations and passing the error code up without
                                                   >> 340  * further cleanup. The transaction should complete as it normally would
                                                   >> 341  * in the call path but will return -EIO.
                                                   >> 342  *
                                                   >> 343  * We'll complete the cleanup in btrfs_end_transaction and
                                                   >> 344  * btrfs_commit_transaction.
                                                   >> 345  */
                                                   >> 346 __cold
                                                   >> 347 void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
                                                   >> 348                                const char *function,
                                                   >> 349                                unsigned int line, int errno)
                                                   >> 350 {
                                                   >> 351         struct btrfs_fs_info *fs_info = trans->fs_info;
                                                   >> 352 
                                                   >> 353         WRITE_ONCE(trans->aborted, errno);
                                                   >> 354         WRITE_ONCE(trans->transaction->aborted, errno);
                                                   >> 355         /* Wake up anybody who may be waiting on this transaction */
                                                   >> 356         wake_up(&fs_info->transaction_wait);
                                                   >> 357         wake_up(&fs_info->transaction_blocked_wait);
                                                   >> 358         __btrfs_handle_fs_error(fs_info, function, line, errno, NULL);
                                                   >> 359 }
                                                   >> 360 /*
                                                   >> 361  * __btrfs_panic decodes unexpected, fatal errors from the caller,
                                                   >> 362  * issues an alert, and either panics or BUGs, depending on mount options.
                                                   >> 363  */
                                                   >> 364 __cold
                                                   >> 365 void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
                                                   >> 366                    unsigned int line, int errno, const char *fmt, ...)
                                                   >> 367 {
                                                   >> 368         char *s_id = "<unknown>";
                                                   >> 369         const char *errstr;
                                                   >> 370         struct va_format vaf = { .fmt = fmt };
                                                   >> 371         va_list args;
                                                   >> 372 
                                                   >> 373         if (fs_info)
                                                   >> 374                 s_id = fs_info->sb->s_id;
                                                   >> 375 
                                                   >> 376         va_start(args, fmt);
                                                   >> 377         vaf.va = &args;
                                                   >> 378 
                                                   >> 379         errstr = btrfs_decode_error(errno);
                                                   >> 380         if (fs_info && (btrfs_test_opt(fs_info, PANIC_ON_FATAL_ERROR)))
                                                   >> 381                 panic(KERN_CRIT "BTRFS panic (device %s) in %s:%d: %pV (errno=%d %s)\n",
                                                   >> 382                         s_id, function, line, &vaf, errno, errstr);
                                                   >> 383 
                                                   >> 384         btrfs_crit(fs_info, "panic in %s:%d: %pV (errno=%d %s)",
                                                   >> 385                    function, line, &vaf, errno, errstr);
                                                   >> 386         va_end(args);
                                                   >> 387         /* Caller calls BUG() */
                                                   >> 388 }
                                                   >> 389 
                                                   >> 390 static void btrfs_put_super(struct super_block *sb)
                                                   >> 391 {
                                                   >> 392         close_ctree(btrfs_sb(sb));
                                                   >> 393 }
                                                   >> 394 
 92 enum {                                            395 enum {
 93         Opt_acl,                               !! 396         Opt_acl, Opt_noacl,
 94         Opt_clear_cache,                          397         Opt_clear_cache,
 95         Opt_commit_interval,                      398         Opt_commit_interval,
 96         Opt_compress,                             399         Opt_compress,
 97         Opt_compress_force,                       400         Opt_compress_force,
 98         Opt_compress_force_type,                  401         Opt_compress_force_type,
 99         Opt_compress_type,                        402         Opt_compress_type,
100         Opt_degraded,                             403         Opt_degraded,
101         Opt_device,                               404         Opt_device,
102         Opt_fatal_errors,                         405         Opt_fatal_errors,
103         Opt_flushoncommit,                     !! 406         Opt_flushoncommit, Opt_noflushoncommit,
104         Opt_max_inline,                           407         Opt_max_inline,
105         Opt_barrier,                           !! 408         Opt_barrier, Opt_nobarrier,
106         Opt_datacow,                           !! 409         Opt_datacow, Opt_nodatacow,
107         Opt_datasum,                           !! 410         Opt_datasum, Opt_nodatasum,
108         Opt_defrag,                            !! 411         Opt_defrag, Opt_nodefrag,
109         Opt_discard,                           !! 412         Opt_discard, Opt_nodiscard,
110         Opt_discard_mode,                         413         Opt_discard_mode,
                                                   >> 414         Opt_norecovery,
111         Opt_ratio,                                415         Opt_ratio,
112         Opt_rescan_uuid_tree,                     416         Opt_rescan_uuid_tree,
113         Opt_skip_balance,                         417         Opt_skip_balance,
114         Opt_space_cache,                       !! 418         Opt_space_cache, Opt_no_space_cache,
115         Opt_space_cache_version,                  419         Opt_space_cache_version,
116         Opt_ssd,                               !! 420         Opt_ssd, Opt_nossd,
117         Opt_ssd_spread,                        !! 421         Opt_ssd_spread, Opt_nossd_spread,
118         Opt_subvol,                               422         Opt_subvol,
119         Opt_subvol_empty,                         423         Opt_subvol_empty,
120         Opt_subvolid,                             424         Opt_subvolid,
121         Opt_thread_pool,                          425         Opt_thread_pool,
122         Opt_treelog,                           !! 426         Opt_treelog, Opt_notreelog,
123         Opt_user_subvol_rm_allowed,               427         Opt_user_subvol_rm_allowed,
124         Opt_norecovery,                        << 
125                                                   428 
126         /* Rescue options */                      429         /* Rescue options */
127         Opt_rescue,                               430         Opt_rescue,
128         Opt_usebackuproot,                        431         Opt_usebackuproot,
129         Opt_nologreplay,                          432         Opt_nologreplay,
                                                   >> 433         Opt_ignorebadroots,
                                                   >> 434         Opt_ignoredatacsums,
                                                   >> 435         Opt_rescue_all,
                                                   >> 436 
                                                   >> 437         /* Deprecated options */
                                                   >> 438         Opt_recovery,
                                                   >> 439         Opt_inode_cache, Opt_noinode_cache,
130                                                   440 
131         /* Debugging options */                   441         /* Debugging options */
132         Opt_enospc_debug,                      !! 442         Opt_check_integrity,
                                                   >> 443         Opt_check_integrity_including_extent_data,
                                                   >> 444         Opt_check_integrity_print_mask,
                                                   >> 445         Opt_enospc_debug, Opt_noenospc_debug,
133 #ifdef CONFIG_BTRFS_DEBUG                         446 #ifdef CONFIG_BTRFS_DEBUG
134         Opt_fragment, Opt_fragment_data, Opt_f !! 447         Opt_fragment_data, Opt_fragment_metadata, Opt_fragment_all,
135 #endif                                            448 #endif
136 #ifdef CONFIG_BTRFS_FS_REF_VERIFY                 449 #ifdef CONFIG_BTRFS_FS_REF_VERIFY
137         Opt_ref_verify,                           450         Opt_ref_verify,
138 #endif                                            451 #endif
139         Opt_err,                                  452         Opt_err,
140 };                                                453 };
141                                                   454 
142 enum {                                         !! 455 static const match_table_t tokens = {
143         Opt_fatal_errors_panic,                !! 456         {Opt_acl, "acl"},
144         Opt_fatal_errors_bug,                  !! 457         {Opt_noacl, "noacl"},
145 };                                             !! 458         {Opt_clear_cache, "clear_cache"},
146                                                !! 459         {Opt_commit_interval, "commit=%u"},
147 static const struct constant_table btrfs_param !! 460         {Opt_compress, "compress"},
148         { "panic", Opt_fatal_errors_panic },   !! 461         {Opt_compress_type, "compress=%s"},
149         { "bug", Opt_fatal_errors_bug },       !! 462         {Opt_compress_force, "compress-force"},
150         {}                                     !! 463         {Opt_compress_force_type, "compress-force=%s"},
151 };                                             !! 464         {Opt_degraded, "degraded"},
                                                   >> 465         {Opt_device, "device=%s"},
                                                   >> 466         {Opt_fatal_errors, "fatal_errors=%s"},
                                                   >> 467         {Opt_flushoncommit, "flushoncommit"},
                                                   >> 468         {Opt_noflushoncommit, "noflushoncommit"},
                                                   >> 469         {Opt_inode_cache, "inode_cache"},
                                                   >> 470         {Opt_noinode_cache, "noinode_cache"},
                                                   >> 471         {Opt_max_inline, "max_inline=%s"},
                                                   >> 472         {Opt_barrier, "barrier"},
                                                   >> 473         {Opt_nobarrier, "nobarrier"},
                                                   >> 474         {Opt_datacow, "datacow"},
                                                   >> 475         {Opt_nodatacow, "nodatacow"},
                                                   >> 476         {Opt_datasum, "datasum"},
                                                   >> 477         {Opt_nodatasum, "nodatasum"},
                                                   >> 478         {Opt_defrag, "autodefrag"},
                                                   >> 479         {Opt_nodefrag, "noautodefrag"},
                                                   >> 480         {Opt_discard, "discard"},
                                                   >> 481         {Opt_discard_mode, "discard=%s"},
                                                   >> 482         {Opt_nodiscard, "nodiscard"},
                                                   >> 483         {Opt_norecovery, "norecovery"},
                                                   >> 484         {Opt_ratio, "metadata_ratio=%u"},
                                                   >> 485         {Opt_rescan_uuid_tree, "rescan_uuid_tree"},
                                                   >> 486         {Opt_skip_balance, "skip_balance"},
                                                   >> 487         {Opt_space_cache, "space_cache"},
                                                   >> 488         {Opt_no_space_cache, "nospace_cache"},
                                                   >> 489         {Opt_space_cache_version, "space_cache=%s"},
                                                   >> 490         {Opt_ssd, "ssd"},
                                                   >> 491         {Opt_nossd, "nossd"},
                                                   >> 492         {Opt_ssd_spread, "ssd_spread"},
                                                   >> 493         {Opt_nossd_spread, "nossd_spread"},
                                                   >> 494         {Opt_subvol, "subvol=%s"},
                                                   >> 495         {Opt_subvol_empty, "subvol="},
                                                   >> 496         {Opt_subvolid, "subvolid=%s"},
                                                   >> 497         {Opt_thread_pool, "thread_pool=%u"},
                                                   >> 498         {Opt_treelog, "treelog"},
                                                   >> 499         {Opt_notreelog, "notreelog"},
                                                   >> 500         {Opt_user_subvol_rm_allowed, "user_subvol_rm_allowed"},
152                                                   501 
153 enum {                                         !! 502         /* Rescue options */
154         Opt_discard_sync,                      !! 503         {Opt_rescue, "rescue=%s"},
155         Opt_discard_async,                     << 
156 };                                             << 
157                                                << 
158 static const struct constant_table btrfs_param << 
159         { "sync", Opt_discard_sync },          << 
160         { "async", Opt_discard_async },        << 
161         {}                                     << 
162 };                                             << 
163                                                << 
164 enum {                                         << 
165         Opt_space_cache_v1,                    << 
166         Opt_space_cache_v2,                    << 
167 };                                             << 
168                                                << 
169 static const struct constant_table btrfs_param << 
170         { "v1", Opt_space_cache_v1 },          << 
171         { "v2", Opt_space_cache_v2 },          << 
172         {}                                     << 
173 };                                             << 
174                                                << 
175 enum {                                         << 
176         Opt_rescue_usebackuproot,              << 
177         Opt_rescue_nologreplay,                << 
178         Opt_rescue_ignorebadroots,             << 
179         Opt_rescue_ignoredatacsums,            << 
180         Opt_rescue_ignoremetacsums,            << 
181         Opt_rescue_ignoresuperflags,           << 
182         Opt_rescue_parameter_all,              << 
183 };                                             << 
184                                                << 
185 static const struct constant_table btrfs_param << 
186         { "usebackuproot", Opt_rescue_usebacku << 
187         { "nologreplay", Opt_rescue_nologrepla << 
188         { "ignorebadroots", Opt_rescue_ignoreb << 
189         { "ibadroots", Opt_rescue_ignorebadroo << 
190         { "ignoredatacsums", Opt_rescue_ignore << 
191         { "ignoremetacsums", Opt_rescue_ignore << 
192         { "ignoresuperflags", Opt_rescue_ignor << 
193         { "idatacsums", Opt_rescue_ignoredatac << 
194         { "imetacsums", Opt_rescue_ignoremetac << 
195         { "isuperflags", Opt_rescue_ignoresupe << 
196         { "all", Opt_rescue_parameter_all },   << 
197         {}                                     << 
198 };                                             << 
199                                                << 
200 #ifdef CONFIG_BTRFS_DEBUG                      << 
201 enum {                                         << 
202         Opt_fragment_parameter_data,           << 
203         Opt_fragment_parameter_metadata,       << 
204         Opt_fragment_parameter_all,            << 
205 };                                             << 
206                                                << 
207 static const struct constant_table btrfs_param << 
208         { "data", Opt_fragment_parameter_data  << 
209         { "metadata", Opt_fragment_parameter_m << 
210         { "all", Opt_fragment_parameter_all }, << 
211         {}                                     << 
212 };                                             << 
213 #endif                                         << 
214                                                << 
215 static const struct fs_parameter_spec btrfs_fs << 
216         fsparam_flag_no("acl", Opt_acl),       << 
217         fsparam_flag_no("autodefrag", Opt_defr << 
218         fsparam_flag_no("barrier", Opt_barrier << 
219         fsparam_flag("clear_cache", Opt_clear_ << 
220         fsparam_u32("commit", Opt_commit_inter << 
221         fsparam_flag("compress", Opt_compress) << 
222         fsparam_string("compress", Opt_compres << 
223         fsparam_flag("compress-force", Opt_com << 
224         fsparam_string("compress-force", Opt_c << 
225         fsparam_flag_no("datacow", Opt_datacow << 
226         fsparam_flag_no("datasum", Opt_datasum << 
227         fsparam_flag("degraded", Opt_degraded) << 
228         fsparam_string("device", Opt_device),  << 
229         fsparam_flag_no("discard", Opt_discard << 
230         fsparam_enum("discard", Opt_discard_mo << 
231         fsparam_enum("fatal_errors", Opt_fatal << 
232         fsparam_flag_no("flushoncommit", Opt_f << 
233         fsparam_string("max_inline", Opt_max_i << 
234         fsparam_u32("metadata_ratio", Opt_rati << 
235         fsparam_flag("rescan_uuid_tree", Opt_r << 
236         fsparam_flag("skip_balance", Opt_skip_ << 
237         fsparam_flag_no("space_cache", Opt_spa << 
238         fsparam_enum("space_cache", Opt_space_ << 
239         fsparam_flag_no("ssd", Opt_ssd),       << 
240         fsparam_flag_no("ssd_spread", Opt_ssd_ << 
241         fsparam_string("subvol", Opt_subvol),  << 
242         fsparam_flag("subvol=", Opt_subvol_emp << 
243         fsparam_u64("subvolid", Opt_subvolid), << 
244         fsparam_u32("thread_pool", Opt_thread_ << 
245         fsparam_flag_no("treelog", Opt_treelog << 
246         fsparam_flag("user_subvol_rm_allowed", << 
247                                                << 
248         /* Rescue options. */                  << 
249         fsparam_enum("rescue", Opt_rescue, btr << 
250         /* Deprecated, with alias rescue=nolog    504         /* Deprecated, with alias rescue=nologreplay */
251         __fsparam(NULL, "nologreplay", Opt_nol !! 505         {Opt_nologreplay, "nologreplay"},
252         /* Deprecated, with alias rescue=useba    506         /* Deprecated, with alias rescue=usebackuproot */
253         __fsparam(NULL, "usebackuproot", Opt_u !! 507         {Opt_usebackuproot, "usebackuproot"},
254         /* For compatibility only, alias for " << 
255         fsparam_flag("norecovery", Opt_norecov << 
256                                                   508 
257         /* Debugging options. */               !! 509         /* Deprecated options */
258         fsparam_flag_no("enospc_debug", Opt_en !! 510         {Opt_recovery, "recovery"},
                                                   >> 511 
                                                   >> 512         /* Debugging options */
                                                   >> 513         {Opt_check_integrity, "check_int"},
                                                   >> 514         {Opt_check_integrity_including_extent_data, "check_int_data"},
                                                   >> 515         {Opt_check_integrity_print_mask, "check_int_print_mask=%u"},
                                                   >> 516         {Opt_enospc_debug, "enospc_debug"},
                                                   >> 517         {Opt_noenospc_debug, "noenospc_debug"},
259 #ifdef CONFIG_BTRFS_DEBUG                         518 #ifdef CONFIG_BTRFS_DEBUG
260         fsparam_enum("fragment", Opt_fragment, !! 519         {Opt_fragment_data, "fragment=data"},
                                                   >> 520         {Opt_fragment_metadata, "fragment=metadata"},
                                                   >> 521         {Opt_fragment_all, "fragment=all"},
261 #endif                                            522 #endif
262 #ifdef CONFIG_BTRFS_FS_REF_VERIFY                 523 #ifdef CONFIG_BTRFS_FS_REF_VERIFY
263         fsparam_flag("ref_verify", Opt_ref_ver !! 524         {Opt_ref_verify, "ref_verify"},
264 #endif                                            525 #endif
265         {}                                     !! 526         {Opt_err, NULL},
                                                   >> 527 };
                                                   >> 528 
                                                   >> 529 static const match_table_t rescue_tokens = {
                                                   >> 530         {Opt_usebackuproot, "usebackuproot"},
                                                   >> 531         {Opt_nologreplay, "nologreplay"},
                                                   >> 532         {Opt_ignorebadroots, "ignorebadroots"},
                                                   >> 533         {Opt_ignorebadroots, "ibadroots"},
                                                   >> 534         {Opt_ignoredatacsums, "ignoredatacsums"},
                                                   >> 535         {Opt_ignoredatacsums, "idatacsums"},
                                                   >> 536         {Opt_rescue_all, "all"},
                                                   >> 537         {Opt_err, NULL},
266 };                                                538 };
267                                                   539 
268 /* No support for restricting writes to btrfs  !! 540 static bool check_ro_option(struct btrfs_fs_info *fs_info, unsigned long opt,
269 static inline blk_mode_t btrfs_open_mode(struc !! 541                             const char *opt_name)
270 {                                                 542 {
271         return sb_open_mode(fc->sb_flags) & ~B !! 543         if (fs_info->mount_opt & opt) {
                                                   >> 544                 btrfs_err(fs_info, "%s must be used with ro mount option",
                                                   >> 545                           opt_name);
                                                   >> 546                 return true;
                                                   >> 547         }
                                                   >> 548         return false;
272 }                                                 549 }
273                                                   550 
274 static int btrfs_parse_param(struct fs_context !! 551 static int parse_rescue_options(struct btrfs_fs_info *info, const char *options)
275 {                                                 552 {
276         struct btrfs_fs_context *ctx = fc->fs_ !! 553         char *opts;
277         struct fs_parse_result result;         !! 554         char *orig;
278         int opt;                               !! 555         char *p;
                                                   >> 556         substring_t args[MAX_OPT_ARGS];
                                                   >> 557         int ret = 0;
279                                                   558 
280         opt = fs_parse(fc, btrfs_fs_parameters !! 559         opts = kstrdup(options, GFP_KERNEL);
281         if (opt < 0)                           !! 560         if (!opts)
282                 return opt;                    !! 561                 return -ENOMEM;
                                                   >> 562         orig = opts;
283                                                   563 
284         switch (opt) {                         !! 564         while ((p = strsep(&opts, ":")) != NULL) {
285         case Opt_degraded:                     !! 565                 int token;
286                 btrfs_set_opt(ctx->mount_opt,  << 
287                 break;                         << 
288         case Opt_subvol_empty:                 << 
289                 /*                             << 
290                  * This exists because we used << 
291                  * keeping it to maintain ABI. << 
292                  * empty subvol= again").      << 
293                  */                            << 
294                 break;                         << 
295         case Opt_subvol:                       << 
296                 kfree(ctx->subvol_name);       << 
297                 ctx->subvol_name = kstrdup(par << 
298                 if (!ctx->subvol_name)         << 
299                         return -ENOMEM;        << 
300                 break;                         << 
301         case Opt_subvolid:                     << 
302                 ctx->subvol_objectid = result. << 
303                                                   566 
304                 /* subvolid=0 means give me th !! 567                 if (!*p)
305                 if (!ctx->subvol_objectid)     !! 568                         continue;
306                         ctx->subvol_objectid = !! 569                 token = match_token(p, rescue_tokens, args);
307                 break;                         !! 570                 switch (token){
308         case Opt_device: {                     !! 571                 case Opt_usebackuproot:
309                 struct btrfs_device *device;   !! 572                         btrfs_info(info,
310                 blk_mode_t mode = btrfs_open_m !! 573                                    "trying to use backup root at mount time");
                                                   >> 574                         btrfs_set_opt(info->mount_opt, USEBACKUPROOT);
                                                   >> 575                         break;
                                                   >> 576                 case Opt_nologreplay:
                                                   >> 577                         btrfs_set_and_info(info, NOLOGREPLAY,
                                                   >> 578                                            "disabling log replay at mount time");
                                                   >> 579                         break;
                                                   >> 580                 case Opt_ignorebadroots:
                                                   >> 581                         btrfs_set_and_info(info, IGNOREBADROOTS,
                                                   >> 582                                            "ignoring bad roots");
                                                   >> 583                         break;
                                                   >> 584                 case Opt_ignoredatacsums:
                                                   >> 585                         btrfs_set_and_info(info, IGNOREDATACSUMS,
                                                   >> 586                                            "ignoring data csums");
                                                   >> 587                         break;
                                                   >> 588                 case Opt_rescue_all:
                                                   >> 589                         btrfs_info(info, "enabling all of the rescue options");
                                                   >> 590                         btrfs_set_and_info(info, IGNOREDATACSUMS,
                                                   >> 591                                            "ignoring data csums");
                                                   >> 592                         btrfs_set_and_info(info, IGNOREBADROOTS,
                                                   >> 593                                            "ignoring bad roots");
                                                   >> 594                         btrfs_set_and_info(info, NOLOGREPLAY,
                                                   >> 595                                            "disabling log replay at mount time");
                                                   >> 596                         break;
                                                   >> 597                 case Opt_err:
                                                   >> 598                         btrfs_info(info, "unrecognized rescue option '%s'", p);
                                                   >> 599                         ret = -EINVAL;
                                                   >> 600                         goto out;
                                                   >> 601                 default:
                                                   >> 602                         break;
                                                   >> 603                 }
311                                                   604 
312                 mutex_lock(&uuid_mutex);       << 
313                 device = btrfs_scan_one_device << 
314                 mutex_unlock(&uuid_mutex);     << 
315                 if (IS_ERR(device))            << 
316                         return PTR_ERR(device) << 
317                 break;                         << 
318         }                                         605         }
319         case Opt_datasum:                      !! 606 out:
320                 if (result.negated) {          !! 607         kfree(orig);
321                         btrfs_set_opt(ctx->mou !! 608         return ret;
322                 } else {                       !! 609 }
323                         btrfs_clear_opt(ctx->m << 
324                         btrfs_clear_opt(ctx->m << 
325                 }                              << 
326                 break;                         << 
327         case Opt_datacow:                      << 
328                 if (result.negated) {          << 
329                         btrfs_clear_opt(ctx->m << 
330                         btrfs_clear_opt(ctx->m << 
331                         btrfs_set_opt(ctx->mou << 
332                         btrfs_set_opt(ctx->mou << 
333                 } else {                       << 
334                         btrfs_clear_opt(ctx->m << 
335                 }                              << 
336                 break;                         << 
337         case Opt_compress_force:               << 
338         case Opt_compress_force_type:          << 
339                 btrfs_set_opt(ctx->mount_opt,  << 
340                 fallthrough;                   << 
341         case Opt_compress:                     << 
342         case Opt_compress_type:                << 
343                 /*                             << 
344                  * Provide the same semantics  << 
345                  * context, specifying the "co << 
346                  * "force-compress" without th << 
347                  * "compress-force=[no|none]"  << 
348                  */                            << 
349                 if (opt != Opt_compress_force  << 
350                         btrfs_clear_opt(ctx->m << 
351                                                   610 
352                 if (opt == Opt_compress || opt !! 611 /*
353                         ctx->compress_type = B !! 612  * Regular mount options parser.  Everything that is needed only when
354                         ctx->compress_level =  !! 613  * reading in a new superblock is parsed here.
355                         btrfs_set_opt(ctx->mou !! 614  * XXX JDM: This needs to be cleaned up for remount.
356                         btrfs_clear_opt(ctx->m !! 615  */
357                         btrfs_clear_opt(ctx->m !! 616 int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
358                 } else if (strncmp(param->stri !! 617                         unsigned long new_flags)
359                         ctx->compress_type = B !! 618 {
360                         ctx->compress_level =  !! 619         substring_t args[MAX_OPT_ARGS];
361                                 btrfs_compress !! 620         char *p, *num;
362                                                !! 621         int intarg;
363                         btrfs_set_opt(ctx->mou !! 622         int ret = 0;
364                         btrfs_clear_opt(ctx->m !! 623         char *compress_type;
365                         btrfs_clear_opt(ctx->m !! 624         bool compress_force = false;
366                 } else if (strncmp(param->stri !! 625         enum btrfs_compression_type saved_compress_type;
367                         ctx->compress_type = B !! 626         int saved_compress_level;
368                         ctx->compress_level =  !! 627         bool saved_compress_force;
369                         btrfs_set_opt(ctx->mou !! 628         int no_compress = 0;
370                         btrfs_clear_opt(ctx->m !! 629         const bool remounting = test_bit(BTRFS_FS_STATE_REMOUNTING, &info->fs_state);
371                         btrfs_clear_opt(ctx->m !! 630 
372                 } else if (strncmp(param->stri !! 631         if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE))
373                         ctx->compress_type = B !! 632                 btrfs_set_opt(info->mount_opt, FREE_SPACE_TREE);
374                         ctx->compress_level =  !! 633         else if (btrfs_free_space_cache_v1_active(info)) {
375                                 btrfs_compress !! 634                 if (btrfs_is_zoned(info)) {
376                                                !! 635                         btrfs_info(info,
377                         btrfs_set_opt(ctx->mou !! 636                         "zoned: clearing existing space cache");
378                         btrfs_clear_opt(ctx->m !! 637                         btrfs_set_super_cache_generation(info->super_copy, 0);
379                         btrfs_clear_opt(ctx->m << 
380                 } else if (strncmp(param->stri << 
381                         ctx->compress_level =  << 
382                         ctx->compress_type = 0 << 
383                         btrfs_clear_opt(ctx->m << 
384                         btrfs_clear_opt(ctx->m << 
385                 } else {                       << 
386                         btrfs_err(NULL, "unrec << 
387                                   param->strin << 
388                         return -EINVAL;        << 
389                 }                              << 
390                 break;                         << 
391         case Opt_ssd:                          << 
392                 if (result.negated) {          << 
393                         btrfs_set_opt(ctx->mou << 
394                         btrfs_clear_opt(ctx->m << 
395                         btrfs_clear_opt(ctx->m << 
396                 } else {                       << 
397                         btrfs_set_opt(ctx->mou << 
398                         btrfs_clear_opt(ctx->m << 
399                 }                              << 
400                 break;                         << 
401         case Opt_ssd_spread:                   << 
402                 if (result.negated) {          << 
403                         btrfs_clear_opt(ctx->m << 
404                 } else {                          638                 } else {
405                         btrfs_set_opt(ctx->mou !! 639                         btrfs_set_opt(info->mount_opt, SPACE_CACHE);
406                         btrfs_set_opt(ctx->mou << 
407                         btrfs_clear_opt(ctx->m << 
408                 }                              << 
409                 break;                         << 
410         case Opt_barrier:                      << 
411                 if (result.negated)            << 
412                         btrfs_set_opt(ctx->mou << 
413                 else                           << 
414                         btrfs_clear_opt(ctx->m << 
415                 break;                         << 
416         case Opt_thread_pool:                  << 
417                 if (result.uint_32 == 0) {     << 
418                         btrfs_err(NULL, "inval << 
419                         return -EINVAL;        << 
420                 }                                 640                 }
421                 ctx->thread_pool_size = result !! 641         }
422                 break;                         !! 642 
423         case Opt_max_inline:                   !! 643         /*
424                 ctx->max_inline = memparse(par !! 644          * Even the options are empty, we still need to do extra check
425                 break;                         !! 645          * against new flags
426         case Opt_acl:                          !! 646          */
427                 if (result.negated) {          !! 647         if (!options)
428                         fc->sb_flags &= ~SB_PO !! 648                 goto check;
429                 } else {                       !! 649 
                                                   >> 650         while ((p = strsep(&options, ",")) != NULL) {
                                                   >> 651                 int token;
                                                   >> 652                 if (!*p)
                                                   >> 653                         continue;
                                                   >> 654 
                                                   >> 655                 token = match_token(p, tokens, args);
                                                   >> 656                 switch (token) {
                                                   >> 657                 case Opt_degraded:
                                                   >> 658                         btrfs_info(info, "allowing degraded mounts");
                                                   >> 659                         btrfs_set_opt(info->mount_opt, DEGRADED);
                                                   >> 660                         break;
                                                   >> 661                 case Opt_subvol:
                                                   >> 662                 case Opt_subvol_empty:
                                                   >> 663                 case Opt_subvolid:
                                                   >> 664                 case Opt_device:
                                                   >> 665                         /*
                                                   >> 666                          * These are parsed by btrfs_parse_subvol_options or
                                                   >> 667                          * btrfs_parse_device_options and can be ignored here.
                                                   >> 668                          */
                                                   >> 669                         break;
                                                   >> 670                 case Opt_nodatasum:
                                                   >> 671                         btrfs_set_and_info(info, NODATASUM,
                                                   >> 672                                            "setting nodatasum");
                                                   >> 673                         break;
                                                   >> 674                 case Opt_datasum:
                                                   >> 675                         if (btrfs_test_opt(info, NODATASUM)) {
                                                   >> 676                                 if (btrfs_test_opt(info, NODATACOW))
                                                   >> 677                                         btrfs_info(info,
                                                   >> 678                                                    "setting datasum, datacow enabled");
                                                   >> 679                                 else
                                                   >> 680                                         btrfs_info(info, "setting datasum");
                                                   >> 681                         }
                                                   >> 682                         btrfs_clear_opt(info->mount_opt, NODATACOW);
                                                   >> 683                         btrfs_clear_opt(info->mount_opt, NODATASUM);
                                                   >> 684                         break;
                                                   >> 685                 case Opt_nodatacow:
                                                   >> 686                         if (!btrfs_test_opt(info, NODATACOW)) {
                                                   >> 687                                 if (!btrfs_test_opt(info, COMPRESS) ||
                                                   >> 688                                     !btrfs_test_opt(info, FORCE_COMPRESS)) {
                                                   >> 689                                         btrfs_info(info,
                                                   >> 690                                                    "setting nodatacow, compression disabled");
                                                   >> 691                                 } else {
                                                   >> 692                                         btrfs_info(info, "setting nodatacow");
                                                   >> 693                                 }
                                                   >> 694                         }
                                                   >> 695                         btrfs_clear_opt(info->mount_opt, COMPRESS);
                                                   >> 696                         btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
                                                   >> 697                         btrfs_set_opt(info->mount_opt, NODATACOW);
                                                   >> 698                         btrfs_set_opt(info->mount_opt, NODATASUM);
                                                   >> 699                         break;
                                                   >> 700                 case Opt_datacow:
                                                   >> 701                         btrfs_clear_and_info(info, NODATACOW,
                                                   >> 702                                              "setting datacow");
                                                   >> 703                         break;
                                                   >> 704                 case Opt_compress_force:
                                                   >> 705                 case Opt_compress_force_type:
                                                   >> 706                         compress_force = true;
                                                   >> 707                         fallthrough;
                                                   >> 708                 case Opt_compress:
                                                   >> 709                 case Opt_compress_type:
                                                   >> 710                         saved_compress_type = btrfs_test_opt(info,
                                                   >> 711                                                              COMPRESS) ?
                                                   >> 712                                 info->compress_type : BTRFS_COMPRESS_NONE;
                                                   >> 713                         saved_compress_force =
                                                   >> 714                                 btrfs_test_opt(info, FORCE_COMPRESS);
                                                   >> 715                         saved_compress_level = info->compress_level;
                                                   >> 716                         if (token == Opt_compress ||
                                                   >> 717                             token == Opt_compress_force ||
                                                   >> 718                             strncmp(args[0].from, "zlib", 4) == 0) {
                                                   >> 719                                 compress_type = "zlib";
                                                   >> 720 
                                                   >> 721                                 info->compress_type = BTRFS_COMPRESS_ZLIB;
                                                   >> 722                                 info->compress_level = BTRFS_ZLIB_DEFAULT_LEVEL;
                                                   >> 723                                 /*
                                                   >> 724                                  * args[0] contains uninitialized data since
                                                   >> 725                                  * for these tokens we don't expect any
                                                   >> 726                                  * parameter.
                                                   >> 727                                  */
                                                   >> 728                                 if (token != Opt_compress &&
                                                   >> 729                                     token != Opt_compress_force)
                                                   >> 730                                         info->compress_level =
                                                   >> 731                                           btrfs_compress_str2level(
                                                   >> 732                                                         BTRFS_COMPRESS_ZLIB,
                                                   >> 733                                                         args[0].from + 4);
                                                   >> 734                                 btrfs_set_opt(info->mount_opt, COMPRESS);
                                                   >> 735                                 btrfs_clear_opt(info->mount_opt, NODATACOW);
                                                   >> 736                                 btrfs_clear_opt(info->mount_opt, NODATASUM);
                                                   >> 737                                 no_compress = 0;
                                                   >> 738                         } else if (strncmp(args[0].from, "lzo", 3) == 0) {
                                                   >> 739                                 compress_type = "lzo";
                                                   >> 740                                 info->compress_type = BTRFS_COMPRESS_LZO;
                                                   >> 741                                 info->compress_level = 0;
                                                   >> 742                                 btrfs_set_opt(info->mount_opt, COMPRESS);
                                                   >> 743                                 btrfs_clear_opt(info->mount_opt, NODATACOW);
                                                   >> 744                                 btrfs_clear_opt(info->mount_opt, NODATASUM);
                                                   >> 745                                 btrfs_set_fs_incompat(info, COMPRESS_LZO);
                                                   >> 746                                 no_compress = 0;
                                                   >> 747                         } else if (strncmp(args[0].from, "zstd", 4) == 0) {
                                                   >> 748                                 compress_type = "zstd";
                                                   >> 749                                 info->compress_type = BTRFS_COMPRESS_ZSTD;
                                                   >> 750                                 info->compress_level =
                                                   >> 751                                         btrfs_compress_str2level(
                                                   >> 752                                                          BTRFS_COMPRESS_ZSTD,
                                                   >> 753                                                          args[0].from + 4);
                                                   >> 754                                 btrfs_set_opt(info->mount_opt, COMPRESS);
                                                   >> 755                                 btrfs_clear_opt(info->mount_opt, NODATACOW);
                                                   >> 756                                 btrfs_clear_opt(info->mount_opt, NODATASUM);
                                                   >> 757                                 btrfs_set_fs_incompat(info, COMPRESS_ZSTD);
                                                   >> 758                                 no_compress = 0;
                                                   >> 759                         } else if (strncmp(args[0].from, "no", 2) == 0) {
                                                   >> 760                                 compress_type = "no";
                                                   >> 761                                 info->compress_level = 0;
                                                   >> 762                                 info->compress_type = 0;
                                                   >> 763                                 btrfs_clear_opt(info->mount_opt, COMPRESS);
                                                   >> 764                                 btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
                                                   >> 765                                 compress_force = false;
                                                   >> 766                                 no_compress++;
                                                   >> 767                         } else {
                                                   >> 768                                 btrfs_err(info, "unrecognized compression value %s",
                                                   >> 769                                           args[0].from);
                                                   >> 770                                 ret = -EINVAL;
                                                   >> 771                                 goto out;
                                                   >> 772                         }
                                                   >> 773 
                                                   >> 774                         if (compress_force) {
                                                   >> 775                                 btrfs_set_opt(info->mount_opt, FORCE_COMPRESS);
                                                   >> 776                         } else {
                                                   >> 777                                 /*
                                                   >> 778                                  * If we remount from compress-force=xxx to
                                                   >> 779                                  * compress=xxx, we need clear FORCE_COMPRESS
                                                   >> 780                                  * flag, otherwise, there is no way for users
                                                   >> 781                                  * to disable forcible compression separately.
                                                   >> 782                                  */
                                                   >> 783                                 btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
                                                   >> 784                         }
                                                   >> 785                         if (no_compress == 1) {
                                                   >> 786                                 btrfs_info(info, "use no compression");
                                                   >> 787                         } else if ((info->compress_type != saved_compress_type) ||
                                                   >> 788                                    (compress_force != saved_compress_force) ||
                                                   >> 789                                    (info->compress_level != saved_compress_level)) {
                                                   >> 790                                 btrfs_info(info, "%s %s compression, level %d",
                                                   >> 791                                            (compress_force) ? "force" : "use",
                                                   >> 792                                            compress_type, info->compress_level);
                                                   >> 793                         }
                                                   >> 794                         compress_force = false;
                                                   >> 795                         break;
                                                   >> 796                 case Opt_ssd:
                                                   >> 797                         btrfs_set_and_info(info, SSD,
                                                   >> 798                                            "enabling ssd optimizations");
                                                   >> 799                         btrfs_clear_opt(info->mount_opt, NOSSD);
                                                   >> 800                         break;
                                                   >> 801                 case Opt_ssd_spread:
                                                   >> 802                         btrfs_set_and_info(info, SSD,
                                                   >> 803                                            "enabling ssd optimizations");
                                                   >> 804                         btrfs_set_and_info(info, SSD_SPREAD,
                                                   >> 805                                            "using spread ssd allocation scheme");
                                                   >> 806                         btrfs_clear_opt(info->mount_opt, NOSSD);
                                                   >> 807                         break;
                                                   >> 808                 case Opt_nossd:
                                                   >> 809                         btrfs_set_opt(info->mount_opt, NOSSD);
                                                   >> 810                         btrfs_clear_and_info(info, SSD,
                                                   >> 811                                              "not using ssd optimizations");
                                                   >> 812                         fallthrough;
                                                   >> 813                 case Opt_nossd_spread:
                                                   >> 814                         btrfs_clear_and_info(info, SSD_SPREAD,
                                                   >> 815                                              "not using spread ssd allocation scheme");
                                                   >> 816                         break;
                                                   >> 817                 case Opt_barrier:
                                                   >> 818                         btrfs_clear_and_info(info, NOBARRIER,
                                                   >> 819                                              "turning on barriers");
                                                   >> 820                         break;
                                                   >> 821                 case Opt_nobarrier:
                                                   >> 822                         btrfs_set_and_info(info, NOBARRIER,
                                                   >> 823                                            "turning off barriers");
                                                   >> 824                         break;
                                                   >> 825                 case Opt_thread_pool:
                                                   >> 826                         ret = match_int(&args[0], &intarg);
                                                   >> 827                         if (ret) {
                                                   >> 828                                 btrfs_err(info, "unrecognized thread_pool value %s",
                                                   >> 829                                           args[0].from);
                                                   >> 830                                 goto out;
                                                   >> 831                         } else if (intarg == 0) {
                                                   >> 832                                 btrfs_err(info, "invalid value 0 for thread_pool");
                                                   >> 833                                 ret = -EINVAL;
                                                   >> 834                                 goto out;
                                                   >> 835                         }
                                                   >> 836                         info->thread_pool_size = intarg;
                                                   >> 837                         break;
                                                   >> 838                 case Opt_max_inline:
                                                   >> 839                         num = match_strdup(&args[0]);
                                                   >> 840                         if (num) {
                                                   >> 841                                 info->max_inline = memparse(num, NULL);
                                                   >> 842                                 kfree(num);
                                                   >> 843 
                                                   >> 844                                 if (info->max_inline) {
                                                   >> 845                                         info->max_inline = min_t(u64,
                                                   >> 846                                                 info->max_inline,
                                                   >> 847                                                 info->sectorsize);
                                                   >> 848                                 }
                                                   >> 849                                 btrfs_info(info, "max_inline at %llu",
                                                   >> 850                                            info->max_inline);
                                                   >> 851                         } else {
                                                   >> 852                                 ret = -ENOMEM;
                                                   >> 853                                 goto out;
                                                   >> 854                         }
                                                   >> 855                         break;
                                                   >> 856                 case Opt_acl:
430 #ifdef CONFIG_BTRFS_FS_POSIX_ACL                  857 #ifdef CONFIG_BTRFS_FS_POSIX_ACL
431                         fc->sb_flags |= SB_POS !! 858                         info->sb->s_flags |= SB_POSIXACL;
                                                   >> 859                         break;
432 #else                                             860 #else
433                         btrfs_err(NULL, "suppo !! 861                         btrfs_err(info, "support for ACL not compiled in!");
434                         return -EINVAL;        !! 862                         ret = -EINVAL;
                                                   >> 863                         goto out;
435 #endif                                            864 #endif
436                 }                              !! 865                 case Opt_noacl:
437                 /*                             !! 866                         info->sb->s_flags &= ~SB_POSIXACL;
438                  * VFS limits the ability to t !! 867                         break;
439                  * despite every file system a !! 868                 case Opt_notreelog:
440                  * an oversight since we all d !! 869                         btrfs_set_and_info(info, NOTREELOG,
441                  * remounting.  So don't set t !! 870                                            "disabling tree log");
442                  * btrfs_reconfigure and do th !! 871                         break;
443                  */                            !! 872                 case Opt_treelog:
444                 if (fc->purpose != FS_CONTEXT_ !! 873                         btrfs_clear_and_info(info, NOTREELOG,
445                         fc->sb_flags_mask |= S !! 874                                              "enabling tree log");
446                 break;                         !! 875                         break;
447         case Opt_treelog:                      !! 876                 case Opt_norecovery:
448                 if (result.negated)            !! 877                 case Opt_nologreplay:
449                         btrfs_set_opt(ctx->mou !! 878                         btrfs_warn(info,
450                 else                           << 
451                         btrfs_clear_opt(ctx->m << 
452                 break;                         << 
453         case Opt_nologreplay:                  << 
454                 btrfs_warn(NULL,               << 
455                 "'nologreplay' is deprecated,     879                 "'nologreplay' is deprecated, use 'rescue=nologreplay' instead");
456                 btrfs_set_opt(ctx->mount_opt,  !! 880                         btrfs_set_and_info(info, NOLOGREPLAY,
457                 break;                         !! 881                                            "disabling log replay at mount time");
458         case Opt_norecovery:                   << 
459                 btrfs_info(NULL,               << 
460 "'norecovery' is for compatibility only, recom << 
461                 btrfs_set_opt(ctx->mount_opt,  << 
462                 break;                         << 
463         case Opt_flushoncommit:                << 
464                 if (result.negated)            << 
465                         btrfs_clear_opt(ctx->m << 
466                 else                           << 
467                         btrfs_set_opt(ctx->mou << 
468                 break;                         << 
469         case Opt_ratio:                        << 
470                 ctx->metadata_ratio = result.u << 
471                 break;                         << 
472         case Opt_discard:                      << 
473                 if (result.negated) {          << 
474                         btrfs_clear_opt(ctx->m << 
475                         btrfs_clear_opt(ctx->m << 
476                         btrfs_set_opt(ctx->mou << 
477                 } else {                       << 
478                         btrfs_set_opt(ctx->mou << 
479                         btrfs_clear_opt(ctx->m << 
480                 }                              << 
481                 break;                         << 
482         case Opt_discard_mode:                 << 
483                 switch (result.uint_32) {      << 
484                 case Opt_discard_sync:         << 
485                         btrfs_clear_opt(ctx->m << 
486                         btrfs_set_opt(ctx->mou << 
487                         break;                 << 
488                 case Opt_discard_async:        << 
489                         btrfs_clear_opt(ctx->m << 
490                         btrfs_set_opt(ctx->mou << 
491                         break;                    882                         break;
492                 default:                       !! 883                 case Opt_flushoncommit:
493                         btrfs_err(NULL, "unrec !! 884                         btrfs_set_and_info(info, FLUSHONCOMMIT,
494                                   param->key); !! 885                                            "turning on flush-on-commit");
495                         return -EINVAL;        << 
496                 }                              << 
497                 btrfs_clear_opt(ctx->mount_opt << 
498                 break;                         << 
499         case Opt_space_cache:                  << 
500                 if (result.negated) {          << 
501                         btrfs_set_opt(ctx->mou << 
502                         btrfs_clear_opt(ctx->m << 
503                         btrfs_clear_opt(ctx->m << 
504                 } else {                       << 
505                         btrfs_clear_opt(ctx->m << 
506                         btrfs_set_opt(ctx->mou << 
507                 }                              << 
508                 break;                         << 
509         case Opt_space_cache_version:          << 
510                 switch (result.uint_32) {      << 
511                 case Opt_space_cache_v1:       << 
512                         btrfs_set_opt(ctx->mou << 
513                         btrfs_clear_opt(ctx->m << 
514                         break;                 << 
515                 case Opt_space_cache_v2:       << 
516                         btrfs_clear_opt(ctx->m << 
517                         btrfs_set_opt(ctx->mou << 
518                         break;                    886                         break;
519                 default:                       !! 887                 case Opt_noflushoncommit:
520                         btrfs_err(NULL, "unrec !! 888                         btrfs_clear_and_info(info, FLUSHONCOMMIT,
521                                   param->key); !! 889                                              "turning off flush-on-commit");
522                         return -EINVAL;        << 
523                 }                              << 
524                 break;                         << 
525         case Opt_rescan_uuid_tree:             << 
526                 btrfs_set_opt(ctx->mount_opt,  << 
527                 break;                         << 
528         case Opt_clear_cache:                  << 
529                 btrfs_set_opt(ctx->mount_opt,  << 
530                 break;                         << 
531         case Opt_user_subvol_rm_allowed:       << 
532                 btrfs_set_opt(ctx->mount_opt,  << 
533                 break;                         << 
534         case Opt_enospc_debug:                 << 
535                 if (result.negated)            << 
536                         btrfs_clear_opt(ctx->m << 
537                 else                           << 
538                         btrfs_set_opt(ctx->mou << 
539                 break;                         << 
540         case Opt_defrag:                       << 
541                 if (result.negated)            << 
542                         btrfs_clear_opt(ctx->m << 
543                 else                           << 
544                         btrfs_set_opt(ctx->mou << 
545                 break;                         << 
546         case Opt_usebackuproot:                << 
547                 btrfs_warn(NULL,               << 
548                            "'usebackuproot' is << 
549                 btrfs_set_opt(ctx->mount_opt,  << 
550                                                << 
551                 /* If we're loading the backup << 
552                 btrfs_set_opt(ctx->mount_opt,  << 
553                 break;                         << 
554         case Opt_skip_balance:                 << 
555                 btrfs_set_opt(ctx->mount_opt,  << 
556                 break;                         << 
557         case Opt_fatal_errors:                 << 
558                 switch (result.uint_32) {      << 
559                 case Opt_fatal_errors_panic:   << 
560                         btrfs_set_opt(ctx->mou << 
561                         break;                    890                         break;
562                 case Opt_fatal_errors_bug:     !! 891                 case Opt_ratio:
563                         btrfs_clear_opt(ctx->m !! 892                         ret = match_int(&args[0], &intarg);
                                                   >> 893                         if (ret) {
                                                   >> 894                                 btrfs_err(info, "unrecognized metadata_ratio value %s",
                                                   >> 895                                           args[0].from);
                                                   >> 896                                 goto out;
                                                   >> 897                         }
                                                   >> 898                         info->metadata_ratio = intarg;
                                                   >> 899                         btrfs_info(info, "metadata ratio %u",
                                                   >> 900                                    info->metadata_ratio);
564                         break;                    901                         break;
565                 default:                       !! 902                 case Opt_discard:
566                         btrfs_err(NULL, "unrec !! 903                 case Opt_discard_mode:
567                                   param->key); !! 904                         if (token == Opt_discard ||
568                         return -EINVAL;        !! 905                             strcmp(args[0].from, "sync") == 0) {
569                 }                              !! 906                                 btrfs_clear_opt(info->mount_opt, DISCARD_ASYNC);
570                 break;                         !! 907                                 btrfs_set_and_info(info, DISCARD_SYNC,
571         case Opt_commit_interval:              !! 908                                                    "turning on sync discard");
572                 ctx->commit_interval = result. !! 909                         } else if (strcmp(args[0].from, "async") == 0) {
573                 if (ctx->commit_interval == 0) !! 910                                 btrfs_clear_opt(info->mount_opt, DISCARD_SYNC);
574                         ctx->commit_interval = !! 911                                 btrfs_set_and_info(info, DISCARD_ASYNC,
575                 break;                         !! 912                                                    "turning on async discard");
576         case Opt_rescue:                       !! 913                         } else {
577                 switch (result.uint_32) {      !! 914                                 btrfs_err(info, "unrecognized discard mode value %s",
578                 case Opt_rescue_usebackuproot: !! 915                                           args[0].from);
579                         btrfs_set_opt(ctx->mou !! 916                                 ret = -EINVAL;
580                         break;                 !! 917                                 goto out;
581                 case Opt_rescue_nologreplay:   !! 918                         }
582                         btrfs_set_opt(ctx->mou !! 919                         break;
583                         break;                 !! 920                 case Opt_nodiscard:
584                 case Opt_rescue_ignorebadroots !! 921                         btrfs_clear_and_info(info, DISCARD_SYNC,
585                         btrfs_set_opt(ctx->mou !! 922                                              "turning off discard");
586                         break;                 !! 923                         btrfs_clear_and_info(info, DISCARD_ASYNC,
587                 case Opt_rescue_ignoredatacsum !! 924                                              "turning off async discard");
588                         btrfs_set_opt(ctx->mou !! 925                         break;
589                         break;                 !! 926                 case Opt_space_cache:
590                 case Opt_rescue_ignoremetacsum !! 927                 case Opt_space_cache_version:
591                         btrfs_set_opt(ctx->mou !! 928                         /*
592                         break;                 !! 929                          * We already set FREE_SPACE_TREE above because we have
593                 case Opt_rescue_ignoresuperfla !! 930                          * compat_ro(FREE_SPACE_TREE) set, and we aren't going
594                         btrfs_set_opt(ctx->mou !! 931                          * to allow v1 to be set for extent tree v2, simply
595                         break;                 !! 932                          * ignore this setting if we're extent tree v2.
596                 case Opt_rescue_parameter_all: !! 933                          */
597                         btrfs_set_opt(ctx->mou !! 934                         if (btrfs_fs_incompat(info, EXTENT_TREE_V2))
598                         btrfs_set_opt(ctx->mou !! 935                                 break;
599                         btrfs_set_opt(ctx->mou !! 936                         if (token == Opt_space_cache ||
600                         btrfs_set_opt(ctx->mou !! 937                             strcmp(args[0].from, "v1") == 0) {
601                         btrfs_set_opt(ctx->mou !! 938                                 btrfs_clear_opt(info->mount_opt,
                                                   >> 939                                                 FREE_SPACE_TREE);
                                                   >> 940                                 btrfs_set_and_info(info, SPACE_CACHE,
                                                   >> 941                                            "enabling disk space caching");
                                                   >> 942                         } else if (strcmp(args[0].from, "v2") == 0) {
                                                   >> 943                                 btrfs_clear_opt(info->mount_opt,
                                                   >> 944                                                 SPACE_CACHE);
                                                   >> 945                                 btrfs_set_and_info(info, FREE_SPACE_TREE,
                                                   >> 946                                                    "enabling free space tree");
                                                   >> 947                         } else {
                                                   >> 948                                 btrfs_err(info, "unrecognized space_cache value %s",
                                                   >> 949                                           args[0].from);
                                                   >> 950                                 ret = -EINVAL;
                                                   >> 951                                 goto out;
                                                   >> 952                         }
                                                   >> 953                         break;
                                                   >> 954                 case Opt_rescan_uuid_tree:
                                                   >> 955                         btrfs_set_opt(info->mount_opt, RESCAN_UUID_TREE);
                                                   >> 956                         break;
                                                   >> 957                 case Opt_no_space_cache:
                                                   >> 958                         /*
                                                   >> 959                          * We cannot operate without the free space tree with
                                                   >> 960                          * extent tree v2, ignore this option.
                                                   >> 961                          */
                                                   >> 962                         if (btrfs_fs_incompat(info, EXTENT_TREE_V2))
                                                   >> 963                                 break;
                                                   >> 964                         if (btrfs_test_opt(info, SPACE_CACHE)) {
                                                   >> 965                                 btrfs_clear_and_info(info, SPACE_CACHE,
                                                   >> 966                                              "disabling disk space caching");
                                                   >> 967                         }
                                                   >> 968                         if (btrfs_test_opt(info, FREE_SPACE_TREE)) {
                                                   >> 969                                 btrfs_clear_and_info(info, FREE_SPACE_TREE,
                                                   >> 970                                              "disabling free space tree");
                                                   >> 971                         }
                                                   >> 972                         break;
                                                   >> 973                 case Opt_inode_cache:
                                                   >> 974                 case Opt_noinode_cache:
                                                   >> 975                         btrfs_warn(info,
                                                   >> 976         "the 'inode_cache' option is deprecated and has no effect since 5.11");
                                                   >> 977                         break;
                                                   >> 978                 case Opt_clear_cache:
                                                   >> 979                         /*
                                                   >> 980                          * We cannot clear the free space tree with extent tree
                                                   >> 981                          * v2, ignore this option.
                                                   >> 982                          */
                                                   >> 983                         if (btrfs_fs_incompat(info, EXTENT_TREE_V2))
                                                   >> 984                                 break;
                                                   >> 985                         btrfs_set_and_info(info, CLEAR_CACHE,
                                                   >> 986                                            "force clearing of disk cache");
                                                   >> 987                         break;
                                                   >> 988                 case Opt_user_subvol_rm_allowed:
                                                   >> 989                         btrfs_set_opt(info->mount_opt, USER_SUBVOL_RM_ALLOWED);
                                                   >> 990                         break;
                                                   >> 991                 case Opt_enospc_debug:
                                                   >> 992                         btrfs_set_opt(info->mount_opt, ENOSPC_DEBUG);
                                                   >> 993                         break;
                                                   >> 994                 case Opt_noenospc_debug:
                                                   >> 995                         btrfs_clear_opt(info->mount_opt, ENOSPC_DEBUG);
                                                   >> 996                         break;
                                                   >> 997                 case Opt_defrag:
                                                   >> 998                         btrfs_set_and_info(info, AUTO_DEFRAG,
                                                   >> 999                                            "enabling auto defrag");
                                                   >> 1000                         break;
                                                   >> 1001                 case Opt_nodefrag:
                                                   >> 1002                         btrfs_clear_and_info(info, AUTO_DEFRAG,
                                                   >> 1003                                              "disabling auto defrag");
                                                   >> 1004                         break;
                                                   >> 1005                 case Opt_recovery:
                                                   >> 1006                 case Opt_usebackuproot:
                                                   >> 1007                         btrfs_warn(info,
                                                   >> 1008                         "'%s' is deprecated, use 'rescue=usebackuproot' instead",
                                                   >> 1009                                    token == Opt_recovery ? "recovery" :
                                                   >> 1010                                    "usebackuproot");
                                                   >> 1011                         btrfs_info(info,
                                                   >> 1012                                    "trying to use backup root at mount time");
                                                   >> 1013                         btrfs_set_opt(info->mount_opt, USEBACKUPROOT);
                                                   >> 1014                         break;
                                                   >> 1015                 case Opt_skip_balance:
                                                   >> 1016                         btrfs_set_opt(info->mount_opt, SKIP_BALANCE);
                                                   >> 1017                         break;
                                                   >> 1018 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
                                                   >> 1019                 case Opt_check_integrity_including_extent_data:
                                                   >> 1020                         btrfs_info(info,
                                                   >> 1021                                    "enabling check integrity including extent data");
                                                   >> 1022                         btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY_DATA);
                                                   >> 1023                         btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
                                                   >> 1024                         break;
                                                   >> 1025                 case Opt_check_integrity:
                                                   >> 1026                         btrfs_info(info, "enabling check integrity");
                                                   >> 1027                         btrfs_set_opt(info->mount_opt, CHECK_INTEGRITY);
                                                   >> 1028                         break;
                                                   >> 1029                 case Opt_check_integrity_print_mask:
                                                   >> 1030                         ret = match_int(&args[0], &intarg);
                                                   >> 1031                         if (ret) {
                                                   >> 1032                                 btrfs_err(info,
                                                   >> 1033                                 "unrecognized check_integrity_print_mask value %s",
                                                   >> 1034                                         args[0].from);
                                                   >> 1035                                 goto out;
                                                   >> 1036                         }
                                                   >> 1037                         info->check_integrity_print_mask = intarg;
                                                   >> 1038                         btrfs_info(info, "check_integrity_print_mask 0x%x",
                                                   >> 1039                                    info->check_integrity_print_mask);
                                                   >> 1040                         break;
                                                   >> 1041 #else
                                                   >> 1042                 case Opt_check_integrity_including_extent_data:
                                                   >> 1043                 case Opt_check_integrity:
                                                   >> 1044                 case Opt_check_integrity_print_mask:
                                                   >> 1045                         btrfs_err(info,
                                                   >> 1046                                   "support for check_integrity* not compiled in!");
                                                   >> 1047                         ret = -EINVAL;
                                                   >> 1048                         goto out;
                                                   >> 1049 #endif
                                                   >> 1050                 case Opt_fatal_errors:
                                                   >> 1051                         if (strcmp(args[0].from, "panic") == 0) {
                                                   >> 1052                                 btrfs_set_opt(info->mount_opt,
                                                   >> 1053                                               PANIC_ON_FATAL_ERROR);
                                                   >> 1054                         } else if (strcmp(args[0].from, "bug") == 0) {
                                                   >> 1055                                 btrfs_clear_opt(info->mount_opt,
                                                   >> 1056                                               PANIC_ON_FATAL_ERROR);
                                                   >> 1057                         } else {
                                                   >> 1058                                 btrfs_err(info, "unrecognized fatal_errors value %s",
                                                   >> 1059                                           args[0].from);
                                                   >> 1060                                 ret = -EINVAL;
                                                   >> 1061                                 goto out;
                                                   >> 1062                         }
                                                   >> 1063                         break;
                                                   >> 1064                 case Opt_commit_interval:
                                                   >> 1065                         intarg = 0;
                                                   >> 1066                         ret = match_int(&args[0], &intarg);
                                                   >> 1067                         if (ret) {
                                                   >> 1068                                 btrfs_err(info, "unrecognized commit_interval value %s",
                                                   >> 1069                                           args[0].from);
                                                   >> 1070                                 ret = -EINVAL;
                                                   >> 1071                                 goto out;
                                                   >> 1072                         }
                                                   >> 1073                         if (intarg == 0) {
                                                   >> 1074                                 btrfs_info(info,
                                                   >> 1075                                            "using default commit interval %us",
                                                   >> 1076                                            BTRFS_DEFAULT_COMMIT_INTERVAL);
                                                   >> 1077                                 intarg = BTRFS_DEFAULT_COMMIT_INTERVAL;
                                                   >> 1078                         } else if (intarg > 300) {
                                                   >> 1079                                 btrfs_warn(info, "excessive commit interval %d",
                                                   >> 1080                                            intarg);
                                                   >> 1081                         }
                                                   >> 1082                         info->commit_interval = intarg;
                                                   >> 1083                         break;
                                                   >> 1084                 case Opt_rescue:
                                                   >> 1085                         ret = parse_rescue_options(info, args[0].from);
                                                   >> 1086                         if (ret < 0) {
                                                   >> 1087                                 btrfs_err(info, "unrecognized rescue value %s",
                                                   >> 1088                                           args[0].from);
                                                   >> 1089                                 goto out;
                                                   >> 1090                         }
602                         break;                    1091                         break;
603                 default:                       << 
604                         btrfs_info(NULL, "unre << 
605                                    param->key) << 
606                         return -EINVAL;        << 
607                 }                              << 
608                 break;                         << 
609 #ifdef CONFIG_BTRFS_DEBUG                         1092 #ifdef CONFIG_BTRFS_DEBUG
610         case Opt_fragment:                     !! 1093                 case Opt_fragment_all:
611                 switch (result.uint_32) {      !! 1094                         btrfs_info(info, "fragmenting all space");
612                 case Opt_fragment_parameter_al !! 1095                         btrfs_set_opt(info->mount_opt, FRAGMENT_DATA);
613                         btrfs_set_opt(ctx->mou !! 1096                         btrfs_set_opt(info->mount_opt, FRAGMENT_METADATA);
614                         btrfs_set_opt(ctx->mou << 
615                         break;                    1097                         break;
616                 case Opt_fragment_parameter_me !! 1098                 case Opt_fragment_metadata:
617                         btrfs_set_opt(ctx->mou !! 1099                         btrfs_info(info, "fragmenting metadata");
                                                   >> 1100                         btrfs_set_opt(info->mount_opt,
                                                   >> 1101                                       FRAGMENT_METADATA);
618                         break;                    1102                         break;
619                 case Opt_fragment_parameter_da !! 1103                 case Opt_fragment_data:
620                         btrfs_set_opt(ctx->mou !! 1104                         btrfs_info(info, "fragmenting data");
                                                   >> 1105                         btrfs_set_opt(info->mount_opt, FRAGMENT_DATA);
621                         break;                    1106                         break;
622                 default:                       << 
623                         btrfs_info(NULL, "unre << 
624                                    param->key) << 
625                         return -EINVAL;        << 
626                 }                              << 
627                 break;                         << 
628 #endif                                            1107 #endif
629 #ifdef CONFIG_BTRFS_FS_REF_VERIFY                 1108 #ifdef CONFIG_BTRFS_FS_REF_VERIFY
630         case Opt_ref_verify:                   !! 1109                 case Opt_ref_verify:
631                 btrfs_set_opt(ctx->mount_opt,  !! 1110                         btrfs_info(info, "doing ref verification");
632                 break;                         !! 1111                         btrfs_set_opt(info->mount_opt, REF_VERIFY);
                                                   >> 1112                         break;
633 #endif                                            1113 #endif
634         default:                               !! 1114                 case Opt_err:
635                 btrfs_err(NULL, "unrecognized  !! 1115                         btrfs_err(info, "unrecognized mount option '%s'", p);
636                 return -EINVAL;                !! 1116                         ret = -EINVAL;
                                                   >> 1117                         goto out;
                                                   >> 1118                 default:
                                                   >> 1119                         break;
                                                   >> 1120                 }
637         }                                         1121         }
                                                   >> 1122 check:
                                                   >> 1123         /* We're read-only, don't have to check. */
                                                   >> 1124         if (new_flags & SB_RDONLY)
                                                   >> 1125                 goto out;
638                                                   1126 
639         return 0;                              !! 1127         if (check_ro_option(info, BTRFS_MOUNT_NOLOGREPLAY, "nologreplay") ||
                                                   >> 1128             check_ro_option(info, BTRFS_MOUNT_IGNOREBADROOTS, "ignorebadroots") ||
                                                   >> 1129             check_ro_option(info, BTRFS_MOUNT_IGNOREDATACSUMS, "ignoredatacsums"))
                                                   >> 1130                 ret = -EINVAL;
                                                   >> 1131 out:
                                                   >> 1132         if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE) &&
                                                   >> 1133             !btrfs_test_opt(info, FREE_SPACE_TREE) &&
                                                   >> 1134             !btrfs_test_opt(info, CLEAR_CACHE)) {
                                                   >> 1135                 btrfs_err(info, "cannot disable free space tree");
                                                   >> 1136                 ret = -EINVAL;
                                                   >> 1137 
                                                   >> 1138         }
                                                   >> 1139         if (!ret)
                                                   >> 1140                 ret = btrfs_check_mountopts_zoned(info);
                                                   >> 1141         if (!ret && !remounting) {
                                                   >> 1142                 if (btrfs_test_opt(info, SPACE_CACHE))
                                                   >> 1143                         btrfs_info(info, "disk space caching is enabled");
                                                   >> 1144                 if (btrfs_test_opt(info, FREE_SPACE_TREE))
                                                   >> 1145                         btrfs_info(info, "using free space tree");
                                                   >> 1146         }
                                                   >> 1147         return ret;
640 }                                                 1148 }
641                                                   1149 
642 /*                                                1150 /*
643  * Some options only have meaning at mount tim !! 1151  * Parse mount options that are required early in the mount process.
644  * remounts, or be displayed. Clear these at t !! 1152  *
645  * paths.                                      !! 1153  * All other options will be parsed on much later in the mount process and
                                                   >> 1154  * only when we need to allocate a new super block.
646  */                                               1155  */
647 static void btrfs_clear_oneshot_options(struct !! 1156 static int btrfs_parse_device_options(const char *options, fmode_t flags,
                                                   >> 1157                                       void *holder)
648 {                                                 1158 {
649         btrfs_clear_opt(fs_info->mount_opt, US !! 1159         substring_t args[MAX_OPT_ARGS];
650         btrfs_clear_opt(fs_info->mount_opt, CL !! 1160         char *device_name, *opts, *orig, *p;
651         btrfs_clear_opt(fs_info->mount_opt, NO !! 1161         struct btrfs_device *device = NULL;
652 }                                              !! 1162         int error = 0;
653                                                   1163 
654 static bool check_ro_option(const struct btrfs !! 1164         lockdep_assert_held(&uuid_mutex);
655                             unsigned long long << 
656                             const char *opt_na << 
657 {                                              << 
658         if (mount_opt & opt) {                 << 
659                 btrfs_err(fs_info, "%s must be << 
660                           opt_name);           << 
661                 return true;                   << 
662         }                                      << 
663         return false;                          << 
664 }                                              << 
665                                                   1165 
666 bool btrfs_check_options(const struct btrfs_fs !! 1166         if (!options)
667                          unsigned long long *m !! 1167                 return 0;
668                          unsigned long flags)  << 
669 {                                              << 
670         bool ret = true;                       << 
671                                                << 
672         if (!(flags & SB_RDONLY) &&            << 
673             (check_ro_option(info, *mount_opt, << 
674              check_ro_option(info, *mount_opt, << 
675              check_ro_option(info, *mount_opt, << 
676              check_ro_option(info, *mount_opt, << 
677              check_ro_option(info, *mount_opt, << 
678                 ret = false;                   << 
679                                                   1168 
680         if (btrfs_fs_compat_ro(info, FREE_SPAC !! 1169         /*
681             !btrfs_raw_test_opt(*mount_opt, FR !! 1170          * strsep changes the string, duplicate it because btrfs_parse_options
682             !btrfs_raw_test_opt(*mount_opt, CL !! 1171          * gets called later
683                 btrfs_err(info, "cannot disabl !! 1172          */
684                 ret = false;                   !! 1173         opts = kstrdup(options, GFP_KERNEL);
685         }                                      !! 1174         if (!opts)
686         if (btrfs_fs_compat_ro(info, BLOCK_GRO !! 1175                 return -ENOMEM;
687              !btrfs_raw_test_opt(*mount_opt, F !! 1176         orig = opts;
688                 btrfs_err(info, "cannot disabl << 
689                 ret = false;                   << 
690         }                                      << 
691                                                   1177 
692         if (btrfs_check_mountopts_zoned(info,  !! 1178         while ((p = strsep(&opts, ",")) != NULL) {
693                 ret = false;                   !! 1179                 int token;
694                                                   1180 
695         if (!test_bit(BTRFS_FS_STATE_REMOUNTIN !! 1181                 if (!*p)
696                 if (btrfs_raw_test_opt(*mount_ !! 1182                         continue;
697                         btrfs_info(info, "disk !! 1183 
698                         btrfs_warn(info,       !! 1184                 token = match_token(p, tokens, args);
699 "space cache v1 is being deprecated and will b !! 1185                 if (token == Opt_device) {
                                                   >> 1186                         device_name = match_strdup(&args[0]);
                                                   >> 1187                         if (!device_name) {
                                                   >> 1188                                 error = -ENOMEM;
                                                   >> 1189                                 goto out;
                                                   >> 1190                         }
                                                   >> 1191                         device = btrfs_scan_one_device(device_name, flags,
                                                   >> 1192                                         holder);
                                                   >> 1193                         kfree(device_name);
                                                   >> 1194                         if (IS_ERR(device)) {
                                                   >> 1195                                 error = PTR_ERR(device);
                                                   >> 1196                                 goto out;
                                                   >> 1197                         }
700                 }                                 1198                 }
701                 if (btrfs_raw_test_opt(*mount_ << 
702                         btrfs_info(info, "usin << 
703         }                                         1199         }
704                                                   1200 
705         return ret;                            !! 1201 out:
                                                   >> 1202         kfree(orig);
                                                   >> 1203         return error;
706 }                                                 1204 }
707                                                   1205 
708 /*                                                1206 /*
709  * This is subtle, we only call this during op !! 1207  * Parse mount options that are related to subvolume id
710  * the mount options with the on-disk settings << 
711  * effect we would do this on mount and remoun << 
712  * only do this on the initial mount.          << 
713  *                                                1208  *
714  * This isn't a change in behavior, because we !! 1209  * The value is later passed to mount_subvol()
715  * file system to set the current mount option << 
716  * options to disable these features and then  << 
717  * settings, because mounting without these fe << 
718  * settings, so this being called on re-mount  << 
719  */                                               1210  */
720 void btrfs_set_free_space_cache_settings(struc !! 1211 static int btrfs_parse_subvol_options(const char *options, char **subvol_name,
                                                   >> 1212                 u64 *subvol_objectid)
721 {                                                 1213 {
722         if (fs_info->sectorsize < PAGE_SIZE) { !! 1214         substring_t args[MAX_OPT_ARGS];
723                 btrfs_clear_opt(fs_info->mount !! 1215         char *opts, *orig, *p;
724                 if (!btrfs_test_opt(fs_info, F !! 1216         int error = 0;
725                         btrfs_info(fs_info,    !! 1217         u64 subvolid;
726                                    "forcing fr !! 1218 
727                                    fs_info->se !! 1219         if (!options)
728                         btrfs_set_opt(fs_info- !! 1220                 return 0;
729                 }                              << 
730         }                                      << 
731                                                   1221 
732         /*                                        1222         /*
733          * At this point our mount options are !! 1223          * strsep changes the string, duplicate it because
734          * these settings if we don't have any !! 1224          * btrfs_parse_device_options gets called later
735          */                                       1225          */
736         if (btrfs_test_opt(fs_info, FREE_SPACE !! 1226         opts = kstrdup(options, GFP_KERNEL);
737                 return;                        !! 1227         if (!opts)
738                                                !! 1228                 return -ENOMEM;
739         if (btrfs_is_zoned(fs_info) &&         !! 1229         orig = opts;
740             btrfs_free_space_cache_v1_active(f << 
741                 btrfs_info(fs_info, "zoned: cl << 
742                 btrfs_set_super_cache_generati << 
743                 return;                        << 
744         }                                      << 
745                                                   1230 
746         if (btrfs_test_opt(fs_info, SPACE_CACH !! 1231         while ((p = strsep(&opts, ",")) != NULL) {
747                 return;                        !! 1232                 int token;
                                                   >> 1233                 if (!*p)
                                                   >> 1234                         continue;
748                                                   1235 
749         if (btrfs_test_opt(fs_info, NOSPACECAC !! 1236                 token = match_token(p, tokens, args);
750                 return;                        !! 1237                 switch (token) {
                                                   >> 1238                 case Opt_subvol:
                                                   >> 1239                         kfree(*subvol_name);
                                                   >> 1240                         *subvol_name = match_strdup(&args[0]);
                                                   >> 1241                         if (!*subvol_name) {
                                                   >> 1242                                 error = -ENOMEM;
                                                   >> 1243                                 goto out;
                                                   >> 1244                         }
                                                   >> 1245                         break;
                                                   >> 1246                 case Opt_subvolid:
                                                   >> 1247                         error = match_u64(&args[0], &subvolid);
                                                   >> 1248                         if (error)
                                                   >> 1249                                 goto out;
751                                                   1250 
752         /*                                     !! 1251                         /* we want the original fs_tree */
753          * At this point we don't have explici !! 1252                         if (subvolid == 0)
754          * them ourselves based on the state o !! 1253                                 subvolid = BTRFS_FS_TREE_OBJECTID;
755          */                                    << 
756         if (btrfs_fs_compat_ro(fs_info, FREE_S << 
757                 btrfs_set_opt(fs_info->mount_o << 
758         else if (btrfs_free_space_cache_v1_act << 
759                 btrfs_set_opt(fs_info->mount_o << 
760 }                                              << 
761                                                   1254 
762 static void set_device_specific_options(struct !! 1255                         *subvol_objectid = subvolid;
763 {                                              !! 1256                         break;
764         if (!btrfs_test_opt(fs_info, NOSSD) && !! 1257                 default:
765             !fs_info->fs_devices->rotating)    !! 1258                         break;
766                 btrfs_set_opt(fs_info->mount_o !! 1259                 }
                                                   >> 1260         }
767                                                   1261 
768         /*                                     !! 1262 out:
769          * For devices supporting discard turn !! 1263         kfree(orig);
770          * unless it's already set or disabled !! 1264         return error;
771          * nodiscard for the same mount.       << 
772          *                                     << 
773          * The zoned mode piggy backs on the d << 
774          * resetting a zone. There is no reaso << 
775          * fast enough. So, do not enable asyn << 
776          */                                    << 
777         if (!(btrfs_test_opt(fs_info, DISCARD_ << 
778               btrfs_test_opt(fs_info, DISCARD_ << 
779               btrfs_test_opt(fs_info, NODISCAR << 
780             fs_info->fs_devices->discardable & << 
781             !btrfs_is_zoned(fs_info))          << 
782                 btrfs_set_opt(fs_info->mount_o << 
783 }                                                 1265 }
784                                                   1266 
785 char *btrfs_get_subvol_name_from_objectid(stru    1267 char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
786                                           u64     1268                                           u64 subvol_objectid)
787 {                                                 1269 {
788         struct btrfs_root *root = fs_info->tre    1270         struct btrfs_root *root = fs_info->tree_root;
789         struct btrfs_root *fs_root = NULL;        1271         struct btrfs_root *fs_root = NULL;
790         struct btrfs_root_ref *root_ref;          1272         struct btrfs_root_ref *root_ref;
791         struct btrfs_inode_ref *inode_ref;        1273         struct btrfs_inode_ref *inode_ref;
792         struct btrfs_key key;                     1274         struct btrfs_key key;
793         struct btrfs_path *path = NULL;           1275         struct btrfs_path *path = NULL;
794         char *name = NULL, *ptr;                  1276         char *name = NULL, *ptr;
795         u64 dirid;                                1277         u64 dirid;
796         int len;                                  1278         int len;
797         int ret;                                  1279         int ret;
798                                                   1280 
799         path = btrfs_alloc_path();                1281         path = btrfs_alloc_path();
800         if (!path) {                              1282         if (!path) {
801                 ret = -ENOMEM;                    1283                 ret = -ENOMEM;
802                 goto err;                         1284                 goto err;
803         }                                         1285         }
804                                                   1286 
805         name = kmalloc(PATH_MAX, GFP_KERNEL);     1287         name = kmalloc(PATH_MAX, GFP_KERNEL);
806         if (!name) {                              1288         if (!name) {
807                 ret = -ENOMEM;                    1289                 ret = -ENOMEM;
808                 goto err;                         1290                 goto err;
809         }                                         1291         }
810         ptr = name + PATH_MAX - 1;                1292         ptr = name + PATH_MAX - 1;
811         ptr[0] = '\0';                            1293         ptr[0] = '\0';
812                                                   1294 
813         /*                                        1295         /*
814          * Walk up the subvolume trees in the     1296          * Walk up the subvolume trees in the tree of tree roots by root
815          * backrefs until we hit the top-level    1297          * backrefs until we hit the top-level subvolume.
816          */                                       1298          */
817         while (subvol_objectid != BTRFS_FS_TRE    1299         while (subvol_objectid != BTRFS_FS_TREE_OBJECTID) {
818                 key.objectid = subvol_objectid    1300                 key.objectid = subvol_objectid;
819                 key.type = BTRFS_ROOT_BACKREF_    1301                 key.type = BTRFS_ROOT_BACKREF_KEY;
820                 key.offset = (u64)-1;             1302                 key.offset = (u64)-1;
821                                                   1303 
822                 ret = btrfs_search_backwards(r    1304                 ret = btrfs_search_backwards(root, &key, path);
823                 if (ret < 0) {                    1305                 if (ret < 0) {
824                         goto err;                 1306                         goto err;
825                 } else if (ret > 0) {             1307                 } else if (ret > 0) {
826                         ret = -ENOENT;            1308                         ret = -ENOENT;
827                         goto err;                 1309                         goto err;
828                 }                                 1310                 }
829                                                   1311 
830                 subvol_objectid = key.offset;     1312                 subvol_objectid = key.offset;
831                                                   1313 
832                 root_ref = btrfs_item_ptr(path    1314                 root_ref = btrfs_item_ptr(path->nodes[0], path->slots[0],
833                                           stru    1315                                           struct btrfs_root_ref);
834                 len = btrfs_root_ref_name_len(    1316                 len = btrfs_root_ref_name_len(path->nodes[0], root_ref);
835                 ptr -= len + 1;                   1317                 ptr -= len + 1;
836                 if (ptr < name) {                 1318                 if (ptr < name) {
837                         ret = -ENAMETOOLONG;      1319                         ret = -ENAMETOOLONG;
838                         goto err;                 1320                         goto err;
839                 }                                 1321                 }
840                 read_extent_buffer(path->nodes    1322                 read_extent_buffer(path->nodes[0], ptr + 1,
841                                    (unsigned l    1323                                    (unsigned long)(root_ref + 1), len);
842                 ptr[0] = '/';                     1324                 ptr[0] = '/';
843                 dirid = btrfs_root_ref_dirid(p    1325                 dirid = btrfs_root_ref_dirid(path->nodes[0], root_ref);
844                 btrfs_release_path(path);         1326                 btrfs_release_path(path);
845                                                   1327 
846                 fs_root = btrfs_get_fs_root(fs    1328                 fs_root = btrfs_get_fs_root(fs_info, subvol_objectid, true);
847                 if (IS_ERR(fs_root)) {            1329                 if (IS_ERR(fs_root)) {
848                         ret = PTR_ERR(fs_root)    1330                         ret = PTR_ERR(fs_root);
849                         fs_root = NULL;           1331                         fs_root = NULL;
850                         goto err;                 1332                         goto err;
851                 }                                 1333                 }
852                                                   1334 
853                 /*                                1335                 /*
854                  * Walk up the filesystem tree    1336                  * Walk up the filesystem tree by inode refs until we hit the
855                  * root directory.                1337                  * root directory.
856                  */                               1338                  */
857                 while (dirid != BTRFS_FIRST_FR    1339                 while (dirid != BTRFS_FIRST_FREE_OBJECTID) {
858                         key.objectid = dirid;     1340                         key.objectid = dirid;
859                         key.type = BTRFS_INODE    1341                         key.type = BTRFS_INODE_REF_KEY;
860                         key.offset = (u64)-1;     1342                         key.offset = (u64)-1;
861                                                   1343 
862                         ret = btrfs_search_bac    1344                         ret = btrfs_search_backwards(fs_root, &key, path);
863                         if (ret < 0) {            1345                         if (ret < 0) {
864                                 goto err;         1346                                 goto err;
865                         } else if (ret > 0) {     1347                         } else if (ret > 0) {
866                                 ret = -ENOENT;    1348                                 ret = -ENOENT;
867                                 goto err;         1349                                 goto err;
868                         }                         1350                         }
869                                                   1351 
870                         dirid = key.offset;       1352                         dirid = key.offset;
871                                                   1353 
872                         inode_ref = btrfs_item    1354                         inode_ref = btrfs_item_ptr(path->nodes[0],
873                                                   1355                                                    path->slots[0],
874                                                   1356                                                    struct btrfs_inode_ref);
875                         len = btrfs_inode_ref_    1357                         len = btrfs_inode_ref_name_len(path->nodes[0],
876                                                   1358                                                        inode_ref);
877                         ptr -= len + 1;           1359                         ptr -= len + 1;
878                         if (ptr < name) {         1360                         if (ptr < name) {
879                                 ret = -ENAMETO    1361                                 ret = -ENAMETOOLONG;
880                                 goto err;         1362                                 goto err;
881                         }                         1363                         }
882                         read_extent_buffer(pat    1364                         read_extent_buffer(path->nodes[0], ptr + 1,
883                                            (un    1365                                            (unsigned long)(inode_ref + 1), len);
884                         ptr[0] = '/';             1366                         ptr[0] = '/';
885                         btrfs_release_path(pat    1367                         btrfs_release_path(path);
886                 }                                 1368                 }
887                 btrfs_put_root(fs_root);          1369                 btrfs_put_root(fs_root);
888                 fs_root = NULL;                   1370                 fs_root = NULL;
889         }                                         1371         }
890                                                   1372 
891         btrfs_free_path(path);                    1373         btrfs_free_path(path);
892         if (ptr == name + PATH_MAX - 1) {         1374         if (ptr == name + PATH_MAX - 1) {
893                 name[0] = '/';                    1375                 name[0] = '/';
894                 name[1] = '\0';                   1376                 name[1] = '\0';
895         } else {                                  1377         } else {
896                 memmove(name, ptr, name + PATH    1378                 memmove(name, ptr, name + PATH_MAX - ptr);
897         }                                         1379         }
898         return name;                              1380         return name;
899                                                   1381 
900 err:                                              1382 err:
901         btrfs_put_root(fs_root);                  1383         btrfs_put_root(fs_root);
902         btrfs_free_path(path);                    1384         btrfs_free_path(path);
903         kfree(name);                              1385         kfree(name);
904         return ERR_PTR(ret);                      1386         return ERR_PTR(ret);
905 }                                                 1387 }
906                                                   1388 
907 static int get_default_subvol_objectid(struct     1389 static int get_default_subvol_objectid(struct btrfs_fs_info *fs_info, u64 *objectid)
908 {                                                 1390 {
909         struct btrfs_root *root = fs_info->tre    1391         struct btrfs_root *root = fs_info->tree_root;
910         struct btrfs_dir_item *di;                1392         struct btrfs_dir_item *di;
911         struct btrfs_path *path;                  1393         struct btrfs_path *path;
912         struct btrfs_key location;                1394         struct btrfs_key location;
913         struct fscrypt_str name = FSTR_INIT("d << 
914         u64 dir_id;                               1395         u64 dir_id;
915                                                   1396 
916         path = btrfs_alloc_path();                1397         path = btrfs_alloc_path();
917         if (!path)                                1398         if (!path)
918                 return -ENOMEM;                   1399                 return -ENOMEM;
919                                                   1400 
920         /*                                        1401         /*
921          * Find the "default" dir item which p    1402          * Find the "default" dir item which points to the root item that we
922          * will mount by default if we haven't    1403          * will mount by default if we haven't been given a specific subvolume
923          * to mount.                              1404          * to mount.
924          */                                       1405          */
925         dir_id = btrfs_super_root_dir(fs_info-    1406         dir_id = btrfs_super_root_dir(fs_info->super_copy);
926         di = btrfs_lookup_dir_item(NULL, root, !! 1407         di = btrfs_lookup_dir_item(NULL, root, path, dir_id, "default", 7, 0);
927         if (IS_ERR(di)) {                         1408         if (IS_ERR(di)) {
928                 btrfs_free_path(path);            1409                 btrfs_free_path(path);
929                 return PTR_ERR(di);               1410                 return PTR_ERR(di);
930         }                                         1411         }
931         if (!di) {                                1412         if (!di) {
932                 /*                                1413                 /*
933                  * Ok the default dir item isn    1414                  * Ok the default dir item isn't there.  This is weird since
934                  * it's always been there, but    1415                  * it's always been there, but don't freak out, just try and
935                  * mount the top-level subvolu    1416                  * mount the top-level subvolume.
936                  */                               1417                  */
937                 btrfs_free_path(path);            1418                 btrfs_free_path(path);
938                 *objectid = BTRFS_FS_TREE_OBJE    1419                 *objectid = BTRFS_FS_TREE_OBJECTID;
939                 return 0;                         1420                 return 0;
940         }                                         1421         }
941                                                   1422 
942         btrfs_dir_item_key_to_cpu(path->nodes[    1423         btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);
943         btrfs_free_path(path);                    1424         btrfs_free_path(path);
944         *objectid = location.objectid;            1425         *objectid = location.objectid;
945         return 0;                                 1426         return 0;
946 }                                                 1427 }
947                                                   1428 
948 static int btrfs_fill_super(struct super_block    1429 static int btrfs_fill_super(struct super_block *sb,
949                             struct btrfs_fs_de    1430                             struct btrfs_fs_devices *fs_devices,
950                             void *data)           1431                             void *data)
951 {                                                 1432 {
952         struct inode *inode;                      1433         struct inode *inode;
953         struct btrfs_fs_info *fs_info = btrfs_    1434         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
954         int err;                                  1435         int err;
955                                                   1436 
956         sb->s_maxbytes = MAX_LFS_FILESIZE;        1437         sb->s_maxbytes = MAX_LFS_FILESIZE;
957         sb->s_magic = BTRFS_SUPER_MAGIC;          1438         sb->s_magic = BTRFS_SUPER_MAGIC;
958         sb->s_op = &btrfs_super_ops;              1439         sb->s_op = &btrfs_super_ops;
959         sb->s_d_op = &btrfs_dentry_operations;    1440         sb->s_d_op = &btrfs_dentry_operations;
960         sb->s_export_op = &btrfs_export_ops;      1441         sb->s_export_op = &btrfs_export_ops;
961 #ifdef CONFIG_FS_VERITY                           1442 #ifdef CONFIG_FS_VERITY
962         sb->s_vop = &btrfs_verityops;             1443         sb->s_vop = &btrfs_verityops;
963 #endif                                            1444 #endif
964         sb->s_xattr = btrfs_xattr_handlers;       1445         sb->s_xattr = btrfs_xattr_handlers;
965         sb->s_time_gran = 1;                      1446         sb->s_time_gran = 1;
                                                   >> 1447 #ifdef CONFIG_BTRFS_FS_POSIX_ACL
                                                   >> 1448         sb->s_flags |= SB_POSIXACL;
                                                   >> 1449 #endif
                                                   >> 1450         sb->s_flags |= SB_I_VERSION;
966         sb->s_iflags |= SB_I_CGROUPWB;            1451         sb->s_iflags |= SB_I_CGROUPWB;
967                                                   1452 
968         err = super_setup_bdi(sb);                1453         err = super_setup_bdi(sb);
969         if (err) {                                1454         if (err) {
970                 btrfs_err(fs_info, "super_setu    1455                 btrfs_err(fs_info, "super_setup_bdi failed");
971                 return err;                       1456                 return err;
972         }                                         1457         }
973                                                   1458 
974         err = open_ctree(sb, fs_devices, (char    1459         err = open_ctree(sb, fs_devices, (char *)data);
975         if (err) {                                1460         if (err) {
976                 btrfs_err(fs_info, "open_ctree    1461                 btrfs_err(fs_info, "open_ctree failed");
977                 return err;                       1462                 return err;
978         }                                         1463         }
979                                                   1464 
980         inode = btrfs_iget(BTRFS_FIRST_FREE_OB !! 1465         inode = btrfs_iget(sb, BTRFS_FIRST_FREE_OBJECTID, fs_info->fs_root);
981         if (IS_ERR(inode)) {                      1466         if (IS_ERR(inode)) {
982                 err = PTR_ERR(inode);             1467                 err = PTR_ERR(inode);
983                 btrfs_handle_fs_error(fs_info, << 
984                 goto fail_close;                  1468                 goto fail_close;
985         }                                         1469         }
986                                                   1470 
987         sb->s_root = d_make_root(inode);          1471         sb->s_root = d_make_root(inode);
988         if (!sb->s_root) {                        1472         if (!sb->s_root) {
989                 err = -ENOMEM;                    1473                 err = -ENOMEM;
990                 goto fail_close;                  1474                 goto fail_close;
991         }                                         1475         }
992                                                   1476 
993         sb->s_flags |= SB_ACTIVE;                 1477         sb->s_flags |= SB_ACTIVE;
994         return 0;                                 1478         return 0;
995                                                   1479 
996 fail_close:                                       1480 fail_close:
997         close_ctree(fs_info);                     1481         close_ctree(fs_info);
998         return err;                               1482         return err;
999 }                                                 1483 }
1000                                                  1484 
1001 int btrfs_sync_fs(struct super_block *sb, int    1485 int btrfs_sync_fs(struct super_block *sb, int wait)
1002 {                                                1486 {
1003         struct btrfs_trans_handle *trans;        1487         struct btrfs_trans_handle *trans;
1004         struct btrfs_fs_info *fs_info = btrfs    1488         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
1005         struct btrfs_root *root = fs_info->tr    1489         struct btrfs_root *root = fs_info->tree_root;
1006                                                  1490 
1007         trace_btrfs_sync_fs(fs_info, wait);      1491         trace_btrfs_sync_fs(fs_info, wait);
1008                                                  1492 
1009         if (!wait) {                             1493         if (!wait) {
1010                 filemap_flush(fs_info->btree_    1494                 filemap_flush(fs_info->btree_inode->i_mapping);
1011                 return 0;                        1495                 return 0;
1012         }                                        1496         }
1013                                                  1497 
1014         btrfs_wait_ordered_roots(fs_info, U64 !! 1498         btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1);
1015                                                  1499 
1016         trans = btrfs_attach_transaction_barr    1500         trans = btrfs_attach_transaction_barrier(root);
1017         if (IS_ERR(trans)) {                     1501         if (IS_ERR(trans)) {
1018                 /* no transaction, don't both    1502                 /* no transaction, don't bother */
1019                 if (PTR_ERR(trans) == -ENOENT    1503                 if (PTR_ERR(trans) == -ENOENT) {
1020                         /*                       1504                         /*
1021                          * Exit unless we hav    1505                          * Exit unless we have some pending changes
1022                          * that need to go th    1506                          * that need to go through commit
1023                          */                      1507                          */
1024                         if (!test_bit(BTRFS_F !! 1508                         if (fs_info->pending_changes == 0)
1025                                       &fs_inf << 
1026                                 return 0;        1509                                 return 0;
1027                         /*                       1510                         /*
1028                          * A non-blocking tes    1511                          * A non-blocking test if the fs is frozen. We must not
1029                          * start a new transa    1512                          * start a new transaction here otherwise a deadlock
1030                          * happens. The pendi    1513                          * happens. The pending operations are delayed to the
1031                          * next commit after     1514                          * next commit after thawing.
1032                          */                      1515                          */
1033                         if (sb_start_write_tr    1516                         if (sb_start_write_trylock(sb))
1034                                 sb_end_write(    1517                                 sb_end_write(sb);
1035                         else                     1518                         else
1036                                 return 0;        1519                                 return 0;
1037                         trans = btrfs_start_t    1520                         trans = btrfs_start_transaction(root, 0);
1038                 }                                1521                 }
1039                 if (IS_ERR(trans))               1522                 if (IS_ERR(trans))
1040                         return PTR_ERR(trans)    1523                         return PTR_ERR(trans);
1041         }                                        1524         }
1042         return btrfs_commit_transaction(trans    1525         return btrfs_commit_transaction(trans);
1043 }                                                1526 }
1044                                                  1527 
1045 static void print_rescue_option(struct seq_fi    1528 static void print_rescue_option(struct seq_file *seq, const char *s, bool *printed)
1046 {                                                1529 {
1047         seq_printf(seq, "%s%s", (*printed) ?     1530         seq_printf(seq, "%s%s", (*printed) ? ":" : ",rescue=", s);
1048         *printed = true;                         1531         *printed = true;
1049 }                                                1532 }
1050                                                  1533 
1051 static int btrfs_show_options(struct seq_file    1534 static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
1052 {                                                1535 {
1053         struct btrfs_fs_info *info = btrfs_sb    1536         struct btrfs_fs_info *info = btrfs_sb(dentry->d_sb);
1054         const char *compress_type;               1537         const char *compress_type;
1055         const char *subvol_name;                 1538         const char *subvol_name;
1056         bool printed = false;                    1539         bool printed = false;
1057                                                  1540 
1058         if (btrfs_test_opt(info, DEGRADED))      1541         if (btrfs_test_opt(info, DEGRADED))
1059                 seq_puts(seq, ",degraded");      1542                 seq_puts(seq, ",degraded");
1060         if (btrfs_test_opt(info, NODATASUM))     1543         if (btrfs_test_opt(info, NODATASUM))
1061                 seq_puts(seq, ",nodatasum");     1544                 seq_puts(seq, ",nodatasum");
1062         if (btrfs_test_opt(info, NODATACOW))     1545         if (btrfs_test_opt(info, NODATACOW))
1063                 seq_puts(seq, ",nodatacow");     1546                 seq_puts(seq, ",nodatacow");
1064         if (btrfs_test_opt(info, NOBARRIER))     1547         if (btrfs_test_opt(info, NOBARRIER))
1065                 seq_puts(seq, ",nobarrier");     1548                 seq_puts(seq, ",nobarrier");
1066         if (info->max_inline != BTRFS_DEFAULT    1549         if (info->max_inline != BTRFS_DEFAULT_MAX_INLINE)
1067                 seq_printf(seq, ",max_inline=    1550                 seq_printf(seq, ",max_inline=%llu", info->max_inline);
1068         if (info->thread_pool_size !=  min_t(    1551         if (info->thread_pool_size !=  min_t(unsigned long,
1069                                                  1552                                              num_online_cpus() + 2, 8))
1070                 seq_printf(seq, ",thread_pool    1553                 seq_printf(seq, ",thread_pool=%u", info->thread_pool_size);
1071         if (btrfs_test_opt(info, COMPRESS)) {    1554         if (btrfs_test_opt(info, COMPRESS)) {
1072                 compress_type = btrfs_compres    1555                 compress_type = btrfs_compress_type2str(info->compress_type);
1073                 if (btrfs_test_opt(info, FORC    1556                 if (btrfs_test_opt(info, FORCE_COMPRESS))
1074                         seq_printf(seq, ",com    1557                         seq_printf(seq, ",compress-force=%s", compress_type);
1075                 else                             1558                 else
1076                         seq_printf(seq, ",com    1559                         seq_printf(seq, ",compress=%s", compress_type);
1077                 if (info->compress_level)        1560                 if (info->compress_level)
1078                         seq_printf(seq, ":%d"    1561                         seq_printf(seq, ":%d", info->compress_level);
1079         }                                        1562         }
1080         if (btrfs_test_opt(info, NOSSD))         1563         if (btrfs_test_opt(info, NOSSD))
1081                 seq_puts(seq, ",nossd");         1564                 seq_puts(seq, ",nossd");
1082         if (btrfs_test_opt(info, SSD_SPREAD))    1565         if (btrfs_test_opt(info, SSD_SPREAD))
1083                 seq_puts(seq, ",ssd_spread");    1566                 seq_puts(seq, ",ssd_spread");
1084         else if (btrfs_test_opt(info, SSD))      1567         else if (btrfs_test_opt(info, SSD))
1085                 seq_puts(seq, ",ssd");           1568                 seq_puts(seq, ",ssd");
1086         if (btrfs_test_opt(info, NOTREELOG))     1569         if (btrfs_test_opt(info, NOTREELOG))
1087                 seq_puts(seq, ",notreelog");     1570                 seq_puts(seq, ",notreelog");
1088         if (btrfs_test_opt(info, NOLOGREPLAY)    1571         if (btrfs_test_opt(info, NOLOGREPLAY))
1089                 print_rescue_option(seq, "nol    1572                 print_rescue_option(seq, "nologreplay", &printed);
1090         if (btrfs_test_opt(info, USEBACKUPROO    1573         if (btrfs_test_opt(info, USEBACKUPROOT))
1091                 print_rescue_option(seq, "use    1574                 print_rescue_option(seq, "usebackuproot", &printed);
1092         if (btrfs_test_opt(info, IGNOREBADROO    1575         if (btrfs_test_opt(info, IGNOREBADROOTS))
1093                 print_rescue_option(seq, "ign    1576                 print_rescue_option(seq, "ignorebadroots", &printed);
1094         if (btrfs_test_opt(info, IGNOREDATACS    1577         if (btrfs_test_opt(info, IGNOREDATACSUMS))
1095                 print_rescue_option(seq, "ign    1578                 print_rescue_option(seq, "ignoredatacsums", &printed);
1096         if (btrfs_test_opt(info, IGNOREMETACS << 
1097                 print_rescue_option(seq, "ign << 
1098         if (btrfs_test_opt(info, IGNORESUPERF << 
1099                 print_rescue_option(seq, "ign << 
1100         if (btrfs_test_opt(info, FLUSHONCOMMI    1579         if (btrfs_test_opt(info, FLUSHONCOMMIT))
1101                 seq_puts(seq, ",flushoncommit    1580                 seq_puts(seq, ",flushoncommit");
1102         if (btrfs_test_opt(info, DISCARD_SYNC    1581         if (btrfs_test_opt(info, DISCARD_SYNC))
1103                 seq_puts(seq, ",discard");       1582                 seq_puts(seq, ",discard");
1104         if (btrfs_test_opt(info, DISCARD_ASYN    1583         if (btrfs_test_opt(info, DISCARD_ASYNC))
1105                 seq_puts(seq, ",discard=async    1584                 seq_puts(seq, ",discard=async");
1106         if (!(info->sb->s_flags & SB_POSIXACL    1585         if (!(info->sb->s_flags & SB_POSIXACL))
1107                 seq_puts(seq, ",noacl");         1586                 seq_puts(seq, ",noacl");
1108         if (btrfs_free_space_cache_v1_active(    1587         if (btrfs_free_space_cache_v1_active(info))
1109                 seq_puts(seq, ",space_cache")    1588                 seq_puts(seq, ",space_cache");
1110         else if (btrfs_fs_compat_ro(info, FRE    1589         else if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE))
1111                 seq_puts(seq, ",space_cache=v    1590                 seq_puts(seq, ",space_cache=v2");
1112         else                                     1591         else
1113                 seq_puts(seq, ",nospace_cache    1592                 seq_puts(seq, ",nospace_cache");
1114         if (btrfs_test_opt(info, RESCAN_UUID_    1593         if (btrfs_test_opt(info, RESCAN_UUID_TREE))
1115                 seq_puts(seq, ",rescan_uuid_t    1594                 seq_puts(seq, ",rescan_uuid_tree");
1116         if (btrfs_test_opt(info, CLEAR_CACHE)    1595         if (btrfs_test_opt(info, CLEAR_CACHE))
1117                 seq_puts(seq, ",clear_cache")    1596                 seq_puts(seq, ",clear_cache");
1118         if (btrfs_test_opt(info, USER_SUBVOL_    1597         if (btrfs_test_opt(info, USER_SUBVOL_RM_ALLOWED))
1119                 seq_puts(seq, ",user_subvol_r    1598                 seq_puts(seq, ",user_subvol_rm_allowed");
1120         if (btrfs_test_opt(info, ENOSPC_DEBUG    1599         if (btrfs_test_opt(info, ENOSPC_DEBUG))
1121                 seq_puts(seq, ",enospc_debug"    1600                 seq_puts(seq, ",enospc_debug");
1122         if (btrfs_test_opt(info, AUTO_DEFRAG)    1601         if (btrfs_test_opt(info, AUTO_DEFRAG))
1123                 seq_puts(seq, ",autodefrag");    1602                 seq_puts(seq, ",autodefrag");
1124         if (btrfs_test_opt(info, SKIP_BALANCE    1603         if (btrfs_test_opt(info, SKIP_BALANCE))
1125                 seq_puts(seq, ",skip_balance"    1604                 seq_puts(seq, ",skip_balance");
                                                   >> 1605 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
                                                   >> 1606         if (btrfs_test_opt(info, CHECK_INTEGRITY_DATA))
                                                   >> 1607                 seq_puts(seq, ",check_int_data");
                                                   >> 1608         else if (btrfs_test_opt(info, CHECK_INTEGRITY))
                                                   >> 1609                 seq_puts(seq, ",check_int");
                                                   >> 1610         if (info->check_integrity_print_mask)
                                                   >> 1611                 seq_printf(seq, ",check_int_print_mask=%d",
                                                   >> 1612                                 info->check_integrity_print_mask);
                                                   >> 1613 #endif
1126         if (info->metadata_ratio)                1614         if (info->metadata_ratio)
1127                 seq_printf(seq, ",metadata_ra    1615                 seq_printf(seq, ",metadata_ratio=%u", info->metadata_ratio);
1128         if (btrfs_test_opt(info, PANIC_ON_FAT    1616         if (btrfs_test_opt(info, PANIC_ON_FATAL_ERROR))
1129                 seq_puts(seq, ",fatal_errors=    1617                 seq_puts(seq, ",fatal_errors=panic");
1130         if (info->commit_interval != BTRFS_DE    1618         if (info->commit_interval != BTRFS_DEFAULT_COMMIT_INTERVAL)
1131                 seq_printf(seq, ",commit=%u",    1619                 seq_printf(seq, ",commit=%u", info->commit_interval);
1132 #ifdef CONFIG_BTRFS_DEBUG                        1620 #ifdef CONFIG_BTRFS_DEBUG
1133         if (btrfs_test_opt(info, FRAGMENT_DAT    1621         if (btrfs_test_opt(info, FRAGMENT_DATA))
1134                 seq_puts(seq, ",fragment=data    1622                 seq_puts(seq, ",fragment=data");
1135         if (btrfs_test_opt(info, FRAGMENT_MET    1623         if (btrfs_test_opt(info, FRAGMENT_METADATA))
1136                 seq_puts(seq, ",fragment=meta    1624                 seq_puts(seq, ",fragment=metadata");
1137 #endif                                           1625 #endif
1138         if (btrfs_test_opt(info, REF_VERIFY))    1626         if (btrfs_test_opt(info, REF_VERIFY))
1139                 seq_puts(seq, ",ref_verify");    1627                 seq_puts(seq, ",ref_verify");
1140         seq_printf(seq, ",subvolid=%llu", btr !! 1628         seq_printf(seq, ",subvolid=%llu",
                                                   >> 1629                   BTRFS_I(d_inode(dentry))->root->root_key.objectid);
1141         subvol_name = btrfs_get_subvol_name_f    1630         subvol_name = btrfs_get_subvol_name_from_objectid(info,
1142                         btrfs_root_id(BTRFS_I !! 1631                         BTRFS_I(d_inode(dentry))->root->root_key.objectid);
1143         if (!IS_ERR(subvol_name)) {              1632         if (!IS_ERR(subvol_name)) {
1144                 seq_puts(seq, ",subvol=");       1633                 seq_puts(seq, ",subvol=");
1145                 seq_escape(seq, subvol_name,     1634                 seq_escape(seq, subvol_name, " \t\n\\");
1146                 kfree(subvol_name);              1635                 kfree(subvol_name);
1147         }                                        1636         }
1148         return 0;                                1637         return 0;
1149 }                                                1638 }
1150                                                  1639 
                                                   >> 1640 static int btrfs_test_super(struct super_block *s, void *data)
                                                   >> 1641 {
                                                   >> 1642         struct btrfs_fs_info *p = data;
                                                   >> 1643         struct btrfs_fs_info *fs_info = btrfs_sb(s);
                                                   >> 1644 
                                                   >> 1645         return fs_info->fs_devices == p->fs_devices;
                                                   >> 1646 }
                                                   >> 1647 
                                                   >> 1648 static int btrfs_set_super(struct super_block *s, void *data)
                                                   >> 1649 {
                                                   >> 1650         int err = set_anon_super(s, data);
                                                   >> 1651         if (!err)
                                                   >> 1652                 s->s_fs_info = data;
                                                   >> 1653         return err;
                                                   >> 1654 }
                                                   >> 1655 
1151 /*                                               1656 /*
1152  * subvolumes are identified by ino 256          1657  * subvolumes are identified by ino 256
1153  */                                              1658  */
1154 static inline int is_subvolume_inode(struct i    1659 static inline int is_subvolume_inode(struct inode *inode)
1155 {                                                1660 {
1156         if (inode && inode->i_ino == BTRFS_FI    1661         if (inode && inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
1157                 return 1;                        1662                 return 1;
1158         return 0;                                1663         return 0;
1159 }                                                1664 }
1160                                                  1665 
1161 static struct dentry *mount_subvol(const char    1666 static struct dentry *mount_subvol(const char *subvol_name, u64 subvol_objectid,
1162                                    struct vfs    1667                                    struct vfsmount *mnt)
1163 {                                                1668 {
1164         struct dentry *root;                     1669         struct dentry *root;
1165         int ret;                                 1670         int ret;
1166                                                  1671 
1167         if (!subvol_name) {                      1672         if (!subvol_name) {
1168                 if (!subvol_objectid) {          1673                 if (!subvol_objectid) {
1169                         ret = get_default_sub    1674                         ret = get_default_subvol_objectid(btrfs_sb(mnt->mnt_sb),
1170                                                  1675                                                           &subvol_objectid);
1171                         if (ret) {               1676                         if (ret) {
1172                                 root = ERR_PT    1677                                 root = ERR_PTR(ret);
1173                                 goto out;        1678                                 goto out;
1174                         }                        1679                         }
1175                 }                                1680                 }
1176                 subvol_name = btrfs_get_subvo    1681                 subvol_name = btrfs_get_subvol_name_from_objectid(
1177                                         btrfs    1682                                         btrfs_sb(mnt->mnt_sb), subvol_objectid);
1178                 if (IS_ERR(subvol_name)) {       1683                 if (IS_ERR(subvol_name)) {
1179                         root = ERR_CAST(subvo    1684                         root = ERR_CAST(subvol_name);
1180                         subvol_name = NULL;      1685                         subvol_name = NULL;
1181                         goto out;                1686                         goto out;
1182                 }                                1687                 }
1183                                                  1688 
1184         }                                        1689         }
1185                                                  1690 
1186         root = mount_subtree(mnt, subvol_name    1691         root = mount_subtree(mnt, subvol_name);
1187         /* mount_subtree() drops our referenc    1692         /* mount_subtree() drops our reference on the vfsmount. */
1188         mnt = NULL;                              1693         mnt = NULL;
1189                                                  1694 
1190         if (!IS_ERR(root)) {                     1695         if (!IS_ERR(root)) {
1191                 struct super_block *s = root-    1696                 struct super_block *s = root->d_sb;
1192                 struct btrfs_fs_info *fs_info    1697                 struct btrfs_fs_info *fs_info = btrfs_sb(s);
1193                 struct inode *root_inode = d_    1698                 struct inode *root_inode = d_inode(root);
1194                 u64 root_objectid = btrfs_roo !! 1699                 u64 root_objectid = BTRFS_I(root_inode)->root->root_key.objectid;
1195                                                  1700 
1196                 ret = 0;                         1701                 ret = 0;
1197                 if (!is_subvolume_inode(root_    1702                 if (!is_subvolume_inode(root_inode)) {
1198                         btrfs_err(fs_info, "'    1703                         btrfs_err(fs_info, "'%s' is not a valid subvolume",
1199                                subvol_name);     1704                                subvol_name);
1200                         ret = -EINVAL;           1705                         ret = -EINVAL;
1201                 }                                1706                 }
1202                 if (subvol_objectid && root_o    1707                 if (subvol_objectid && root_objectid != subvol_objectid) {
1203                         /*                       1708                         /*
1204                          * This will also cat    1709                          * This will also catch a race condition where a
1205                          * subvolume which wa    1710                          * subvolume which was passed by ID is renamed and
1206                          * another subvolume     1711                          * another subvolume is renamed over the old location.
1207                          */                      1712                          */
1208                         btrfs_err(fs_info,       1713                         btrfs_err(fs_info,
1209                                   "subvol '%s    1714                                   "subvol '%s' does not match subvolid %llu",
1210                                   subvol_name    1715                                   subvol_name, subvol_objectid);
1211                         ret = -EINVAL;           1716                         ret = -EINVAL;
1212                 }                                1717                 }
1213                 if (ret) {                       1718                 if (ret) {
1214                         dput(root);              1719                         dput(root);
1215                         root = ERR_PTR(ret);     1720                         root = ERR_PTR(ret);
1216                         deactivate_locked_sup    1721                         deactivate_locked_super(s);
1217                 }                                1722                 }
1218         }                                        1723         }
1219                                                  1724 
1220 out:                                             1725 out:
1221         mntput(mnt);                             1726         mntput(mnt);
1222         kfree(subvol_name);                      1727         kfree(subvol_name);
1223         return root;                             1728         return root;
1224 }                                                1729 }
1225                                                  1730 
                                                   >> 1731 /*
                                                   >> 1732  * Find a superblock for the given device / mount point.
                                                   >> 1733  *
                                                   >> 1734  * Note: This is based on mount_bdev from fs/super.c with a few additions
                                                   >> 1735  *       for multiple device setup.  Make sure to keep it in sync.
                                                   >> 1736  */
                                                   >> 1737 static struct dentry *btrfs_mount_root(struct file_system_type *fs_type,
                                                   >> 1738                 int flags, const char *device_name, void *data)
                                                   >> 1739 {
                                                   >> 1740         struct block_device *bdev = NULL;
                                                   >> 1741         struct super_block *s;
                                                   >> 1742         struct btrfs_device *device = NULL;
                                                   >> 1743         struct btrfs_fs_devices *fs_devices = NULL;
                                                   >> 1744         struct btrfs_fs_info *fs_info = NULL;
                                                   >> 1745         void *new_sec_opts = NULL;
                                                   >> 1746         fmode_t mode = FMODE_READ;
                                                   >> 1747         int error = 0;
                                                   >> 1748 
                                                   >> 1749         if (!(flags & SB_RDONLY))
                                                   >> 1750                 mode |= FMODE_WRITE;
                                                   >> 1751 
                                                   >> 1752         if (data) {
                                                   >> 1753                 error = security_sb_eat_lsm_opts(data, &new_sec_opts);
                                                   >> 1754                 if (error)
                                                   >> 1755                         return ERR_PTR(error);
                                                   >> 1756         }
                                                   >> 1757 
                                                   >> 1758         /*
                                                   >> 1759          * Setup a dummy root and fs_info for test/set super.  This is because
                                                   >> 1760          * we don't actually fill this stuff out until open_ctree, but we need
                                                   >> 1761          * then open_ctree will properly initialize the file system specific
                                                   >> 1762          * settings later.  btrfs_init_fs_info initializes the static elements
                                                   >> 1763          * of the fs_info (locks and such) to make cleanup easier if we find a
                                                   >> 1764          * superblock with our given fs_devices later on at sget() time.
                                                   >> 1765          */
                                                   >> 1766         fs_info = kvzalloc(sizeof(struct btrfs_fs_info), GFP_KERNEL);
                                                   >> 1767         if (!fs_info) {
                                                   >> 1768                 error = -ENOMEM;
                                                   >> 1769                 goto error_sec_opts;
                                                   >> 1770         }
                                                   >> 1771         btrfs_init_fs_info(fs_info);
                                                   >> 1772 
                                                   >> 1773         fs_info->super_copy = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL);
                                                   >> 1774         fs_info->super_for_commit = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL);
                                                   >> 1775         if (!fs_info->super_copy || !fs_info->super_for_commit) {
                                                   >> 1776                 error = -ENOMEM;
                                                   >> 1777                 goto error_fs_info;
                                                   >> 1778         }
                                                   >> 1779 
                                                   >> 1780         mutex_lock(&uuid_mutex);
                                                   >> 1781         error = btrfs_parse_device_options(data, mode, fs_type);
                                                   >> 1782         if (error) {
                                                   >> 1783                 mutex_unlock(&uuid_mutex);
                                                   >> 1784                 goto error_fs_info;
                                                   >> 1785         }
                                                   >> 1786 
                                                   >> 1787         device = btrfs_scan_one_device(device_name, mode, fs_type);
                                                   >> 1788         if (IS_ERR(device)) {
                                                   >> 1789                 mutex_unlock(&uuid_mutex);
                                                   >> 1790                 error = PTR_ERR(device);
                                                   >> 1791                 goto error_fs_info;
                                                   >> 1792         }
                                                   >> 1793 
                                                   >> 1794         fs_devices = device->fs_devices;
                                                   >> 1795         fs_info->fs_devices = fs_devices;
                                                   >> 1796 
                                                   >> 1797         error = btrfs_open_devices(fs_devices, mode, fs_type);
                                                   >> 1798         mutex_unlock(&uuid_mutex);
                                                   >> 1799         if (error)
                                                   >> 1800                 goto error_fs_info;
                                                   >> 1801 
                                                   >> 1802         if (!(flags & SB_RDONLY) && fs_devices->rw_devices == 0) {
                                                   >> 1803                 error = -EACCES;
                                                   >> 1804                 goto error_close_devices;
                                                   >> 1805         }
                                                   >> 1806 
                                                   >> 1807         bdev = fs_devices->latest_dev->bdev;
                                                   >> 1808         s = sget(fs_type, btrfs_test_super, btrfs_set_super, flags | SB_NOSEC,
                                                   >> 1809                  fs_info);
                                                   >> 1810         if (IS_ERR(s)) {
                                                   >> 1811                 error = PTR_ERR(s);
                                                   >> 1812                 goto error_close_devices;
                                                   >> 1813         }
                                                   >> 1814 
                                                   >> 1815         if (s->s_root) {
                                                   >> 1816                 btrfs_close_devices(fs_devices);
                                                   >> 1817                 btrfs_free_fs_info(fs_info);
                                                   >> 1818                 if ((flags ^ s->s_flags) & SB_RDONLY)
                                                   >> 1819                         error = -EBUSY;
                                                   >> 1820         } else {
                                                   >> 1821                 snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
                                                   >> 1822                 shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s", fs_type->name,
                                                   >> 1823                                         s->s_id);
                                                   >> 1824                 btrfs_sb(s)->bdev_holder = fs_type;
                                                   >> 1825                 if (!strstr(crc32c_impl(), "generic"))
                                                   >> 1826                         set_bit(BTRFS_FS_CSUM_IMPL_FAST, &fs_info->flags);
                                                   >> 1827                 error = btrfs_fill_super(s, fs_devices, data);
                                                   >> 1828         }
                                                   >> 1829         if (!error)
                                                   >> 1830                 error = security_sb_set_mnt_opts(s, new_sec_opts, 0, NULL);
                                                   >> 1831         security_free_mnt_opts(&new_sec_opts);
                                                   >> 1832         if (error) {
                                                   >> 1833                 deactivate_locked_super(s);
                                                   >> 1834                 return ERR_PTR(error);
                                                   >> 1835         }
                                                   >> 1836 
                                                   >> 1837         return dget(s->s_root);
                                                   >> 1838 
                                                   >> 1839 error_close_devices:
                                                   >> 1840         btrfs_close_devices(fs_devices);
                                                   >> 1841 error_fs_info:
                                                   >> 1842         btrfs_free_fs_info(fs_info);
                                                   >> 1843 error_sec_opts:
                                                   >> 1844         security_free_mnt_opts(&new_sec_opts);
                                                   >> 1845         return ERR_PTR(error);
                                                   >> 1846 }
                                                   >> 1847 
                                                   >> 1848 /*
                                                   >> 1849  * Mount function which is called by VFS layer.
                                                   >> 1850  *
                                                   >> 1851  * In order to allow mounting a subvolume directly, btrfs uses mount_subtree()
                                                   >> 1852  * which needs vfsmount* of device's root (/).  This means device's root has to
                                                   >> 1853  * be mounted internally in any case.
                                                   >> 1854  *
                                                   >> 1855  * Operation flow:
                                                   >> 1856  *   1. Parse subvol id related options for later use in mount_subvol().
                                                   >> 1857  *
                                                   >> 1858  *   2. Mount device's root (/) by calling vfs_kern_mount().
                                                   >> 1859  *
                                                   >> 1860  *      NOTE: vfs_kern_mount() is used by VFS to call btrfs_mount() in the
                                                   >> 1861  *      first place. In order to avoid calling btrfs_mount() again, we use
                                                   >> 1862  *      different file_system_type which is not registered to VFS by
                                                   >> 1863  *      register_filesystem() (btrfs_root_fs_type). As a result,
                                                   >> 1864  *      btrfs_mount_root() is called. The return value will be used by
                                                   >> 1865  *      mount_subtree() in mount_subvol().
                                                   >> 1866  *
                                                   >> 1867  *   3. Call mount_subvol() to get the dentry of subvolume. Since there is
                                                   >> 1868  *      "btrfs subvolume set-default", mount_subvol() is called always.
                                                   >> 1869  */
                                                   >> 1870 static struct dentry *btrfs_mount(struct file_system_type *fs_type, int flags,
                                                   >> 1871                 const char *device_name, void *data)
                                                   >> 1872 {
                                                   >> 1873         struct vfsmount *mnt_root;
                                                   >> 1874         struct dentry *root;
                                                   >> 1875         char *subvol_name = NULL;
                                                   >> 1876         u64 subvol_objectid = 0;
                                                   >> 1877         int error = 0;
                                                   >> 1878 
                                                   >> 1879         error = btrfs_parse_subvol_options(data, &subvol_name,
                                                   >> 1880                                         &subvol_objectid);
                                                   >> 1881         if (error) {
                                                   >> 1882                 kfree(subvol_name);
                                                   >> 1883                 return ERR_PTR(error);
                                                   >> 1884         }
                                                   >> 1885 
                                                   >> 1886         /* mount device's root (/) */
                                                   >> 1887         mnt_root = vfs_kern_mount(&btrfs_root_fs_type, flags, device_name, data);
                                                   >> 1888         if (PTR_ERR_OR_ZERO(mnt_root) == -EBUSY) {
                                                   >> 1889                 if (flags & SB_RDONLY) {
                                                   >> 1890                         mnt_root = vfs_kern_mount(&btrfs_root_fs_type,
                                                   >> 1891                                 flags & ~SB_RDONLY, device_name, data);
                                                   >> 1892                 } else {
                                                   >> 1893                         mnt_root = vfs_kern_mount(&btrfs_root_fs_type,
                                                   >> 1894                                 flags | SB_RDONLY, device_name, data);
                                                   >> 1895                         if (IS_ERR(mnt_root)) {
                                                   >> 1896                                 root = ERR_CAST(mnt_root);
                                                   >> 1897                                 kfree(subvol_name);
                                                   >> 1898                                 goto out;
                                                   >> 1899                         }
                                                   >> 1900 
                                                   >> 1901                         down_write(&mnt_root->mnt_sb->s_umount);
                                                   >> 1902                         error = btrfs_remount(mnt_root->mnt_sb, &flags, NULL);
                                                   >> 1903                         up_write(&mnt_root->mnt_sb->s_umount);
                                                   >> 1904                         if (error < 0) {
                                                   >> 1905                                 root = ERR_PTR(error);
                                                   >> 1906                                 mntput(mnt_root);
                                                   >> 1907                                 kfree(subvol_name);
                                                   >> 1908                                 goto out;
                                                   >> 1909                         }
                                                   >> 1910                 }
                                                   >> 1911         }
                                                   >> 1912         if (IS_ERR(mnt_root)) {
                                                   >> 1913                 root = ERR_CAST(mnt_root);
                                                   >> 1914                 kfree(subvol_name);
                                                   >> 1915                 goto out;
                                                   >> 1916         }
                                                   >> 1917 
                                                   >> 1918         /* mount_subvol() will free subvol_name and mnt_root */
                                                   >> 1919         root = mount_subvol(subvol_name, subvol_objectid, mnt_root);
                                                   >> 1920 
                                                   >> 1921 out:
                                                   >> 1922         return root;
                                                   >> 1923 }
                                                   >> 1924 
1226 static void btrfs_resize_thread_pool(struct b    1925 static void btrfs_resize_thread_pool(struct btrfs_fs_info *fs_info,
1227                                      u32 new_    1926                                      u32 new_pool_size, u32 old_pool_size)
1228 {                                                1927 {
1229         if (new_pool_size == old_pool_size)      1928         if (new_pool_size == old_pool_size)
1230                 return;                          1929                 return;
1231                                                  1930 
1232         fs_info->thread_pool_size = new_pool_    1931         fs_info->thread_pool_size = new_pool_size;
1233                                                  1932 
1234         btrfs_info(fs_info, "resize thread po    1933         btrfs_info(fs_info, "resize thread pool %d -> %d",
1235                old_pool_size, new_pool_size);    1934                old_pool_size, new_pool_size);
1236                                                  1935 
1237         btrfs_workqueue_set_max(fs_info->work    1936         btrfs_workqueue_set_max(fs_info->workers, new_pool_size);
                                                   >> 1937         btrfs_workqueue_set_max(fs_info->hipri_workers, new_pool_size);
1238         btrfs_workqueue_set_max(fs_info->dela    1938         btrfs_workqueue_set_max(fs_info->delalloc_workers, new_pool_size);
1239         btrfs_workqueue_set_max(fs_info->cach    1939         btrfs_workqueue_set_max(fs_info->caching_workers, new_pool_size);
1240         workqueue_set_max_active(fs_info->end << 
1241         workqueue_set_max_active(fs_info->end << 
1242         btrfs_workqueue_set_max(fs_info->endi    1940         btrfs_workqueue_set_max(fs_info->endio_write_workers, new_pool_size);
1243         btrfs_workqueue_set_max(fs_info->endi    1941         btrfs_workqueue_set_max(fs_info->endio_freespace_worker, new_pool_size);
1244         btrfs_workqueue_set_max(fs_info->dela    1942         btrfs_workqueue_set_max(fs_info->delayed_workers, new_pool_size);
1245 }                                                1943 }
1246                                                  1944 
1247 static inline void btrfs_remount_begin(struct    1945 static inline void btrfs_remount_begin(struct btrfs_fs_info *fs_info,
1248                                        unsign !! 1946                                        unsigned long old_opts, int flags)
1249 {                                                1947 {
1250         if (btrfs_raw_test_opt(old_opts, AUTO    1948         if (btrfs_raw_test_opt(old_opts, AUTO_DEFRAG) &&
1251             (!btrfs_raw_test_opt(fs_info->mou    1949             (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) ||
1252              (flags & SB_RDONLY))) {             1950              (flags & SB_RDONLY))) {
1253                 /* wait for any defraggers to    1951                 /* wait for any defraggers to finish */
1254                 wait_event(fs_info->transacti    1952                 wait_event(fs_info->transaction_wait,
1255                            (atomic_read(&fs_i    1953                            (atomic_read(&fs_info->defrag_running) == 0));
1256                 if (flags & SB_RDONLY)           1954                 if (flags & SB_RDONLY)
1257                         sync_filesystem(fs_in    1955                         sync_filesystem(fs_info->sb);
1258         }                                        1956         }
1259 }                                                1957 }
1260                                                  1958 
1261 static inline void btrfs_remount_cleanup(stru    1959 static inline void btrfs_remount_cleanup(struct btrfs_fs_info *fs_info,
1262                                          unsi !! 1960                                          unsigned long old_opts)
1263 {                                                1961 {
1264         const bool cache_opt = btrfs_test_opt    1962         const bool cache_opt = btrfs_test_opt(fs_info, SPACE_CACHE);
1265                                                  1963 
1266         /*                                       1964         /*
1267          * We need to cleanup all defragable     1965          * We need to cleanup all defragable inodes if the autodefragment is
1268          * close or the filesystem is read on    1966          * close or the filesystem is read only.
1269          */                                      1967          */
1270         if (btrfs_raw_test_opt(old_opts, AUTO    1968         if (btrfs_raw_test_opt(old_opts, AUTO_DEFRAG) &&
1271             (!btrfs_raw_test_opt(fs_info->mou    1969             (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) || sb_rdonly(fs_info->sb))) {
1272                 btrfs_cleanup_defrag_inodes(f    1970                 btrfs_cleanup_defrag_inodes(fs_info);
1273         }                                        1971         }
1274                                                  1972 
1275         /* If we toggled discard async */        1973         /* If we toggled discard async */
1276         if (!btrfs_raw_test_opt(old_opts, DIS    1974         if (!btrfs_raw_test_opt(old_opts, DISCARD_ASYNC) &&
1277             btrfs_test_opt(fs_info, DISCARD_A    1975             btrfs_test_opt(fs_info, DISCARD_ASYNC))
1278                 btrfs_discard_resume(fs_info)    1976                 btrfs_discard_resume(fs_info);
1279         else if (btrfs_raw_test_opt(old_opts,    1977         else if (btrfs_raw_test_opt(old_opts, DISCARD_ASYNC) &&
1280                  !btrfs_test_opt(fs_info, DIS    1978                  !btrfs_test_opt(fs_info, DISCARD_ASYNC))
1281                 btrfs_discard_cleanup(fs_info    1979                 btrfs_discard_cleanup(fs_info);
1282                                                  1980 
1283         /* If we toggled space cache */          1981         /* If we toggled space cache */
1284         if (cache_opt != btrfs_free_space_cac    1982         if (cache_opt != btrfs_free_space_cache_v1_active(fs_info))
1285                 btrfs_set_free_space_cache_v1    1983                 btrfs_set_free_space_cache_v1_active(fs_info, cache_opt);
1286 }                                                1984 }
1287                                                  1985 
1288 static int btrfs_remount_rw(struct btrfs_fs_i !! 1986 static int btrfs_remount(struct super_block *sb, int *flags, char *data)
1289 {                                                1987 {
                                                   >> 1988         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
                                                   >> 1989         unsigned old_flags = sb->s_flags;
                                                   >> 1990         unsigned long old_opts = fs_info->mount_opt;
                                                   >> 1991         unsigned long old_compress_type = fs_info->compress_type;
                                                   >> 1992         u64 old_max_inline = fs_info->max_inline;
                                                   >> 1993         u32 old_thread_pool_size = fs_info->thread_pool_size;
                                                   >> 1994         u32 old_metadata_ratio = fs_info->metadata_ratio;
1290         int ret;                                 1995         int ret;
1291                                                  1996 
1292         if (BTRFS_FS_ERROR(fs_info)) {        !! 1997         sync_filesystem(sb);
1293                 btrfs_err(fs_info,            !! 1998         set_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
1294                           "remounting read-wr << 
1295                 return -EINVAL;               << 
1296         }                                     << 
1297                                               << 
1298         if (fs_info->fs_devices->rw_devices = << 
1299                 return -EACCES;               << 
1300                                                  1999 
1301         if (!btrfs_check_rw_degradable(fs_inf !! 2000         if (data) {
1302                 btrfs_warn(fs_info,           !! 2001                 void *new_sec_opts = NULL;
1303                            "too many missing  << 
1304                 return -EACCES;               << 
1305         }                                     << 
1306                                                  2002 
1307         if (btrfs_super_log_root(fs_info->sup !! 2003                 ret = security_sb_eat_lsm_opts(data, &new_sec_opts);
1308                 btrfs_warn(fs_info,           !! 2004                 if (!ret)
1309                            "mount required to !! 2005                         ret = security_sb_remount(sb, new_sec_opts);
1310                 return -EINVAL;               !! 2006                 security_free_mnt_opts(&new_sec_opts);
                                                   >> 2007                 if (ret)
                                                   >> 2008                         goto restore;
1311         }                                        2009         }
1312                                                  2010 
1313         /*                                    !! 2011         ret = btrfs_parse_options(fs_info, data, *flags);
1314          * NOTE: when remounting with a chang << 
1315          * anywhere above this point, as we a << 
1316          * until we pass the above checks.    << 
1317          */                                   << 
1318         ret = btrfs_start_pre_rw_mount(fs_inf << 
1319         if (ret)                                 2012         if (ret)
1320                 return ret;                   !! 2013                 goto restore;
1321                                               << 
1322         btrfs_clear_sb_rdonly(fs_info->sb);   << 
1323                                               << 
1324         set_bit(BTRFS_FS_OPEN, &fs_info->flag << 
1325                                               << 
1326         /*                                    << 
1327          * If we've gone from readonly -> rea << 
1328          * sync/async discard lists in the ri << 
1329          */                                   << 
1330         btrfs_discard_resume(fs_info);        << 
1331                                               << 
1332         return 0;                             << 
1333 }                                             << 
1334                                               << 
1335 static int btrfs_remount_ro(struct btrfs_fs_i << 
1336 {                                             << 
1337         /*                                    << 
1338          * This also happens on 'umount -rf'  << 
1339          * filesystem is busy.                << 
1340          */                                   << 
1341         cancel_work_sync(&fs_info->async_recl << 
1342         cancel_work_sync(&fs_info->async_data << 
1343                                                  2014 
1344         btrfs_discard_cleanup(fs_info);       !! 2015         ret = btrfs_check_features(fs_info, !(*flags & SB_RDONLY));
                                                   >> 2016         if (ret < 0)
                                                   >> 2017                 goto restore;
1345                                                  2018 
1346         /* Wait for the uuid_scan task to fin !! 2019         btrfs_remount_begin(fs_info, old_opts, *flags);
1347         down(&fs_info->uuid_tree_rescan_sem); !! 2020         btrfs_resize_thread_pool(fs_info,
1348         /* Avoid complains from lockdep et al !! 2021                 fs_info->thread_pool_size, old_thread_pool_size);
1349         up(&fs_info->uuid_tree_rescan_sem);   << 
1350                                                  2022 
1351         btrfs_set_sb_rdonly(fs_info->sb);     !! 2023         if ((bool)btrfs_test_opt(fs_info, FREE_SPACE_TREE) !=
                                                   >> 2024             (bool)btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE) &&
                                                   >> 2025             (!sb_rdonly(sb) || (*flags & SB_RDONLY))) {
                                                   >> 2026                 btrfs_warn(fs_info,
                                                   >> 2027                 "remount supports changing free space tree only from ro to rw");
                                                   >> 2028                 /* Make sure free space cache options match the state on disk */
                                                   >> 2029                 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
                                                   >> 2030                         btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE);
                                                   >> 2031                         btrfs_clear_opt(fs_info->mount_opt, SPACE_CACHE);
                                                   >> 2032                 }
                                                   >> 2033                 if (btrfs_free_space_cache_v1_active(fs_info)) {
                                                   >> 2034                         btrfs_clear_opt(fs_info->mount_opt, FREE_SPACE_TREE);
                                                   >> 2035                         btrfs_set_opt(fs_info->mount_opt, SPACE_CACHE);
                                                   >> 2036                 }
                                                   >> 2037         }
1352                                                  2038 
1353         /*                                    !! 2039         if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb))
1354          * Setting SB_RDONLY will put the cle !! 2040                 goto out;
1355          * loop if it's already active.  If i << 
1356          * unused block groups on disk until  << 
1357          * unless we clean them up here.      << 
1358          */                                   << 
1359         btrfs_delete_unused_bgs(fs_info);     << 
1360                                                  2041 
1361         /*                                    !! 2042         if (*flags & SB_RDONLY) {
1362          * The cleaner task could be already  !! 2043                 /*
1363          * BTRFS_FS_STATE_RO (and SB_RDONLY i !! 2044                  * this also happens on 'umount -rf' or on shutdown, when
1364          * sure that after we finish the remo !! 2045                  * the filesystem is busy.
1365          * btrfs_commit_super(), the cleaner  !! 2046                  */
1366          * - either because it was dropping a !! 2047                 cancel_work_sync(&fs_info->async_reclaim_work);
1367          *   or deleting an unused block grou !! 2048                 cancel_work_sync(&fs_info->async_data_reclaim_work);
1368          *   group from the list of unused bl << 
1369          *   in the previous call to btrfs_de << 
1370          */                                   << 
1371         wait_on_bit(&fs_info->flags, BTRFS_FS << 
1372                                                  2049 
1373         /*                                    !! 2050                 btrfs_discard_cleanup(fs_info);
1374          * We've set the superblock to RO mod << 
1375          * cleaner task sleep without running << 
1376          * through all the delayed iputs here << 
1377          * without remounting RW we don't end << 
1378          * with a non-empty list of delayed i << 
1379          */                                   << 
1380         btrfs_run_delayed_iputs(fs_info);     << 
1381                                                  2051 
1382         btrfs_dev_replace_suspend_for_unmount !! 2052                 /* wait for the uuid_scan task to finish */
1383         btrfs_scrub_cancel(fs_info);          !! 2053                 down(&fs_info->uuid_tree_rescan_sem);
1384         btrfs_pause_balance(fs_info);         !! 2054                 /* avoid complains from lockdep et al. */
                                                   >> 2055                 up(&fs_info->uuid_tree_rescan_sem);
1385                                                  2056 
1386         /*                                    !! 2057                 btrfs_set_sb_rdonly(sb);
1387          * Pause the qgroup rescan worker if  << 
1388          * be still running after we are in R << 
1389          * we unmount, it might have left a t << 
1390          * the transaction and/or crash.      << 
1391          */                                   << 
1392         btrfs_qgroup_wait_for_completion(fs_i << 
1393                                                  2058 
1394         return btrfs_commit_super(fs_info);   !! 2059                 /*
1395 }                                             !! 2060                  * Setting SB_RDONLY will put the cleaner thread to
                                                   >> 2061                  * sleep at the next loop if it's already active.
                                                   >> 2062                  * If it's already asleep, we'll leave unused block
                                                   >> 2063                  * groups on disk until we're mounted read-write again
                                                   >> 2064                  * unless we clean them up here.
                                                   >> 2065                  */
                                                   >> 2066                 btrfs_delete_unused_bgs(fs_info);
1396                                                  2067 
1397 static void btrfs_ctx_to_info(struct btrfs_fs !! 2068                 /*
1398 {                                             !! 2069                  * The cleaner task could be already running before we set the
1399         fs_info->max_inline = ctx->max_inline !! 2070                  * flag BTRFS_FS_STATE_RO (and SB_RDONLY in the superblock).
1400         fs_info->commit_interval = ctx->commi !! 2071                  * We must make sure that after we finish the remount, i.e. after
1401         fs_info->metadata_ratio = ctx->metada !! 2072                  * we call btrfs_commit_super(), the cleaner can no longer start
1402         fs_info->thread_pool_size = ctx->thre !! 2073                  * a transaction - either because it was dropping a dead root,
1403         fs_info->mount_opt = ctx->mount_opt;  !! 2074                  * running delayed iputs or deleting an unused block group (the
1404         fs_info->compress_type = ctx->compres !! 2075                  * cleaner picked a block group from the list of unused block
1405         fs_info->compress_level = ctx->compre !! 2076                  * groups before we were able to in the previous call to
1406 }                                             !! 2077                  * btrfs_delete_unused_bgs()).
1407                                               !! 2078                  */
1408 static void btrfs_info_to_ctx(struct btrfs_fs !! 2079                 wait_on_bit(&fs_info->flags, BTRFS_FS_CLEANER_RUNNING,
1409 {                                             !! 2080                             TASK_UNINTERRUPTIBLE);
1410         ctx->max_inline = fs_info->max_inline << 
1411         ctx->commit_interval = fs_info->commi << 
1412         ctx->metadata_ratio = fs_info->metada << 
1413         ctx->thread_pool_size = fs_info->thre << 
1414         ctx->mount_opt = fs_info->mount_opt;  << 
1415         ctx->compress_type = fs_info->compres << 
1416         ctx->compress_level = fs_info->compre << 
1417 }                                             << 
1418                                               << 
1419 #define btrfs_info_if_set(fs_info, old_ctx, o << 
1420 do {                                          << 
1421         if ((!old_ctx || !btrfs_raw_test_opt( << 
1422             btrfs_raw_test_opt(fs_info->mount << 
1423                 btrfs_info(fs_info, fmt, ##ar << 
1424 } while (0)                                   << 
1425                                               << 
1426 #define btrfs_info_if_unset(fs_info, old_ctx, << 
1427 do {                                          << 
1428         if ((old_ctx && btrfs_raw_test_opt(ol << 
1429             !btrfs_raw_test_opt(fs_info->moun << 
1430                 btrfs_info(fs_info, fmt, ##ar << 
1431 } while (0)                                   << 
1432                                               << 
1433 static void btrfs_emit_options(struct btrfs_f << 
1434                                struct btrfs_f << 
1435 {                                             << 
1436         btrfs_info_if_set(info, old, NODATASU << 
1437         btrfs_info_if_set(info, old, DEGRADED << 
1438         btrfs_info_if_set(info, old, NODATASU << 
1439         btrfs_info_if_set(info, old, SSD, "en << 
1440         btrfs_info_if_set(info, old, SSD_SPRE << 
1441         btrfs_info_if_set(info, old, NOBARRIE << 
1442         btrfs_info_if_set(info, old, NOTREELO << 
1443         btrfs_info_if_set(info, old, NOLOGREP << 
1444         btrfs_info_if_set(info, old, FLUSHONC << 
1445         btrfs_info_if_set(info, old, DISCARD_ << 
1446         btrfs_info_if_set(info, old, DISCARD_ << 
1447         btrfs_info_if_set(info, old, FREE_SPA << 
1448         btrfs_info_if_set(info, old, SPACE_CA << 
1449         btrfs_info_if_set(info, old, CLEAR_CA << 
1450         btrfs_info_if_set(info, old, AUTO_DEF << 
1451         btrfs_info_if_set(info, old, FRAGMENT << 
1452         btrfs_info_if_set(info, old, FRAGMENT << 
1453         btrfs_info_if_set(info, old, REF_VERI << 
1454         btrfs_info_if_set(info, old, USEBACKU << 
1455         btrfs_info_if_set(info, old, IGNOREBA << 
1456         btrfs_info_if_set(info, old, IGNOREDA << 
1457         btrfs_info_if_set(info, old, IGNOREME << 
1458         btrfs_info_if_set(info, old, IGNORESU << 
1459                                               << 
1460         btrfs_info_if_unset(info, old, NODATA << 
1461         btrfs_info_if_unset(info, old, SSD, " << 
1462         btrfs_info_if_unset(info, old, SSD_SP << 
1463         btrfs_info_if_unset(info, old, NOBARR << 
1464         btrfs_info_if_unset(info, old, NOTREE << 
1465         btrfs_info_if_unset(info, old, SPACE_ << 
1466         btrfs_info_if_unset(info, old, FREE_S << 
1467         btrfs_info_if_unset(info, old, AUTO_D << 
1468         btrfs_info_if_unset(info, old, COMPRE << 
1469                                               << 
1470         /* Did the compression settings chang << 
1471         if (btrfs_test_opt(info, COMPRESS) && << 
1472             (!old ||                          << 
1473              old->compress_type != info->comp << 
1474              old->compress_level != info->com << 
1475              (!btrfs_raw_test_opt(old->mount_ << 
1476               btrfs_raw_test_opt(info->mount_ << 
1477                 const char *compress_type = b << 
1478                                               << 
1479                 btrfs_info(info, "%s %s compr << 
1480                            btrfs_test_opt(inf << 
1481                            compress_type, inf << 
1482         }                                     << 
1483                                                  2081 
1484         if (info->max_inline != BTRFS_DEFAULT !! 2082                 /*
1485                 btrfs_info(info, "max_inline  !! 2083                  * We've set the superblock to RO mode, so we might have made
1486 }                                             !! 2084                  * the cleaner task sleep without running all pending delayed
                                                   >> 2085                  * iputs. Go through all the delayed iputs here, so that if an
                                                   >> 2086                  * unmount happens without remounting RW we don't end up at
                                                   >> 2087                  * finishing close_ctree() with a non-empty list of delayed
                                                   >> 2088                  * iputs.
                                                   >> 2089                  */
                                                   >> 2090                 btrfs_run_delayed_iputs(fs_info);
1487                                                  2091 
1488 static int btrfs_reconfigure(struct fs_contex !! 2092                 btrfs_dev_replace_suspend_for_unmount(fs_info);
1489 {                                             !! 2093                 btrfs_scrub_cancel(fs_info);
1490         struct super_block *sb = fc->root->d_ !! 2094                 btrfs_pause_balance(fs_info);
1491         struct btrfs_fs_info *fs_info = btrfs << 
1492         struct btrfs_fs_context *ctx = fc->fs << 
1493         struct btrfs_fs_context old_ctx;      << 
1494         int ret = 0;                          << 
1495         bool mount_reconfigure = (fc->s_fs_in << 
1496                                                  2095 
1497         btrfs_info_to_ctx(fs_info, &old_ctx); !! 2096                 /*
                                                   >> 2097                  * Pause the qgroup rescan worker if it is running. We don't want
                                                   >> 2098                  * it to be still running after we are in RO mode, as after that,
                                                   >> 2099                  * by the time we unmount, it might have left a transaction open,
                                                   >> 2100                  * so we would leak the transaction and/or crash.
                                                   >> 2101                  */
                                                   >> 2102                 btrfs_qgroup_wait_for_completion(fs_info, false);
1498                                                  2103 
1499         /*                                    !! 2104                 ret = btrfs_commit_super(fs_info);
1500          * This is our "bind mount" trick, we !! 2105                 if (ret)
1501          * anything other than mount a differ !! 2106                         goto restore;
1502          * all of the mount options should be !! 2107         } else {
1503          */                                   !! 2108                 if (BTRFS_FS_ERROR(fs_info)) {
1504         if (mount_reconfigure)                !! 2109                         btrfs_err(fs_info,
1505                 ctx->mount_opt = old_ctx.moun !! 2110                                 "Remounting read-write after error is not allowed");
                                                   >> 2111                         ret = -EINVAL;
                                                   >> 2112                         goto restore;
                                                   >> 2113                 }
                                                   >> 2114                 if (fs_info->fs_devices->rw_devices == 0) {
                                                   >> 2115                         ret = -EACCES;
                                                   >> 2116                         goto restore;
                                                   >> 2117                 }
1506                                                  2118 
1507         sync_filesystem(sb);                  !! 2119                 if (!btrfs_check_rw_degradable(fs_info, NULL)) {
1508         set_bit(BTRFS_FS_STATE_REMOUNTING, &f !! 2120                         btrfs_warn(fs_info,
                                                   >> 2121                 "too many missing devices, writable remount is not allowed");
                                                   >> 2122                         ret = -EACCES;
                                                   >> 2123                         goto restore;
                                                   >> 2124                 }
1509                                                  2125 
1510         if (!btrfs_check_options(fs_info, &ct !! 2126                 if (btrfs_super_log_root(fs_info->super_copy) != 0) {
1511                 return -EINVAL;               !! 2127                         btrfs_warn(fs_info,
                                                   >> 2128                 "mount required to replay tree-log, cannot remount read-write");
                                                   >> 2129                         ret = -EINVAL;
                                                   >> 2130                         goto restore;
                                                   >> 2131                 }
1512                                                  2132 
1513         ret = btrfs_check_features(fs_info, ! !! 2133                 /*
1514         if (ret < 0)                          !! 2134                  * NOTE: when remounting with a change that does writes, don't
1515                 return ret;                   !! 2135                  * put it anywhere above this point, as we are not sure to be
                                                   >> 2136                  * safe to write until we pass the above checks.
                                                   >> 2137                  */
                                                   >> 2138                 ret = btrfs_start_pre_rw_mount(fs_info);
                                                   >> 2139                 if (ret)
                                                   >> 2140                         goto restore;
1516                                                  2141 
1517         btrfs_ctx_to_info(fs_info, ctx);      !! 2142                 btrfs_clear_sb_rdonly(sb);
1518         btrfs_remount_begin(fs_info, old_ctx. << 
1519         btrfs_resize_thread_pool(fs_info, fs_ << 
1520                                  old_ctx.thre << 
1521                                                  2143 
1522         if ((bool)btrfs_test_opt(fs_info, FRE !! 2144                 set_bit(BTRFS_FS_OPEN, &fs_info->flags);
1523             (bool)btrfs_fs_compat_ro(fs_info, << 
1524             (!sb_rdonly(sb) || (fc->sb_flags  << 
1525                 btrfs_warn(fs_info,           << 
1526                 "remount supports changing fr << 
1527                 /* Make sure free space cache << 
1528                 if (btrfs_fs_compat_ro(fs_inf << 
1529                         btrfs_set_opt(fs_info << 
1530                         btrfs_clear_opt(fs_in << 
1531                 }                             << 
1532                 if (btrfs_free_space_cache_v1 << 
1533                         btrfs_clear_opt(fs_in << 
1534                         btrfs_set_opt(fs_info << 
1535                 }                             << 
1536         }                                        2145         }
1537                                               !! 2146 out:
1538         ret = 0;                              << 
1539         if (!sb_rdonly(sb) && (fc->sb_flags & << 
1540                 ret = btrfs_remount_ro(fs_inf << 
1541         else if (sb_rdonly(sb) && !(fc->sb_fl << 
1542                 ret = btrfs_remount_rw(fs_inf << 
1543         if (ret)                              << 
1544                 goto restore;                 << 
1545                                               << 
1546         /*                                       2147         /*
1547          * If we set the mask during the para !! 2148          * We need to set SB_I_VERSION here otherwise it'll get cleared by VFS,
1548          * remount.  Here we can set the mask !! 2149          * since the absence of the flag means it can be toggled off by remount.
1549          * appropriately.                     << 
1550          */                                      2150          */
1551         if ((fc->sb_flags & SB_POSIXACL) != ( !! 2151         *flags |= SB_I_VERSION;
1552                 fc->sb_flags_mask |= SB_POSIX << 
1553                                                  2152 
1554         btrfs_emit_options(fs_info, &old_ctx) << 
1555         wake_up_process(fs_info->transaction_    2153         wake_up_process(fs_info->transaction_kthread);
1556         btrfs_remount_cleanup(fs_info, old_ct !! 2154         btrfs_remount_cleanup(fs_info, old_opts);
1557         btrfs_clear_oneshot_options(fs_info);    2155         btrfs_clear_oneshot_options(fs_info);
1558         clear_bit(BTRFS_FS_STATE_REMOUNTING,     2156         clear_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
1559                                                  2157 
1560         return 0;                                2158         return 0;
                                                   >> 2159 
1561 restore:                                         2160 restore:
1562         btrfs_ctx_to_info(fs_info, &old_ctx); !! 2161         /* We've hit an error - don't reset SB_RDONLY */
1563         btrfs_remount_cleanup(fs_info, old_ct !! 2162         if (sb_rdonly(sb))
                                                   >> 2163                 old_flags |= SB_RDONLY;
                                                   >> 2164         if (!(old_flags & SB_RDONLY))
                                                   >> 2165                 clear_bit(BTRFS_FS_STATE_RO, &fs_info->fs_state);
                                                   >> 2166         sb->s_flags = old_flags;
                                                   >> 2167         fs_info->mount_opt = old_opts;
                                                   >> 2168         fs_info->compress_type = old_compress_type;
                                                   >> 2169         fs_info->max_inline = old_max_inline;
                                                   >> 2170         btrfs_resize_thread_pool(fs_info,
                                                   >> 2171                 old_thread_pool_size, fs_info->thread_pool_size);
                                                   >> 2172         fs_info->metadata_ratio = old_metadata_ratio;
                                                   >> 2173         btrfs_remount_cleanup(fs_info, old_opts);
1564         clear_bit(BTRFS_FS_STATE_REMOUNTING,     2174         clear_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state);
                                                   >> 2175 
1565         return ret;                              2176         return ret;
1566 }                                                2177 }
1567                                                  2178 
1568 /* Used to sort the devices by max_avail(desc    2179 /* Used to sort the devices by max_avail(descending sort) */
1569 static int btrfs_cmp_device_free_bytes(const     2180 static int btrfs_cmp_device_free_bytes(const void *a, const void *b)
1570 {                                                2181 {
1571         const struct btrfs_device_info *dev_i    2182         const struct btrfs_device_info *dev_info1 = a;
1572         const struct btrfs_device_info *dev_i    2183         const struct btrfs_device_info *dev_info2 = b;
1573                                                  2184 
1574         if (dev_info1->max_avail > dev_info2-    2185         if (dev_info1->max_avail > dev_info2->max_avail)
1575                 return -1;                       2186                 return -1;
1576         else if (dev_info1->max_avail < dev_i    2187         else if (dev_info1->max_avail < dev_info2->max_avail)
1577                 return 1;                        2188                 return 1;
1578         return 0;                                2189         return 0;
1579 }                                                2190 }
1580                                                  2191 
1581 /*                                               2192 /*
1582  * sort the devices by max_avail, in which ma    2193  * sort the devices by max_avail, in which max free extent size of each device
1583  * is stored.(Descending Sort)                   2194  * is stored.(Descending Sort)
1584  */                                              2195  */
1585 static inline void btrfs_descending_sort_devi    2196 static inline void btrfs_descending_sort_devices(
1586                                         struc    2197                                         struct btrfs_device_info *devices,
1587                                         size_    2198                                         size_t nr_devices)
1588 {                                                2199 {
1589         sort(devices, nr_devices, sizeof(stru    2200         sort(devices, nr_devices, sizeof(struct btrfs_device_info),
1590              btrfs_cmp_device_free_bytes, NUL    2201              btrfs_cmp_device_free_bytes, NULL);
1591 }                                                2202 }
1592                                                  2203 
1593 /*                                               2204 /*
1594  * The helper to calc the free space on the d    2205  * The helper to calc the free space on the devices that can be used to store
1595  * file data.                                    2206  * file data.
1596  */                                              2207  */
1597 static inline int btrfs_calc_avail_data_space    2208 static inline int btrfs_calc_avail_data_space(struct btrfs_fs_info *fs_info,
1598                                                  2209                                               u64 *free_bytes)
1599 {                                                2210 {
1600         struct btrfs_device_info *devices_inf    2211         struct btrfs_device_info *devices_info;
1601         struct btrfs_fs_devices *fs_devices =    2212         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
1602         struct btrfs_device *device;             2213         struct btrfs_device *device;
1603         u64 type;                                2214         u64 type;
1604         u64 avail_space;                         2215         u64 avail_space;
1605         u64 min_stripe_size;                     2216         u64 min_stripe_size;
1606         int num_stripes = 1;                     2217         int num_stripes = 1;
1607         int i = 0, nr_devices;                   2218         int i = 0, nr_devices;
1608         const struct btrfs_raid_attr *rattr;     2219         const struct btrfs_raid_attr *rattr;
1609                                                  2220 
1610         /*                                       2221         /*
1611          * We aren't under the device list lo    2222          * We aren't under the device list lock, so this is racy-ish, but good
1612          * enough for our purposes.              2223          * enough for our purposes.
1613          */                                      2224          */
1614         nr_devices = fs_info->fs_devices->ope    2225         nr_devices = fs_info->fs_devices->open_devices;
1615         if (!nr_devices) {                       2226         if (!nr_devices) {
1616                 smp_mb();                        2227                 smp_mb();
1617                 nr_devices = fs_info->fs_devi    2228                 nr_devices = fs_info->fs_devices->open_devices;
1618                 ASSERT(nr_devices);              2229                 ASSERT(nr_devices);
1619                 if (!nr_devices) {               2230                 if (!nr_devices) {
1620                         *free_bytes = 0;         2231                         *free_bytes = 0;
1621                         return 0;                2232                         return 0;
1622                 }                                2233                 }
1623         }                                        2234         }
1624                                                  2235 
1625         devices_info = kmalloc_array(nr_devic    2236         devices_info = kmalloc_array(nr_devices, sizeof(*devices_info),
1626                                GFP_KERNEL);      2237                                GFP_KERNEL);
1627         if (!devices_info)                       2238         if (!devices_info)
1628                 return -ENOMEM;                  2239                 return -ENOMEM;
1629                                                  2240 
1630         /* calc min stripe number for data sp    2241         /* calc min stripe number for data space allocation */
1631         type = btrfs_data_alloc_profile(fs_in    2242         type = btrfs_data_alloc_profile(fs_info);
1632         rattr = &btrfs_raid_array[btrfs_bg_fl    2243         rattr = &btrfs_raid_array[btrfs_bg_flags_to_raid_index(type)];
1633                                                  2244 
1634         if (type & BTRFS_BLOCK_GROUP_RAID0)      2245         if (type & BTRFS_BLOCK_GROUP_RAID0)
1635                 num_stripes = nr_devices;        2246                 num_stripes = nr_devices;
1636         else if (type & BTRFS_BLOCK_GROUP_RAI    2247         else if (type & BTRFS_BLOCK_GROUP_RAID1_MASK)
1637                 num_stripes = rattr->ncopies;    2248                 num_stripes = rattr->ncopies;
1638         else if (type & BTRFS_BLOCK_GROUP_RAI    2249         else if (type & BTRFS_BLOCK_GROUP_RAID10)
1639                 num_stripes = 4;                 2250                 num_stripes = 4;
1640                                                  2251 
1641         /* Adjust for more than 1 stripe per     2252         /* Adjust for more than 1 stripe per device */
1642         min_stripe_size = rattr->dev_stripes     2253         min_stripe_size = rattr->dev_stripes * BTRFS_STRIPE_LEN;
1643                                                  2254 
1644         rcu_read_lock();                         2255         rcu_read_lock();
1645         list_for_each_entry_rcu(device, &fs_d    2256         list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) {
1646                 if (!test_bit(BTRFS_DEV_STATE    2257                 if (!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
1647                                                  2258                                                 &device->dev_state) ||
1648                     !device->bdev ||             2259                     !device->bdev ||
1649                     test_bit(BTRFS_DEV_STATE_    2260                     test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state))
1650                         continue;                2261                         continue;
1651                                                  2262 
1652                 if (i >= nr_devices)             2263                 if (i >= nr_devices)
1653                         break;                   2264                         break;
1654                                                  2265 
1655                 avail_space = device->total_b    2266                 avail_space = device->total_bytes - device->bytes_used;
1656                                                  2267 
1657                 /* align with stripe_len */      2268                 /* align with stripe_len */
1658                 avail_space = rounddown(avail    2269                 avail_space = rounddown(avail_space, BTRFS_STRIPE_LEN);
1659                                                  2270 
1660                 /*                               2271                 /*
1661                  * Ensure we have at least mi    2272                  * Ensure we have at least min_stripe_size on top of the
1662                  * reserved space on the devi    2273                  * reserved space on the device.
1663                  */                              2274                  */
1664                 if (avail_space <= BTRFS_DEVI    2275                 if (avail_space <= BTRFS_DEVICE_RANGE_RESERVED + min_stripe_size)
1665                         continue;                2276                         continue;
1666                                                  2277 
1667                 avail_space -= BTRFS_DEVICE_R    2278                 avail_space -= BTRFS_DEVICE_RANGE_RESERVED;
1668                                                  2279 
1669                 devices_info[i].dev = device;    2280                 devices_info[i].dev = device;
1670                 devices_info[i].max_avail = a    2281                 devices_info[i].max_avail = avail_space;
1671                                                  2282 
1672                 i++;                             2283                 i++;
1673         }                                        2284         }
1674         rcu_read_unlock();                       2285         rcu_read_unlock();
1675                                                  2286 
1676         nr_devices = i;                          2287         nr_devices = i;
1677                                                  2288 
1678         btrfs_descending_sort_devices(devices    2289         btrfs_descending_sort_devices(devices_info, nr_devices);
1679                                                  2290 
1680         i = nr_devices - 1;                      2291         i = nr_devices - 1;
1681         avail_space = 0;                         2292         avail_space = 0;
1682         while (nr_devices >= rattr->devs_min)    2293         while (nr_devices >= rattr->devs_min) {
1683                 num_stripes = min(num_stripes    2294                 num_stripes = min(num_stripes, nr_devices);
1684                                                  2295 
1685                 if (devices_info[i].max_avail    2296                 if (devices_info[i].max_avail >= min_stripe_size) {
1686                         int j;                   2297                         int j;
1687                         u64 alloc_size;          2298                         u64 alloc_size;
1688                                                  2299 
1689                         avail_space += device    2300                         avail_space += devices_info[i].max_avail * num_stripes;
1690                         alloc_size = devices_    2301                         alloc_size = devices_info[i].max_avail;
1691                         for (j = i + 1 - num_    2302                         for (j = i + 1 - num_stripes; j <= i; j++)
1692                                 devices_info[    2303                                 devices_info[j].max_avail -= alloc_size;
1693                 }                                2304                 }
1694                 i--;                             2305                 i--;
1695                 nr_devices--;                    2306                 nr_devices--;
1696         }                                        2307         }
1697                                                  2308 
1698         kfree(devices_info);                     2309         kfree(devices_info);
1699         *free_bytes = avail_space;               2310         *free_bytes = avail_space;
1700         return 0;                                2311         return 0;
1701 }                                                2312 }
1702                                                  2313 
1703 /*                                               2314 /*
1704  * Calculate numbers for 'df', pessimistic in    2315  * Calculate numbers for 'df', pessimistic in case of mixed raid profiles.
1705  *                                               2316  *
1706  * If there's a redundant raid level at DATA     2317  * If there's a redundant raid level at DATA block groups, use the respective
1707  * multiplier to scale the sizes.                2318  * multiplier to scale the sizes.
1708  *                                               2319  *
1709  * Unused device space usage is based on simu    2320  * Unused device space usage is based on simulating the chunk allocator
1710  * algorithm that respects the device sizes a    2321  * algorithm that respects the device sizes and order of allocations.  This is
1711  * a close approximation of the actual use bu    2322  * a close approximation of the actual use but there are other factors that may
1712  * change the result (like a new metadata chu    2323  * change the result (like a new metadata chunk).
1713  *                                               2324  *
1714  * If metadata is exhausted, f_bavail will be    2325  * If metadata is exhausted, f_bavail will be 0.
1715  */                                              2326  */
1716 static int btrfs_statfs(struct dentry *dentry    2327 static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)
1717 {                                                2328 {
1718         struct btrfs_fs_info *fs_info = btrfs    2329         struct btrfs_fs_info *fs_info = btrfs_sb(dentry->d_sb);
1719         struct btrfs_super_block *disk_super     2330         struct btrfs_super_block *disk_super = fs_info->super_copy;
1720         struct btrfs_space_info *found;          2331         struct btrfs_space_info *found;
1721         u64 total_used = 0;                      2332         u64 total_used = 0;
1722         u64 total_free_data = 0;                 2333         u64 total_free_data = 0;
1723         u64 total_free_meta = 0;                 2334         u64 total_free_meta = 0;
1724         u32 bits = fs_info->sectorsize_bits;     2335         u32 bits = fs_info->sectorsize_bits;
1725         __be32 *fsid = (__be32 *)fs_info->fs_    2336         __be32 *fsid = (__be32 *)fs_info->fs_devices->fsid;
1726         unsigned factor = 1;                     2337         unsigned factor = 1;
1727         struct btrfs_block_rsv *block_rsv = &    2338         struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
1728         int ret;                                 2339         int ret;
1729         u64 thresh = 0;                          2340         u64 thresh = 0;
1730         int mixed = 0;                           2341         int mixed = 0;
1731                                                  2342 
1732         list_for_each_entry(found, &fs_info->    2343         list_for_each_entry(found, &fs_info->space_info, list) {
1733                 if (found->flags & BTRFS_BLOC    2344                 if (found->flags & BTRFS_BLOCK_GROUP_DATA) {
1734                         int i;                   2345                         int i;
1735                                                  2346 
1736                         total_free_data += fo    2347                         total_free_data += found->disk_total - found->disk_used;
1737                         total_free_data -=       2348                         total_free_data -=
1738                                 btrfs_account    2349                                 btrfs_account_ro_block_groups_free_space(found);
1739                                                  2350 
1740                         for (i = 0; i < BTRFS    2351                         for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
1741                                 if (!list_emp    2352                                 if (!list_empty(&found->block_groups[i]))
1742                                         facto    2353                                         factor = btrfs_bg_type_to_factor(
1743                                                  2354                                                 btrfs_raid_array[i].bg_flag);
1744                         }                        2355                         }
1745                 }                                2356                 }
1746                                                  2357 
1747                 /*                               2358                 /*
1748                  * Metadata in mixed block gr !! 2359                  * Metadata in mixed block goup profiles are accounted in data
1749                  */                              2360                  */
1750                 if (!mixed && found->flags &     2361                 if (!mixed && found->flags & BTRFS_BLOCK_GROUP_METADATA) {
1751                         if (found->flags & BT    2362                         if (found->flags & BTRFS_BLOCK_GROUP_DATA)
1752                                 mixed = 1;       2363                                 mixed = 1;
1753                         else                     2364                         else
1754                                 total_free_me    2365                                 total_free_meta += found->disk_total -
1755                                         found    2366                                         found->disk_used;
1756                 }                                2367                 }
1757                                                  2368 
1758                 total_used += found->disk_use    2369                 total_used += found->disk_used;
1759         }                                        2370         }
1760                                                  2371 
1761         buf->f_blocks = div_u64(btrfs_super_t    2372         buf->f_blocks = div_u64(btrfs_super_total_bytes(disk_super), factor);
1762         buf->f_blocks >>= bits;                  2373         buf->f_blocks >>= bits;
1763         buf->f_bfree = buf->f_blocks - (div_u    2374         buf->f_bfree = buf->f_blocks - (div_u64(total_used, factor) >> bits);
1764                                                  2375 
1765         /* Account global block reserve as us    2376         /* Account global block reserve as used, it's in logical size already */
1766         spin_lock(&block_rsv->lock);             2377         spin_lock(&block_rsv->lock);
1767         /* Mixed block groups accounting is n    2378         /* Mixed block groups accounting is not byte-accurate, avoid overflow */
1768         if (buf->f_bfree >= block_rsv->size >    2379         if (buf->f_bfree >= block_rsv->size >> bits)
1769                 buf->f_bfree -= block_rsv->si    2380                 buf->f_bfree -= block_rsv->size >> bits;
1770         else                                     2381         else
1771                 buf->f_bfree = 0;                2382                 buf->f_bfree = 0;
1772         spin_unlock(&block_rsv->lock);           2383         spin_unlock(&block_rsv->lock);
1773                                                  2384 
1774         buf->f_bavail = div_u64(total_free_da    2385         buf->f_bavail = div_u64(total_free_data, factor);
1775         ret = btrfs_calc_avail_data_space(fs_    2386         ret = btrfs_calc_avail_data_space(fs_info, &total_free_data);
1776         if (ret)                                 2387         if (ret)
1777                 return ret;                      2388                 return ret;
1778         buf->f_bavail += div_u64(total_free_d    2389         buf->f_bavail += div_u64(total_free_data, factor);
1779         buf->f_bavail = buf->f_bavail >> bits    2390         buf->f_bavail = buf->f_bavail >> bits;
1780                                                  2391 
1781         /*                                       2392         /*
1782          * We calculate the remaining metadat    2393          * We calculate the remaining metadata space minus global reserve. If
1783          * this is (supposedly) smaller than     2394          * this is (supposedly) smaller than zero, there's no space. But this
1784          * does not hold in practice, the exh    2395          * does not hold in practice, the exhausted state happens where's still
1785          * some positive delta. So we apply s    2396          * some positive delta. So we apply some guesswork and compare the
1786          * delta to a 4M threshold.  (Practic    2397          * delta to a 4M threshold.  (Practically observed delta was ~2M.)
1787          *                                       2398          *
1788          * We probably cannot calculate the e    2399          * We probably cannot calculate the exact threshold value because this
1789          * depends on the internal reservatio    2400          * depends on the internal reservations requested by various
1790          * operations, so some operations tha    2401          * operations, so some operations that consume a few metadata will
1791          * succeed even if the Avail is zero.    2402          * succeed even if the Avail is zero. But this is better than the other
1792          * way around.                           2403          * way around.
1793          */                                      2404          */
1794         thresh = SZ_4M;                          2405         thresh = SZ_4M;
1795                                                  2406 
1796         /*                                       2407         /*
1797          * We only want to claim there's no a    2408          * We only want to claim there's no available space if we can no longer
1798          * allocate chunks for our metadata p    2409          * allocate chunks for our metadata profile and our global reserve will
1799          * not fit in the free metadata space    2410          * not fit in the free metadata space.  If we aren't ->full then we
1800          * still can allocate chunks and thus    2411          * still can allocate chunks and thus are fine using the currently
1801          * calculated f_bavail.                  2412          * calculated f_bavail.
1802          */                                      2413          */
1803         if (!mixed && block_rsv->space_info->    2414         if (!mixed && block_rsv->space_info->full &&
1804             (total_free_meta < thresh || tota !! 2415             total_free_meta - thresh < block_rsv->size)
1805                 buf->f_bavail = 0;               2416                 buf->f_bavail = 0;
1806                                                  2417 
1807         buf->f_type = BTRFS_SUPER_MAGIC;         2418         buf->f_type = BTRFS_SUPER_MAGIC;
1808         buf->f_bsize = fs_info->sectorsize;   !! 2419         buf->f_bsize = dentry->d_sb->s_blocksize;
1809         buf->f_namelen = BTRFS_NAME_LEN;         2420         buf->f_namelen = BTRFS_NAME_LEN;
1810                                                  2421 
1811         /* We treat it as constant endianness    2422         /* We treat it as constant endianness (it doesn't matter _which_)
1812            because we want the fsid to come o    2423            because we want the fsid to come out the same whether mounted
1813            on a big-endian or little-endian h    2424            on a big-endian or little-endian host */
1814         buf->f_fsid.val[0] = be32_to_cpu(fsid    2425         buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
1815         buf->f_fsid.val[1] = be32_to_cpu(fsid    2426         buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
1816         /* Mask in the root object ID too, to    2427         /* Mask in the root object ID too, to disambiguate subvols */
1817         buf->f_fsid.val[0] ^= btrfs_root_id(B !! 2428         buf->f_fsid.val[0] ^=
1818         buf->f_fsid.val[1] ^= btrfs_root_id(B !! 2429                 BTRFS_I(d_inode(dentry))->root->root_key.objectid >> 32;
                                                   >> 2430         buf->f_fsid.val[1] ^=
                                                   >> 2431                 BTRFS_I(d_inode(dentry))->root->root_key.objectid;
1819                                                  2432 
1820         return 0;                                2433         return 0;
1821 }                                                2434 }
1822                                                  2435 
1823 static int btrfs_fc_test_super(struct super_b << 
1824 {                                             << 
1825         struct btrfs_fs_info *p = fc->s_fs_in << 
1826         struct btrfs_fs_info *fs_info = btrfs << 
1827                                               << 
1828         return fs_info->fs_devices == p->fs_d << 
1829 }                                             << 
1830                                               << 
1831 static int btrfs_get_tree_super(struct fs_con << 
1832 {                                             << 
1833         struct btrfs_fs_info *fs_info = fc->s << 
1834         struct btrfs_fs_context *ctx = fc->fs << 
1835         struct btrfs_fs_devices *fs_devices = << 
1836         struct block_device *bdev;            << 
1837         struct btrfs_device *device;          << 
1838         struct super_block *sb;               << 
1839         blk_mode_t mode = btrfs_open_mode(fc) << 
1840         int ret;                              << 
1841                                               << 
1842         btrfs_ctx_to_info(fs_info, ctx);      << 
1843         mutex_lock(&uuid_mutex);              << 
1844                                               << 
1845         /*                                    << 
1846          * With 'true' passed to btrfs_scan_o << 
1847          * either a valid device or an error. << 
1848          */                                   << 
1849         device = btrfs_scan_one_device(fc->so << 
1850         ASSERT(device != NULL);               << 
1851         if (IS_ERR(device)) {                 << 
1852                 mutex_unlock(&uuid_mutex);    << 
1853                 return PTR_ERR(device);       << 
1854         }                                     << 
1855                                               << 
1856         fs_devices = device->fs_devices;      << 
1857         fs_info->fs_devices = fs_devices;     << 
1858                                               << 
1859         ret = btrfs_open_devices(fs_devices,  << 
1860         mutex_unlock(&uuid_mutex);            << 
1861         if (ret)                              << 
1862                 return ret;                   << 
1863                                               << 
1864         if (!(fc->sb_flags & SB_RDONLY) && fs << 
1865                 ret = -EACCES;                << 
1866                 goto error;                   << 
1867         }                                     << 
1868                                               << 
1869         bdev = fs_devices->latest_dev->bdev;  << 
1870                                               << 
1871         /*                                    << 
1872          * From now on the error handling is  << 
1873          *                                    << 
1874          * If successful, this will transfer  << 
1875          * and fc->s_fs_info will be NULL.  H << 
1876          * super, we'll still have fc->s_fs_i << 
1877          * completely out it'll be cleaned up << 
1878          * otherwise it's tied to the lifetim << 
1879          */                                   << 
1880         sb = sget_fc(fc, btrfs_fc_test_super, << 
1881         if (IS_ERR(sb)) {                     << 
1882                 ret = PTR_ERR(sb);            << 
1883                 goto error;                   << 
1884         }                                     << 
1885                                               << 
1886         set_device_specific_options(fs_info); << 
1887                                               << 
1888         if (sb->s_root) {                     << 
1889                 btrfs_close_devices(fs_device << 
1890                 if ((fc->sb_flags ^ sb->s_fla << 
1891                         ret = -EBUSY;         << 
1892         } else {                              << 
1893                 snprintf(sb->s_id, sizeof(sb- << 
1894                 shrinker_debugfs_rename(sb->s << 
1895                 btrfs_sb(sb)->bdev_holder = & << 
1896                 ret = btrfs_fill_super(sb, fs << 
1897         }                                     << 
1898                                               << 
1899         if (ret) {                            << 
1900                 deactivate_locked_super(sb);  << 
1901                 return ret;                   << 
1902         }                                     << 
1903                                               << 
1904         btrfs_clear_oneshot_options(fs_info); << 
1905                                               << 
1906         fc->root = dget(sb->s_root);          << 
1907         return 0;                             << 
1908                                               << 
1909 error:                                        << 
1910         btrfs_close_devices(fs_devices);      << 
1911         return ret;                           << 
1912 }                                             << 
1913                                               << 
1914 /*                                            << 
1915  * Ever since commit 0723a0473fb4 ("btrfs: al << 
1916  * with different ro/rw options") the followi << 
1917  *                                            << 
1918  *        (i) mount /dev/sda3 -o subvol=foo,r << 
1919  *       (ii) mount /dev/sda3 -o subvol=bar,r << 
1920  *                                            << 
1921  * which looks nice and innocent but is actua << 
1922  * a long comment.                            << 
1923  *                                            << 
1924  * On another filesystem a subvolume mount is << 
1925  *                                            << 
1926  *      (iii) # create rw superblock + initia << 
1927  *            mount -t xfs /dev/sdb /opt/     << 
1928  *                                            << 
1929  *            # create ro bind mount          << 
1930  *            mount --bind -o ro /opt/foo /mn << 
1931  *                                            << 
1932  *            # unmount initial mount         << 
1933  *            umount /opt                     << 
1934  *                                            << 
1935  * Of course, there's some special subvolume  << 
1936  * sb->s_root dentry is really swapped after  << 
1937  * it's very close and will help us understan << 
1938  *                                            << 
1939  * The old mount API didn't cleanly distingui << 
1940  * and a superblock being made ro.  The only  << 
1941  * either object was by passing ms_rdonly. If << 
1942  * mount(2) such as:                          << 
1943  *                                            << 
1944  *      mount("/dev/sdb", "/mnt", "xfs", ms_r << 
1945  *                                            << 
1946  * the MS_RDONLY flag being specified had two << 
1947  *                                            << 
1948  * (1) MNT_READONLY was raised -> the resulti << 
1949  *     @mnt->mnt_flags |= MNT_READONLY raised << 
1950  *                                            << 
1951  * (2) MS_RDONLY was passed to the filesystem << 
1952  *     made the superblock ro. Note, how SB_R << 
1953  *     ms_rdonly and is raised whenever MS_RD << 
1954  *                                            << 
1955  * Creating a subtree mount via (iii) ends up << 
1956  * subtree mounted ro.                        << 
1957  *                                            << 
1958  * But consider the effect on the old mount A << 
1959  * which combines the distinct step in (iii)  << 
1960  *                                            << 
1961  * By issuing (i) both the mount and the supe << 
1962  * is issued the superblock is ro and thus ev << 
1963  * rw it wouldn't help. Hence, btrfs needed t << 
1964  * to rw for (ii) which it did using an inter << 
1965  *                                            << 
1966  * IOW, subvolume mounting was inherently com << 
1967  * MS_RDONLY in mount(2). Note, this ambiguit << 
1968  * "ro" to MS_RDONLY. IOW, in both (i) and (i << 
1969  * passed by mount(8) to mount(2).            << 
1970  *                                            << 
1971  * Enter the new mount API. The new mount API << 
1972  * and making a superblock ro.                << 
1973  *                                            << 
1974  * (3) To turn a mount ro the MOUNT_ATTR_ONLY << 
1975  *     fsmount() or mount_setattr() this is a << 
1976  *     specific mount or mount tree that is n << 
1977  *                                            << 
1978  * (4) To turn a superblock ro the "ro" flag  << 
1979  *     fsconfig(FSCONFIG_SET_FLAG, "ro"). Thi << 
1980  *     in fc->sb_flags.                       << 
1981  *                                            << 
1982  * But, currently the util-linux mount comman << 
1983  * API and is still setting fsconfig(FSCONFIG << 
1984  * btrfs or not, setting the whole super bloc << 
1985  * work with different options work we need t << 
1986  */                                           << 
1987 static struct vfsmount *btrfs_reconfigure_for << 
1988 {                                             << 
1989         struct vfsmount *mnt;                 << 
1990         int ret;                              << 
1991         const bool ro2rw = !(fc->sb_flags & S << 
1992                                               << 
1993         /*                                    << 
1994          * We got an EBUSY because our SB_RDO << 
1995          * super block, so invert our setting << 
1996          * can get our vfsmount.              << 
1997          */                                   << 
1998         if (ro2rw)                            << 
1999                 fc->sb_flags |= SB_RDONLY;    << 
2000         else                                  << 
2001                 fc->sb_flags &= ~SB_RDONLY;   << 
2002                                               << 
2003         mnt = fc_mount(fc);                   << 
2004         if (IS_ERR(mnt))                      << 
2005                 return mnt;                   << 
2006                                               << 
2007         if (!ro2rw)                           << 
2008                 return mnt;                   << 
2009                                               << 
2010         /* We need to convert to rw, call rec << 
2011         fc->sb_flags &= ~SB_RDONLY;           << 
2012         down_write(&mnt->mnt_sb->s_umount);   << 
2013         ret = btrfs_reconfigure(fc);          << 
2014         up_write(&mnt->mnt_sb->s_umount);     << 
2015         if (ret) {                            << 
2016                 mntput(mnt);                  << 
2017                 return ERR_PTR(ret);          << 
2018         }                                     << 
2019         return mnt;                           << 
2020 }                                             << 
2021                                               << 
2022 static int btrfs_get_tree_subvol(struct fs_co << 
2023 {                                             << 
2024         struct btrfs_fs_info *fs_info = NULL; << 
2025         struct btrfs_fs_context *ctx = fc->fs << 
2026         struct fs_context *dup_fc;            << 
2027         struct dentry *dentry;                << 
2028         struct vfsmount *mnt;                 << 
2029                                               << 
2030         /*                                    << 
2031          * Setup a dummy root and fs_info for << 
2032          * we don't actually fill this stuff  << 
2033          * then open_ctree will properly init << 
2034          * settings later.  btrfs_init_fs_inf << 
2035          * of the fs_info (locks and such) to << 
2036          * superblock with our given fs_devic << 
2037          */                                   << 
2038         fs_info = kvzalloc(sizeof(struct btrf << 
2039         if (!fs_info)                         << 
2040                 return -ENOMEM;               << 
2041                                               << 
2042         fs_info->super_copy = kzalloc(BTRFS_S << 
2043         fs_info->super_for_commit = kzalloc(B << 
2044         if (!fs_info->super_copy || !fs_info- << 
2045                 btrfs_free_fs_info(fs_info);  << 
2046                 return -ENOMEM;               << 
2047         }                                     << 
2048         btrfs_init_fs_info(fs_info);          << 
2049                                               << 
2050         dup_fc = vfs_dup_fs_context(fc);      << 
2051         if (IS_ERR(dup_fc)) {                 << 
2052                 btrfs_free_fs_info(fs_info);  << 
2053                 return PTR_ERR(dup_fc);       << 
2054         }                                     << 
2055                                               << 
2056         /*                                    << 
2057          * When we do the sget_fc this gets t << 
2058          * need to set it on the dup_fc as th << 
2059          */                                   << 
2060         dup_fc->s_fs_info = fs_info;          << 
2061                                               << 
2062         /*                                    << 
2063          * We'll do the security settings in  << 
2064          * loop, they were duplicated into du << 
2065          * here.                              << 
2066          */                                   << 
2067         security_free_mnt_opts(&fc->security) << 
2068         fc->security = NULL;                  << 
2069                                               << 
2070         mnt = fc_mount(dup_fc);               << 
2071         if (PTR_ERR_OR_ZERO(mnt) == -EBUSY)   << 
2072                 mnt = btrfs_reconfigure_for_m << 
2073         put_fs_context(dup_fc);               << 
2074         if (IS_ERR(mnt))                      << 
2075                 return PTR_ERR(mnt);          << 
2076                                               << 
2077         /*                                    << 
2078          * This free's ->subvol_name, because << 
2079          * allocate a buffer to hold the subv << 
2080          * reference to it here.              << 
2081          */                                   << 
2082         dentry = mount_subvol(ctx->subvol_nam << 
2083         ctx->subvol_name = NULL;              << 
2084         if (IS_ERR(dentry))                   << 
2085                 return PTR_ERR(dentry);       << 
2086                                               << 
2087         fc->root = dentry;                    << 
2088         return 0;                             << 
2089 }                                             << 
2090                                               << 
2091 static int btrfs_get_tree(struct fs_context * << 
2092 {                                             << 
2093         /*                                    << 
2094          * Since we use mount_subtree to moun << 
2095          * have to do mounts in two steps.    << 
2096          *                                    << 
2097          * First pass through we call btrfs_g << 
2098          * wrapper around fc_mount() to call  << 
2099          * we'll call btrfs_get_tree_super(). << 
2100          * everything to open the devices and << 
2101          * with a fully constructed vfsmount  << 
2102          * from there we can do our mount_sub << 
2103          * whichever subvol we're mounting an << 
2104          * appropriate dentry for the subvol. << 
2105          */                                   << 
2106         if (fc->s_fs_info)                    << 
2107                 return btrfs_get_tree_super(f << 
2108         return btrfs_get_tree_subvol(fc);     << 
2109 }                                             << 
2110                                               << 
2111 static void btrfs_kill_super(struct super_blo    2436 static void btrfs_kill_super(struct super_block *sb)
2112 {                                                2437 {
2113         struct btrfs_fs_info *fs_info = btrfs    2438         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
2114         kill_anon_super(sb);                     2439         kill_anon_super(sb);
2115         btrfs_free_fs_info(fs_info);             2440         btrfs_free_fs_info(fs_info);
2116 }                                                2441 }
2117                                                  2442 
2118 static void btrfs_free_fs_context(struct fs_c !! 2443 static struct file_system_type btrfs_fs_type = {
2119 {                                             !! 2444         .owner          = THIS_MODULE,
2120         struct btrfs_fs_context *ctx = fc->fs !! 2445         .name           = "btrfs",
2121         struct btrfs_fs_info *fs_info = fc->s !! 2446         .mount          = btrfs_mount,
2122                                               !! 2447         .kill_sb        = btrfs_kill_super,
2123         if (fs_info)                          !! 2448         .fs_flags       = FS_REQUIRES_DEV | FS_BINARY_MOUNTDATA,
2124                 btrfs_free_fs_info(fs_info);  << 
2125                                               << 
2126         if (ctx && refcount_dec_and_test(&ctx << 
2127                 kfree(ctx->subvol_name);      << 
2128                 kfree(ctx);                   << 
2129         }                                     << 
2130 }                                             << 
2131                                               << 
2132 static int btrfs_dup_fs_context(struct fs_con << 
2133 {                                             << 
2134         struct btrfs_fs_context *ctx = src_fc << 
2135                                               << 
2136         /*                                    << 
2137          * Give a ref to our ctx to this dup, << 
2138          * our original fc so we can have the << 
2139          *                                    << 
2140          * We unset ->source in the original  << 
2141          * mounting, and then once we free th << 
2142          * need to make sure we're only point << 
2143          */                                   << 
2144         refcount_inc(&ctx->refs);             << 
2145         fc->fs_private = ctx;                 << 
2146         fc->source = src_fc->source;          << 
2147         src_fc->source = NULL;                << 
2148         return 0;                             << 
2149 }                                             << 
2150                                               << 
2151 static const struct fs_context_operations btr << 
2152         .parse_param    = btrfs_parse_param,  << 
2153         .reconfigure    = btrfs_reconfigure,  << 
2154         .get_tree       = btrfs_get_tree,     << 
2155         .dup            = btrfs_dup_fs_contex << 
2156         .free           = btrfs_free_fs_conte << 
2157 };                                               2449 };
2158                                                  2450 
2159 static int btrfs_init_fs_context(struct fs_co !! 2451 static struct file_system_type btrfs_root_fs_type = {
2160 {                                             !! 2452         .owner          = THIS_MODULE,
2161         struct btrfs_fs_context *ctx;         !! 2453         .name           = "btrfs",
2162                                               !! 2454         .mount          = btrfs_mount_root,
2163         ctx = kzalloc(sizeof(struct btrfs_fs_ !! 2455         .kill_sb        = btrfs_kill_super,
2164         if (!ctx)                             !! 2456         .fs_flags       = FS_REQUIRES_DEV | FS_BINARY_MOUNTDATA | FS_ALLOW_IDMAP,
2165                 return -ENOMEM;               !! 2457 };
2166                                               << 
2167         refcount_set(&ctx->refs, 1);          << 
2168         fc->fs_private = ctx;                 << 
2169         fc->ops = &btrfs_fs_context_ops;      << 
2170                                               << 
2171         if (fc->purpose == FS_CONTEXT_FOR_REC << 
2172                 btrfs_info_to_ctx(btrfs_sb(fc << 
2173         } else {                              << 
2174                 ctx->thread_pool_size =       << 
2175                         min_t(unsigned long,  << 
2176                 ctx->max_inline = BTRFS_DEFAU << 
2177                 ctx->commit_interval = BTRFS_ << 
2178         }                                     << 
2179                                               << 
2180 #ifdef CONFIG_BTRFS_FS_POSIX_ACL              << 
2181         fc->sb_flags |= SB_POSIXACL;          << 
2182 #endif                                        << 
2183         fc->sb_flags |= SB_I_VERSION;         << 
2184                                               << 
2185         return 0;                             << 
2186 }                                             << 
2187                                               << 
2188 static struct file_system_type btrfs_fs_type  << 
2189         .owner                  = THIS_MODULE << 
2190         .name                   = "btrfs",    << 
2191         .init_fs_context        = btrfs_init_ << 
2192         .parameters             = btrfs_fs_pa << 
2193         .kill_sb                = btrfs_kill_ << 
2194         .fs_flags               = FS_REQUIRES << 
2195  };                                           << 
2196                                                  2458 
2197 MODULE_ALIAS_FS("btrfs");                        2459 MODULE_ALIAS_FS("btrfs");
2198                                                  2460 
2199 static int btrfs_control_open(struct inode *i    2461 static int btrfs_control_open(struct inode *inode, struct file *file)
2200 {                                                2462 {
2201         /*                                       2463         /*
2202          * The control file's private_data is    2464          * The control file's private_data is used to hold the
2203          * transaction when it is started and    2465          * transaction when it is started and is used to keep
2204          * track of whether a transaction is     2466          * track of whether a transaction is already in progress.
2205          */                                      2467          */
2206         file->private_data = NULL;               2468         file->private_data = NULL;
2207         return 0;                                2469         return 0;
2208 }                                                2470 }
2209                                                  2471 
2210 /*                                               2472 /*
2211  * Used by /dev/btrfs-control for devices ioc    2473  * Used by /dev/btrfs-control for devices ioctls.
2212  */                                              2474  */
2213 static long btrfs_control_ioctl(struct file *    2475 static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
2214                                 unsigned long    2476                                 unsigned long arg)
2215 {                                                2477 {
2216         struct btrfs_ioctl_vol_args *vol;        2478         struct btrfs_ioctl_vol_args *vol;
2217         struct btrfs_device *device = NULL;      2479         struct btrfs_device *device = NULL;
2218         dev_t devt = 0;                          2480         dev_t devt = 0;
2219         int ret = -ENOTTY;                       2481         int ret = -ENOTTY;
2220                                                  2482 
2221         if (!capable(CAP_SYS_ADMIN))             2483         if (!capable(CAP_SYS_ADMIN))
2222                 return -EPERM;                   2484                 return -EPERM;
2223                                                  2485 
2224         vol = memdup_user((void __user *)arg,    2486         vol = memdup_user((void __user *)arg, sizeof(*vol));
2225         if (IS_ERR(vol))                         2487         if (IS_ERR(vol))
2226                 return PTR_ERR(vol);             2488                 return PTR_ERR(vol);
2227         ret = btrfs_check_ioctl_vol_args_path !! 2489         vol->name[BTRFS_PATH_NAME_MAX] = '\0';
2228         if (ret < 0)                          << 
2229                 goto out;                     << 
2230                                                  2490 
2231         switch (cmd) {                           2491         switch (cmd) {
2232         case BTRFS_IOC_SCAN_DEV:                 2492         case BTRFS_IOC_SCAN_DEV:
2233                 mutex_lock(&uuid_mutex);         2493                 mutex_lock(&uuid_mutex);
2234                 /*                            !! 2494                 device = btrfs_scan_one_device(vol->name, FMODE_READ,
2235                  * Scanning outside of mount  !! 2495                                                &btrfs_root_fs_type);
2236                  * into 0 error code.         << 
2237                  */                           << 
2238                 device = btrfs_scan_one_devic << 
2239                 ret = PTR_ERR_OR_ZERO(device)    2496                 ret = PTR_ERR_OR_ZERO(device);
2240                 mutex_unlock(&uuid_mutex);       2497                 mutex_unlock(&uuid_mutex);
2241                 break;                           2498                 break;
2242         case BTRFS_IOC_FORGET_DEV:               2499         case BTRFS_IOC_FORGET_DEV:
2243                 if (vol->name[0] != 0) {         2500                 if (vol->name[0] != 0) {
2244                         ret = lookup_bdev(vol    2501                         ret = lookup_bdev(vol->name, &devt);
2245                         if (ret)                 2502                         if (ret)
2246                                 break;           2503                                 break;
2247                 }                                2504                 }
2248                 ret = btrfs_forget_devices(de    2505                 ret = btrfs_forget_devices(devt);
2249                 break;                           2506                 break;
2250         case BTRFS_IOC_DEVICES_READY:            2507         case BTRFS_IOC_DEVICES_READY:
2251                 mutex_lock(&uuid_mutex);         2508                 mutex_lock(&uuid_mutex);
2252                 /*                            !! 2509                 device = btrfs_scan_one_device(vol->name, FMODE_READ,
2253                  * Scanning outside of mount  !! 2510                                                &btrfs_root_fs_type);
2254                  * into 0 error code.         !! 2511                 if (IS_ERR(device)) {
2255                  */                           << 
2256                 device = btrfs_scan_one_devic << 
2257                 if (IS_ERR_OR_NULL(device)) { << 
2258                         mutex_unlock(&uuid_mu    2512                         mutex_unlock(&uuid_mutex);
2259                         ret = PTR_ERR(device)    2513                         ret = PTR_ERR(device);
2260                         break;                   2514                         break;
2261                 }                                2515                 }
2262                 ret = !(device->fs_devices->n    2516                 ret = !(device->fs_devices->num_devices ==
2263                         device->fs_devices->t    2517                         device->fs_devices->total_devices);
2264                 mutex_unlock(&uuid_mutex);       2518                 mutex_unlock(&uuid_mutex);
2265                 break;                           2519                 break;
2266         case BTRFS_IOC_GET_SUPPORTED_FEATURES    2520         case BTRFS_IOC_GET_SUPPORTED_FEATURES:
2267                 ret = btrfs_ioctl_get_support    2521                 ret = btrfs_ioctl_get_supported_features((void __user*)arg);
2268                 break;                           2522                 break;
2269         }                                        2523         }
2270                                                  2524 
2271 out:                                          << 
2272         kfree(vol);                              2525         kfree(vol);
2273         return ret;                              2526         return ret;
2274 }                                                2527 }
2275                                                  2528 
2276 static int btrfs_freeze(struct super_block *s    2529 static int btrfs_freeze(struct super_block *sb)
2277 {                                                2530 {
                                                   >> 2531         struct btrfs_trans_handle *trans;
2278         struct btrfs_fs_info *fs_info = btrfs    2532         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
                                                   >> 2533         struct btrfs_root *root = fs_info->tree_root;
2279                                                  2534 
2280         set_bit(BTRFS_FS_FROZEN, &fs_info->fl    2535         set_bit(BTRFS_FS_FROZEN, &fs_info->flags);
2281         /*                                       2536         /*
2282          * We don't need a barrier here, we'l    2537          * We don't need a barrier here, we'll wait for any transaction that
2283          * could be in progress on other thre    2538          * could be in progress on other threads (and do delayed iputs that
2284          * we want to avoid on a frozen files    2539          * we want to avoid on a frozen filesystem), or do the commit
2285          * ourselves.                            2540          * ourselves.
2286          */                                      2541          */
2287         return btrfs_commit_current_transacti !! 2542         trans = btrfs_attach_transaction_barrier(root);
                                                   >> 2543         if (IS_ERR(trans)) {
                                                   >> 2544                 /* no transaction, don't bother */
                                                   >> 2545                 if (PTR_ERR(trans) == -ENOENT)
                                                   >> 2546                         return 0;
                                                   >> 2547                 return PTR_ERR(trans);
                                                   >> 2548         }
                                                   >> 2549         return btrfs_commit_transaction(trans);
2288 }                                                2550 }
2289                                                  2551 
2290 static int check_dev_super(struct btrfs_devic    2552 static int check_dev_super(struct btrfs_device *dev)
2291 {                                                2553 {
2292         struct btrfs_fs_info *fs_info = dev->    2554         struct btrfs_fs_info *fs_info = dev->fs_info;
2293         struct btrfs_super_block *sb;            2555         struct btrfs_super_block *sb;
2294         u64 last_trans;                       << 
2295         u16 csum_type;                           2556         u16 csum_type;
2296         int ret = 0;                             2557         int ret = 0;
2297                                                  2558 
2298         /* This should be called with fs stil    2559         /* This should be called with fs still frozen. */
2299         ASSERT(test_bit(BTRFS_FS_FROZEN, &fs_    2560         ASSERT(test_bit(BTRFS_FS_FROZEN, &fs_info->flags));
2300                                                  2561 
2301         /* Missing dev, no need to check. */     2562         /* Missing dev, no need to check. */
2302         if (!dev->bdev)                          2563         if (!dev->bdev)
2303                 return 0;                        2564                 return 0;
2304                                                  2565 
2305         /* Only need to check the primary sup    2566         /* Only need to check the primary super block. */
2306         sb = btrfs_read_dev_one_super(dev->bd    2567         sb = btrfs_read_dev_one_super(dev->bdev, 0, true);
2307         if (IS_ERR(sb))                          2568         if (IS_ERR(sb))
2308                 return PTR_ERR(sb);              2569                 return PTR_ERR(sb);
2309                                                  2570 
2310         /* Verify the checksum. */               2571         /* Verify the checksum. */
2311         csum_type = btrfs_super_csum_type(sb)    2572         csum_type = btrfs_super_csum_type(sb);
2312         if (csum_type != btrfs_super_csum_typ    2573         if (csum_type != btrfs_super_csum_type(fs_info->super_copy)) {
2313                 btrfs_err(fs_info, "csum type    2574                 btrfs_err(fs_info, "csum type changed, has %u expect %u",
2314                           csum_type, btrfs_su    2575                           csum_type, btrfs_super_csum_type(fs_info->super_copy));
2315                 ret = -EUCLEAN;                  2576                 ret = -EUCLEAN;
2316                 goto out;                        2577                 goto out;
2317         }                                        2578         }
2318                                                  2579 
2319         if (btrfs_check_super_csum(fs_info, s    2580         if (btrfs_check_super_csum(fs_info, sb)) {
2320                 btrfs_err(fs_info, "csum for     2581                 btrfs_err(fs_info, "csum for on-disk super block no longer matches");
2321                 ret = -EUCLEAN;                  2582                 ret = -EUCLEAN;
2322                 goto out;                        2583                 goto out;
2323         }                                        2584         }
2324                                                  2585 
2325         /* Btrfs_validate_super() includes fs    2586         /* Btrfs_validate_super() includes fsid check against super->fsid. */
2326         ret = btrfs_validate_super(fs_info, s    2587         ret = btrfs_validate_super(fs_info, sb, 0);
2327         if (ret < 0)                             2588         if (ret < 0)
2328                 goto out;                        2589                 goto out;
2329                                                  2590 
2330         last_trans = btrfs_get_last_trans_com !! 2591         if (btrfs_super_generation(sb) != fs_info->last_trans_committed) {
2331         if (btrfs_super_generation(sb) != las << 
2332                 btrfs_err(fs_info, "transid m    2592                 btrfs_err(fs_info, "transid mismatch, has %llu expect %llu",
2333                           btrfs_super_generat !! 2593                         btrfs_super_generation(sb),
                                                   >> 2594                         fs_info->last_trans_committed);
2334                 ret = -EUCLEAN;                  2595                 ret = -EUCLEAN;
2335                 goto out;                        2596                 goto out;
2336         }                                        2597         }
2337 out:                                             2598 out:
2338         btrfs_release_disk_super(sb);            2599         btrfs_release_disk_super(sb);
2339         return ret;                              2600         return ret;
2340 }                                                2601 }
2341                                                  2602 
2342 static int btrfs_unfreeze(struct super_block     2603 static int btrfs_unfreeze(struct super_block *sb)
2343 {                                                2604 {
2344         struct btrfs_fs_info *fs_info = btrfs    2605         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
2345         struct btrfs_device *device;             2606         struct btrfs_device *device;
2346         int ret = 0;                             2607         int ret = 0;
2347                                                  2608 
2348         /*                                       2609         /*
2349          * Make sure the fs is not changed by    2610          * Make sure the fs is not changed by accident (like hibernation then
2350          * modified by other OS).                2611          * modified by other OS).
2351          * If we found anything wrong, we mar    2612          * If we found anything wrong, we mark the fs error immediately.
2352          *                                       2613          *
2353          * And since the fs is frozen, no one    2614          * And since the fs is frozen, no one can modify the fs yet, thus
2354          * we don't need to hold device_list_    2615          * we don't need to hold device_list_mutex.
2355          */                                      2616          */
2356         list_for_each_entry(device, &fs_info-    2617         list_for_each_entry(device, &fs_info->fs_devices->devices, dev_list) {
2357                 ret = check_dev_super(device)    2618                 ret = check_dev_super(device);
2358                 if (ret < 0) {                   2619                 if (ret < 0) {
2359                         btrfs_handle_fs_error    2620                         btrfs_handle_fs_error(fs_info, ret,
2360                                 "super block     2621                                 "super block on devid %llu got modified unexpectedly",
2361                                 device->devid    2622                                 device->devid);
2362                         break;                   2623                         break;
2363                 }                                2624                 }
2364         }                                        2625         }
2365         clear_bit(BTRFS_FS_FROZEN, &fs_info->    2626         clear_bit(BTRFS_FS_FROZEN, &fs_info->flags);
2366                                                  2627 
2367         /*                                       2628         /*
2368          * We still return 0, to allow VFS la    2629          * We still return 0, to allow VFS layer to unfreeze the fs even the
2369          * above checks failed. Since the fs     2630          * above checks failed. Since the fs is either fine or read-only, we're
2370          * safe to continue, without causing     2631          * safe to continue, without causing further damage.
2371          */                                      2632          */
2372         return 0;                                2633         return 0;
2373 }                                                2634 }
2374                                                  2635 
2375 static int btrfs_show_devname(struct seq_file    2636 static int btrfs_show_devname(struct seq_file *m, struct dentry *root)
2376 {                                                2637 {
2377         struct btrfs_fs_info *fs_info = btrfs    2638         struct btrfs_fs_info *fs_info = btrfs_sb(root->d_sb);
2378                                                  2639 
2379         /*                                       2640         /*
2380          * There should be always a valid poi    2641          * There should be always a valid pointer in latest_dev, it may be stale
2381          * for a short moment in case it's be    2642          * for a short moment in case it's being deleted but still valid until
2382          * the end of RCU grace period.          2643          * the end of RCU grace period.
2383          */                                      2644          */
2384         rcu_read_lock();                         2645         rcu_read_lock();
2385         seq_escape(m, btrfs_dev_name(fs_info- !! 2646         seq_escape(m, rcu_str_deref(fs_info->fs_devices->latest_dev->name), " \t\n\\");
2386         rcu_read_unlock();                       2647         rcu_read_unlock();
2387                                                  2648 
2388         return 0;                                2649         return 0;
2389 }                                                2650 }
2390                                                  2651 
2391 static long btrfs_nr_cached_objects(struct su << 
2392 {                                             << 
2393         struct btrfs_fs_info *fs_info = btrfs << 
2394         const s64 nr = percpu_counter_sum_pos << 
2395                                               << 
2396         trace_btrfs_extent_map_shrinker_count << 
2397                                               << 
2398         /*                                    << 
2399          * Only report the real number for DE << 
2400          * serious performance degradation ca << 
2401          */                                   << 
2402         if (IS_ENABLED(CONFIG_BTRFS_DEBUG))   << 
2403                 return nr;                    << 
2404         return 0;                             << 
2405 }                                             << 
2406                                               << 
2407 static long btrfs_free_cached_objects(struct  << 
2408 {                                             << 
2409         const long nr_to_scan = min_t(unsigne << 
2410         struct btrfs_fs_info *fs_info = btrfs << 
2411                                               << 
2412         /*                                    << 
2413          * We may be called from any task try << 
2414          * want to slow it down with scanning << 
2415          * also cause heavy lock contention i << 
2416          * here. Therefore only allow kswapd  << 
2417          */                                   << 
2418         if (!current_is_kswapd())             << 
2419                 return 0;                     << 
2420                                               << 
2421         return btrfs_free_extent_maps(fs_info << 
2422 }                                             << 
2423                                               << 
2424 static const struct super_operations btrfs_su    2652 static const struct super_operations btrfs_super_ops = {
2425         .drop_inode     = btrfs_drop_inode,      2653         .drop_inode     = btrfs_drop_inode,
2426         .evict_inode    = btrfs_evict_inode,     2654         .evict_inode    = btrfs_evict_inode,
2427         .put_super      = btrfs_put_super,       2655         .put_super      = btrfs_put_super,
2428         .sync_fs        = btrfs_sync_fs,         2656         .sync_fs        = btrfs_sync_fs,
2429         .show_options   = btrfs_show_options,    2657         .show_options   = btrfs_show_options,
2430         .show_devname   = btrfs_show_devname,    2658         .show_devname   = btrfs_show_devname,
2431         .alloc_inode    = btrfs_alloc_inode,     2659         .alloc_inode    = btrfs_alloc_inode,
2432         .destroy_inode  = btrfs_destroy_inode    2660         .destroy_inode  = btrfs_destroy_inode,
2433         .free_inode     = btrfs_free_inode,      2661         .free_inode     = btrfs_free_inode,
2434         .statfs         = btrfs_statfs,          2662         .statfs         = btrfs_statfs,
                                                   >> 2663         .remount_fs     = btrfs_remount,
2435         .freeze_fs      = btrfs_freeze,          2664         .freeze_fs      = btrfs_freeze,
2436         .unfreeze_fs    = btrfs_unfreeze,        2665         .unfreeze_fs    = btrfs_unfreeze,
2437         .nr_cached_objects = btrfs_nr_cached_ << 
2438         .free_cached_objects = btrfs_free_cac << 
2439 };                                               2666 };
2440                                                  2667 
2441 static const struct file_operations btrfs_ctl    2668 static const struct file_operations btrfs_ctl_fops = {
2442         .open = btrfs_control_open,              2669         .open = btrfs_control_open,
2443         .unlocked_ioctl  = btrfs_control_ioct    2670         .unlocked_ioctl  = btrfs_control_ioctl,
2444         .compat_ioctl = compat_ptr_ioctl,        2671         .compat_ioctl = compat_ptr_ioctl,
2445         .owner   = THIS_MODULE,                  2672         .owner   = THIS_MODULE,
2446         .llseek = noop_llseek,                   2673         .llseek = noop_llseek,
2447 };                                               2674 };
2448                                                  2675 
2449 static struct miscdevice btrfs_misc = {          2676 static struct miscdevice btrfs_misc = {
2450         .minor          = BTRFS_MINOR,           2677         .minor          = BTRFS_MINOR,
2451         .name           = "btrfs-control",       2678         .name           = "btrfs-control",
2452         .fops           = &btrfs_ctl_fops        2679         .fops           = &btrfs_ctl_fops
2453 };                                               2680 };
2454                                                  2681 
2455 MODULE_ALIAS_MISCDEV(BTRFS_MINOR);               2682 MODULE_ALIAS_MISCDEV(BTRFS_MINOR);
2456 MODULE_ALIAS("devname:btrfs-control");           2683 MODULE_ALIAS("devname:btrfs-control");
2457                                                  2684 
2458 static int __init btrfs_interface_init(void)     2685 static int __init btrfs_interface_init(void)
2459 {                                                2686 {
2460         return misc_register(&btrfs_misc);       2687         return misc_register(&btrfs_misc);
2461 }                                                2688 }
2462                                                  2689 
2463 static __cold void btrfs_interface_exit(void)    2690 static __cold void btrfs_interface_exit(void)
2464 {                                                2691 {
2465         misc_deregister(&btrfs_misc);            2692         misc_deregister(&btrfs_misc);
2466 }                                                2693 }
2467                                                  2694 
2468 static int __init btrfs_print_mod_info(void)  !! 2695 static void __init btrfs_print_mod_info(void)
2469 {                                                2696 {
2470         static const char options[] = ""         2697         static const char options[] = ""
2471 #ifdef CONFIG_BTRFS_DEBUG                        2698 #ifdef CONFIG_BTRFS_DEBUG
2472                         ", debug=on"             2699                         ", debug=on"
2473 #endif                                           2700 #endif
2474 #ifdef CONFIG_BTRFS_ASSERT                       2701 #ifdef CONFIG_BTRFS_ASSERT
2475                         ", assert=on"            2702                         ", assert=on"
2476 #endif                                           2703 #endif
                                                   >> 2704 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
                                                   >> 2705                         ", integrity-checker=on"
                                                   >> 2706 #endif
2477 #ifdef CONFIG_BTRFS_FS_REF_VERIFY                2707 #ifdef CONFIG_BTRFS_FS_REF_VERIFY
2478                         ", ref-verify=on"        2708                         ", ref-verify=on"
2479 #endif                                           2709 #endif
2480 #ifdef CONFIG_BLK_DEV_ZONED                      2710 #ifdef CONFIG_BLK_DEV_ZONED
2481                         ", zoned=yes"            2711                         ", zoned=yes"
2482 #else                                            2712 #else
2483                         ", zoned=no"             2713                         ", zoned=no"
2484 #endif                                           2714 #endif
2485 #ifdef CONFIG_FS_VERITY                          2715 #ifdef CONFIG_FS_VERITY
2486                         ", fsverity=yes"         2716                         ", fsverity=yes"
2487 #else                                            2717 #else
2488                         ", fsverity=no"          2718                         ", fsverity=no"
2489 #endif                                           2719 #endif
2490                         ;                        2720                         ;
2491         pr_info("Btrfs loaded%s\n", options); !! 2721         pr_info("Btrfs loaded, crc32c=%s%s\n", crc32c_impl(), options);
2492         return 0;                             << 
2493 }                                                2722 }
2494                                                  2723 
2495 static int register_btrfs(void)               !! 2724 static int __init init_btrfs_fs(void)
2496 {                                                2725 {
2497         return register_filesystem(&btrfs_fs_ !! 2726         int err;
2498 }                                             << 
2499                                                  2727 
2500 static void unregister_btrfs(void)            !! 2728         btrfs_props_init();
2501 {                                             << 
2502         unregister_filesystem(&btrfs_fs_type) << 
2503 }                                             << 
2504                                                  2729 
2505 /* Helper structure for long init/exit functi !! 2730         err = btrfs_init_sysfs();
2506 struct init_sequence {                        !! 2731         if (err)
2507         int (*init_func)(void);               !! 2732                 return err;
2508         /* Can be NULL if the init_func doesn << 
2509         void (*exit_func)(void);              << 
2510 };                                            << 
2511                                                  2733 
2512 static const struct init_sequence mod_init_se !! 2734         btrfs_init_compress();
2513         {                                     << 
2514                 .init_func = btrfs_props_init << 
2515                 .exit_func = NULL,            << 
2516         }, {                                  << 
2517                 .init_func = btrfs_init_sysfs << 
2518                 .exit_func = btrfs_exit_sysfs << 
2519         }, {                                  << 
2520                 .init_func = btrfs_init_compr << 
2521                 .exit_func = btrfs_exit_compr << 
2522         }, {                                  << 
2523                 .init_func = btrfs_init_cache << 
2524                 .exit_func = btrfs_destroy_ca << 
2525         }, {                                  << 
2526                 .init_func = btrfs_init_dio,  << 
2527                 .exit_func = btrfs_destroy_di << 
2528         }, {                                  << 
2529                 .init_func = btrfs_transactio << 
2530                 .exit_func = btrfs_transactio << 
2531         }, {                                  << 
2532                 .init_func = btrfs_ctree_init << 
2533                 .exit_func = btrfs_ctree_exit << 
2534         }, {                                  << 
2535                 .init_func = btrfs_free_space << 
2536                 .exit_func = btrfs_free_space << 
2537         }, {                                  << 
2538                 .init_func = extent_state_ini << 
2539                 .exit_func = extent_state_fre << 
2540         }, {                                  << 
2541                 .init_func = extent_buffer_in << 
2542                 .exit_func = extent_buffer_fr << 
2543         }, {                                  << 
2544                 .init_func = btrfs_bioset_ini << 
2545                 .exit_func = btrfs_bioset_exi << 
2546         }, {                                  << 
2547                 .init_func = extent_map_init, << 
2548                 .exit_func = extent_map_exit, << 
2549         }, {                                  << 
2550                 .init_func = ordered_data_ini << 
2551                 .exit_func = ordered_data_exi << 
2552         }, {                                  << 
2553                 .init_func = btrfs_delayed_in << 
2554                 .exit_func = btrfs_delayed_in << 
2555         }, {                                  << 
2556                 .init_func = btrfs_auto_defra << 
2557                 .exit_func = btrfs_auto_defra << 
2558         }, {                                  << 
2559                 .init_func = btrfs_delayed_re << 
2560                 .exit_func = btrfs_delayed_re << 
2561         }, {                                  << 
2562                 .init_func = btrfs_prelim_ref << 
2563                 .exit_func = btrfs_prelim_ref << 
2564         }, {                                  << 
2565                 .init_func = btrfs_interface_ << 
2566                 .exit_func = btrfs_interface_ << 
2567         }, {                                  << 
2568                 .init_func = btrfs_print_mod_ << 
2569                 .exit_func = NULL,            << 
2570         }, {                                  << 
2571                 .init_func = btrfs_run_sanity << 
2572                 .exit_func = NULL,            << 
2573         }, {                                  << 
2574                 .init_func = register_btrfs,  << 
2575                 .exit_func = unregister_btrfs << 
2576         }                                     << 
2577 };                                            << 
2578                                                  2735 
2579 static bool mod_init_result[ARRAY_SIZE(mod_in !! 2736         err = btrfs_init_cachep();
                                                   >> 2737         if (err)
                                                   >> 2738                 goto free_compress;
2580                                                  2739 
2581 static __always_inline void btrfs_exit_btrfs_ !! 2740         err = extent_io_init();
2582 {                                             !! 2741         if (err)
2583         int i;                                !! 2742                 goto free_cachep;
2584                                                  2743 
2585         for (i = ARRAY_SIZE(mod_init_seq) - 1 !! 2744         err = extent_state_cache_init();
2586                 if (!mod_init_result[i])      !! 2745         if (err)
2587                         continue;             !! 2746                 goto free_extent_io;
2588                 if (mod_init_seq[i].exit_func !! 2747 
2589                         mod_init_seq[i].exit_ !! 2748         err = extent_map_init();
2590                 mod_init_result[i] = false;   !! 2749         if (err)
2591         }                                     !! 2750                 goto free_extent_state_cache;
                                                   >> 2751 
                                                   >> 2752         err = ordered_data_init();
                                                   >> 2753         if (err)
                                                   >> 2754                 goto free_extent_map;
                                                   >> 2755 
                                                   >> 2756         err = btrfs_delayed_inode_init();
                                                   >> 2757         if (err)
                                                   >> 2758                 goto free_ordered_data;
                                                   >> 2759 
                                                   >> 2760         err = btrfs_auto_defrag_init();
                                                   >> 2761         if (err)
                                                   >> 2762                 goto free_delayed_inode;
                                                   >> 2763 
                                                   >> 2764         err = btrfs_delayed_ref_init();
                                                   >> 2765         if (err)
                                                   >> 2766                 goto free_auto_defrag;
                                                   >> 2767 
                                                   >> 2768         err = btrfs_prelim_ref_init();
                                                   >> 2769         if (err)
                                                   >> 2770                 goto free_delayed_ref;
                                                   >> 2771 
                                                   >> 2772         err = btrfs_interface_init();
                                                   >> 2773         if (err)
                                                   >> 2774                 goto free_prelim_ref;
                                                   >> 2775 
                                                   >> 2776         btrfs_print_mod_info();
                                                   >> 2777 
                                                   >> 2778         err = btrfs_run_sanity_tests();
                                                   >> 2779         if (err)
                                                   >> 2780                 goto unregister_ioctl;
                                                   >> 2781 
                                                   >> 2782         err = register_filesystem(&btrfs_fs_type);
                                                   >> 2783         if (err)
                                                   >> 2784                 goto unregister_ioctl;
                                                   >> 2785 
                                                   >> 2786         return 0;
                                                   >> 2787 
                                                   >> 2788 unregister_ioctl:
                                                   >> 2789         btrfs_interface_exit();
                                                   >> 2790 free_prelim_ref:
                                                   >> 2791         btrfs_prelim_ref_exit();
                                                   >> 2792 free_delayed_ref:
                                                   >> 2793         btrfs_delayed_ref_exit();
                                                   >> 2794 free_auto_defrag:
                                                   >> 2795         btrfs_auto_defrag_exit();
                                                   >> 2796 free_delayed_inode:
                                                   >> 2797         btrfs_delayed_inode_exit();
                                                   >> 2798 free_ordered_data:
                                                   >> 2799         ordered_data_exit();
                                                   >> 2800 free_extent_map:
                                                   >> 2801         extent_map_exit();
                                                   >> 2802 free_extent_state_cache:
                                                   >> 2803         extent_state_cache_exit();
                                                   >> 2804 free_extent_io:
                                                   >> 2805         extent_io_exit();
                                                   >> 2806 free_cachep:
                                                   >> 2807         btrfs_destroy_cachep();
                                                   >> 2808 free_compress:
                                                   >> 2809         btrfs_exit_compress();
                                                   >> 2810         btrfs_exit_sysfs();
                                                   >> 2811 
                                                   >> 2812         return err;
2592 }                                                2813 }
2593                                                  2814 
2594 static void __exit exit_btrfs_fs(void)           2815 static void __exit exit_btrfs_fs(void)
2595 {                                                2816 {
2596         btrfs_exit_btrfs_fs();                !! 2817         btrfs_destroy_cachep();
                                                   >> 2818         btrfs_delayed_ref_exit();
                                                   >> 2819         btrfs_auto_defrag_exit();
                                                   >> 2820         btrfs_delayed_inode_exit();
                                                   >> 2821         btrfs_prelim_ref_exit();
                                                   >> 2822         ordered_data_exit();
                                                   >> 2823         extent_map_exit();
                                                   >> 2824         extent_state_cache_exit();
                                                   >> 2825         extent_io_exit();
                                                   >> 2826         btrfs_interface_exit();
                                                   >> 2827         unregister_filesystem(&btrfs_fs_type);
                                                   >> 2828         btrfs_exit_sysfs();
2597         btrfs_cleanup_fs_uuids();                2829         btrfs_cleanup_fs_uuids();
2598 }                                             !! 2830         btrfs_exit_compress();
2599                                               << 
2600 static int __init init_btrfs_fs(void)         << 
2601 {                                             << 
2602         int ret;                              << 
2603         int i;                                << 
2604                                               << 
2605         for (i = 0; i < ARRAY_SIZE(mod_init_s << 
2606                 ASSERT(!mod_init_result[i]);  << 
2607                 ret = mod_init_seq[i].init_fu << 
2608                 if (ret < 0) {                << 
2609                         btrfs_exit_btrfs_fs() << 
2610                         return ret;           << 
2611                 }                             << 
2612                 mod_init_result[i] = true;    << 
2613         }                                     << 
2614         return 0;                             << 
2615 }                                                2831 }
2616                                                  2832 
2617 late_initcall(init_btrfs_fs);                    2833 late_initcall(init_btrfs_fs);
2618 module_exit(exit_btrfs_fs)                       2834 module_exit(exit_btrfs_fs)
2619                                                  2835 
2620 MODULE_DESCRIPTION("B-Tree File System (BTRFS << 
2621 MODULE_LICENSE("GPL");                           2836 MODULE_LICENSE("GPL");
2622 MODULE_SOFTDEP("pre: crc32c");                   2837 MODULE_SOFTDEP("pre: crc32c");
2623 MODULE_SOFTDEP("pre: xxhash64");                 2838 MODULE_SOFTDEP("pre: xxhash64");
2624 MODULE_SOFTDEP("pre: sha256");                   2839 MODULE_SOFTDEP("pre: sha256");
2625 MODULE_SOFTDEP("pre: blake2b-256");              2840 MODULE_SOFTDEP("pre: blake2b-256");
2626                                                  2841 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php