LCOV - code coverage report
Current view: top level - fs/btrfs - disk-io.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1676 0.0 %
Date: 2014-02-18 Functions: 0 95 0.0 %
Branches: 0 1186 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * Copyright (C) 2007 Oracle.  All rights reserved.
       3                 :            :  *
       4                 :            :  * This program is free software; you can redistribute it and/or
       5                 :            :  * modify it under the terms of the GNU General Public
       6                 :            :  * License v2 as published by the Free Software Foundation.
       7                 :            :  *
       8                 :            :  * This program is distributed in the hope that it will be useful,
       9                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      10                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      11                 :            :  * General Public License for more details.
      12                 :            :  *
      13                 :            :  * You should have received a copy of the GNU General Public
      14                 :            :  * License along with this program; if not, write to the
      15                 :            :  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      16                 :            :  * Boston, MA 021110-1307, USA.
      17                 :            :  */
      18                 :            : 
      19                 :            : #include <linux/fs.h>
      20                 :            : #include <linux/blkdev.h>
      21                 :            : #include <linux/scatterlist.h>
      22                 :            : #include <linux/swap.h>
      23                 :            : #include <linux/radix-tree.h>
      24                 :            : #include <linux/writeback.h>
      25                 :            : #include <linux/buffer_head.h>
      26                 :            : #include <linux/workqueue.h>
      27                 :            : #include <linux/kthread.h>
      28                 :            : #include <linux/freezer.h>
      29                 :            : #include <linux/crc32c.h>
      30                 :            : #include <linux/slab.h>
      31                 :            : #include <linux/migrate.h>
      32                 :            : #include <linux/ratelimit.h>
      33                 :            : #include <linux/uuid.h>
      34                 :            : #include <linux/semaphore.h>
      35                 :            : #include <asm/unaligned.h>
      36                 :            : #include "ctree.h"
      37                 :            : #include "disk-io.h"
      38                 :            : #include "transaction.h"
      39                 :            : #include "btrfs_inode.h"
      40                 :            : #include "volumes.h"
      41                 :            : #include "print-tree.h"
      42                 :            : #include "async-thread.h"
      43                 :            : #include "locking.h"
      44                 :            : #include "tree-log.h"
      45                 :            : #include "free-space-cache.h"
      46                 :            : #include "inode-map.h"
      47                 :            : #include "check-integrity.h"
      48                 :            : #include "rcu-string.h"
      49                 :            : #include "dev-replace.h"
      50                 :            : #include "raid56.h"
      51                 :            : 
      52                 :            : #ifdef CONFIG_X86
      53                 :            : #include <asm/cpufeature.h>
      54                 :            : #endif
      55                 :            : 
      56                 :            : static struct extent_io_ops btree_extent_io_ops;
      57                 :            : static void end_workqueue_fn(struct btrfs_work *work);
      58                 :            : static void free_fs_root(struct btrfs_root *root);
      59                 :            : static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info,
      60                 :            :                                     int read_only);
      61                 :            : static void btrfs_destroy_ordered_operations(struct btrfs_transaction *t,
      62                 :            :                                              struct btrfs_root *root);
      63                 :            : static void btrfs_destroy_ordered_extents(struct btrfs_root *root);
      64                 :            : static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
      65                 :            :                                       struct btrfs_root *root);
      66                 :            : static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root);
      67                 :            : static int btrfs_destroy_marked_extents(struct btrfs_root *root,
      68                 :            :                                         struct extent_io_tree *dirty_pages,
      69                 :            :                                         int mark);
      70                 :            : static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
      71                 :            :                                        struct extent_io_tree *pinned_extents);
      72                 :            : static int btrfs_cleanup_transaction(struct btrfs_root *root);
      73                 :            : static void btrfs_error_commit_super(struct btrfs_root *root);
      74                 :            : 
      75                 :            : /*
      76                 :            :  * end_io_wq structs are used to do processing in task context when an IO is
      77                 :            :  * complete.  This is used during reads to verify checksums, and it is used
      78                 :            :  * by writes to insert metadata for new file extents after IO is complete.
      79                 :            :  */
      80                 :            : struct end_io_wq {
      81                 :            :         struct bio *bio;
      82                 :            :         bio_end_io_t *end_io;
      83                 :            :         void *private;
      84                 :            :         struct btrfs_fs_info *info;
      85                 :            :         int error;
      86                 :            :         int metadata;
      87                 :            :         struct list_head list;
      88                 :            :         struct btrfs_work work;
      89                 :            : };
      90                 :            : 
      91                 :            : /*
      92                 :            :  * async submit bios are used to offload expensive checksumming
      93                 :            :  * onto the worker threads.  They checksum file and metadata bios
      94                 :            :  * just before they are sent down the IO stack.
      95                 :            :  */
      96                 :            : struct async_submit_bio {
      97                 :            :         struct inode *inode;
      98                 :            :         struct bio *bio;
      99                 :            :         struct list_head list;
     100                 :            :         extent_submit_bio_hook_t *submit_bio_start;
     101                 :            :         extent_submit_bio_hook_t *submit_bio_done;
     102                 :            :         int rw;
     103                 :            :         int mirror_num;
     104                 :            :         unsigned long bio_flags;
     105                 :            :         /*
     106                 :            :          * bio_offset is optional, can be used if the pages in the bio
     107                 :            :          * can't tell us where in the file the bio should go
     108                 :            :          */
     109                 :            :         u64 bio_offset;
     110                 :            :         struct btrfs_work work;
     111                 :            :         int error;
     112                 :            : };
     113                 :            : 
     114                 :            : /*
     115                 :            :  * Lockdep class keys for extent_buffer->lock's in this root.  For a given
     116                 :            :  * eb, the lockdep key is determined by the btrfs_root it belongs to and
     117                 :            :  * the level the eb occupies in the tree.
     118                 :            :  *
     119                 :            :  * Different roots are used for different purposes and may nest inside each
     120                 :            :  * other and they require separate keysets.  As lockdep keys should be
     121                 :            :  * static, assign keysets according to the purpose of the root as indicated
     122                 :            :  * by btrfs_root->objectid.  This ensures that all special purpose roots
     123                 :            :  * have separate keysets.
     124                 :            :  *
     125                 :            :  * Lock-nesting across peer nodes is always done with the immediate parent
     126                 :            :  * node locked thus preventing deadlock.  As lockdep doesn't know this, use
     127                 :            :  * subclass to avoid triggering lockdep warning in such cases.
     128                 :            :  *
     129                 :            :  * The key is set by the readpage_end_io_hook after the buffer has passed
     130                 :            :  * csum validation but before the pages are unlocked.  It is also set by
     131                 :            :  * btrfs_init_new_buffer on freshly allocated blocks.
     132                 :            :  *
     133                 :            :  * We also add a check to make sure the highest level of the tree is the
     134                 :            :  * same as our lockdep setup here.  If BTRFS_MAX_LEVEL changes, this code
     135                 :            :  * needs update as well.
     136                 :            :  */
     137                 :            : #ifdef CONFIG_DEBUG_LOCK_ALLOC
     138                 :            : # if BTRFS_MAX_LEVEL != 8
     139                 :            : #  error
     140                 :            : # endif
     141                 :            : 
     142                 :            : static struct btrfs_lockdep_keyset {
     143                 :            :         u64                     id;             /* root objectid */
     144                 :            :         const char              *name_stem;     /* lock name stem */
     145                 :            :         char                    names[BTRFS_MAX_LEVEL + 1][20];
     146                 :            :         struct lock_class_key   keys[BTRFS_MAX_LEVEL + 1];
     147                 :            : } btrfs_lockdep_keysets[] = {
     148                 :            :         { .id = BTRFS_ROOT_TREE_OBJECTID,       .name_stem = "root"   },
     149                 :            :         { .id = BTRFS_EXTENT_TREE_OBJECTID,     .name_stem = "extent" },
     150                 :            :         { .id = BTRFS_CHUNK_TREE_OBJECTID,      .name_stem = "chunk"  },
     151                 :            :         { .id = BTRFS_DEV_TREE_OBJECTID,        .name_stem = "dev"    },
     152                 :            :         { .id = BTRFS_FS_TREE_OBJECTID,         .name_stem = "fs"     },
     153                 :            :         { .id = BTRFS_CSUM_TREE_OBJECTID,       .name_stem = "csum"   },
     154                 :            :         { .id = BTRFS_QUOTA_TREE_OBJECTID,      .name_stem = "quota"  },
     155                 :            :         { .id = BTRFS_TREE_LOG_OBJECTID,        .name_stem = "log"    },
     156                 :            :         { .id = BTRFS_TREE_RELOC_OBJECTID,      .name_stem = "treloc" },
     157                 :            :         { .id = BTRFS_DATA_RELOC_TREE_OBJECTID, .name_stem = "dreloc" },
     158                 :            :         { .id = BTRFS_UUID_TREE_OBJECTID,       .name_stem = "uuid"   },
     159                 :            :         { .id = 0,                              .name_stem = "tree"   },
     160                 :            : };
     161                 :            : 
     162                 :            : void __init btrfs_init_lockdep(void)
     163                 :            : {
     164                 :            :         int i, j;
     165                 :            : 
     166                 :            :         /* initialize lockdep class names */
     167                 :            :         for (i = 0; i < ARRAY_SIZE(btrfs_lockdep_keysets); i++) {
     168                 :            :                 struct btrfs_lockdep_keyset *ks = &btrfs_lockdep_keysets[i];
     169                 :            : 
     170                 :            :                 for (j = 0; j < ARRAY_SIZE(ks->names); j++)
     171                 :            :                         snprintf(ks->names[j], sizeof(ks->names[j]),
     172                 :            :                                  "btrfs-%s-%02d", ks->name_stem, j);
     173                 :            :         }
     174                 :            : }
     175                 :            : 
     176                 :            : void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb,
     177                 :            :                                     int level)
     178                 :            : {
     179                 :            :         struct btrfs_lockdep_keyset *ks;
     180                 :            : 
     181                 :            :         BUG_ON(level >= ARRAY_SIZE(ks->keys));
     182                 :            : 
     183                 :            :         /* find the matching keyset, id 0 is the default entry */
     184                 :            :         for (ks = btrfs_lockdep_keysets; ks->id; ks++)
     185                 :            :                 if (ks->id == objectid)
     186                 :            :                         break;
     187                 :            : 
     188                 :            :         lockdep_set_class_and_name(&eb->lock,
     189                 :            :                                    &ks->keys[level], ks->names[level]);
     190                 :            : }
     191                 :            : 
     192                 :            : #endif
     193                 :            : 
     194                 :            : /*
     195                 :            :  * extents on the btree inode are pretty simple, there's one extent
     196                 :            :  * that covers the entire device
     197                 :            :  */
     198                 :          0 : static struct extent_map *btree_get_extent(struct inode *inode,
     199                 :            :                 struct page *page, size_t pg_offset, u64 start, u64 len,
     200                 :            :                 int create)
     201                 :            : {
     202                 :          0 :         struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
     203                 :            :         struct extent_map *em;
     204                 :            :         int ret;
     205                 :            : 
     206                 :          0 :         read_lock(&em_tree->lock);
     207                 :          0 :         em = lookup_extent_mapping(em_tree, start, len);
     208         [ #  # ]:          0 :         if (em) {
     209                 :          0 :                 em->bdev =
     210                 :          0 :                         BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev;
     211                 :            :                 read_unlock(&em_tree->lock);
     212                 :            :                 goto out;
     213                 :            :         }
     214                 :            :         read_unlock(&em_tree->lock);
     215                 :            : 
     216                 :          0 :         em = alloc_extent_map();
     217         [ #  # ]:          0 :         if (!em) {
     218                 :            :                 em = ERR_PTR(-ENOMEM);
     219                 :            :                 goto out;
     220                 :            :         }
     221                 :          0 :         em->start = 0;
     222                 :          0 :         em->len = (u64)-1;
     223                 :          0 :         em->block_len = (u64)-1;
     224                 :          0 :         em->block_start = 0;
     225                 :          0 :         em->bdev = BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev;
     226                 :            : 
     227                 :          0 :         write_lock(&em_tree->lock);
     228                 :          0 :         ret = add_extent_mapping(em_tree, em, 0);
     229         [ #  # ]:          0 :         if (ret == -EEXIST) {
     230                 :          0 :                 free_extent_map(em);
     231                 :          0 :                 em = lookup_extent_mapping(em_tree, start, len);
     232         [ #  # ]:          0 :                 if (!em)
     233                 :            :                         em = ERR_PTR(-EIO);
     234         [ #  # ]:          0 :         } else if (ret) {
     235                 :          0 :                 free_extent_map(em);
     236                 :            :                 em = ERR_PTR(ret);
     237                 :            :         }
     238                 :            :         write_unlock(&em_tree->lock);
     239                 :            : 
     240                 :            : out:
     241                 :          0 :         return em;
     242                 :            : }
     243                 :            : 
     244                 :          0 : u32 btrfs_csum_data(char *data, u32 seed, size_t len)
     245                 :            : {
     246                 :          0 :         return crc32c(seed, data, len);
     247                 :            : }
     248                 :            : 
     249                 :          0 : void btrfs_csum_final(u32 crc, char *result)
     250                 :            : {
     251                 :          0 :         put_unaligned_le32(~crc, result);
     252                 :          0 : }
     253                 :            : 
     254                 :            : /*
     255                 :            :  * compute the csum for a btree block, and either verify it or write it
     256                 :            :  * into the csum field of the block.
     257                 :            :  */
     258                 :          0 : static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
     259                 :            :                            int verify)
     260                 :            : {
     261                 :          0 :         u16 csum_size = btrfs_super_csum_size(root->fs_info->super_copy);
     262                 :            :         char *result = NULL;
     263                 :            :         unsigned long len;
     264                 :            :         unsigned long cur_len;
     265                 :            :         unsigned long offset = BTRFS_CSUM_SIZE;
     266                 :            :         char *kaddr;
     267                 :            :         unsigned long map_start;
     268                 :            :         unsigned long map_len;
     269                 :            :         int err;
     270                 :            :         u32 crc = ~(u32)0;
     271                 :            :         unsigned long inline_result;
     272                 :            : 
     273                 :          0 :         len = buf->len - offset;
     274         [ #  # ]:          0 :         while (len > 0) {
     275                 :          0 :                 err = map_private_extent_buffer(buf, offset, 32,
     276                 :            :                                         &kaddr, &map_start, &map_len);
     277         [ #  # ]:          0 :                 if (err)
     278                 :            :                         return 1;
     279                 :          0 :                 cur_len = min(len, map_len - (offset - map_start));
     280                 :          0 :                 crc = btrfs_csum_data(kaddr + offset - map_start,
     281                 :            :                                       crc, cur_len);
     282                 :          0 :                 len -= cur_len;
     283                 :          0 :                 offset += cur_len;
     284                 :            :         }
     285         [ #  # ]:          0 :         if (csum_size > sizeof(inline_result)) {
     286                 :          0 :                 result = kzalloc(csum_size * sizeof(char), GFP_NOFS);
     287         [ #  # ]:          0 :                 if (!result)
     288                 :            :                         return 1;
     289                 :            :         } else {
     290                 :            :                 result = (char *)&inline_result;
     291                 :            :         }
     292                 :            : 
     293                 :            :         btrfs_csum_final(crc, result);
     294                 :            : 
     295         [ #  # ]:          0 :         if (verify) {
     296         [ #  # ]:          0 :                 if (memcmp_extent_buffer(buf, result, 0, csum_size)) {
     297                 :            :                         u32 val;
     298                 :          0 :                         u32 found = 0;
     299                 :          0 :                         memcpy(&found, result, csum_size);
     300                 :            : 
     301                 :          0 :                         read_extent_buffer(buf, &val, 0, csum_size);
     302         [ #  # ]:          0 :                         printk_ratelimited(KERN_INFO "btrfs: %s checksum verify "
     303                 :            :                                        "failed on %llu wanted %X found %X "
     304                 :            :                                        "level %d\n",
     305                 :            :                                        root->fs_info->sb->s_id, buf->start,
     306                 :            :                                        val, found, btrfs_header_level(buf));
     307         [ #  # ]:          0 :                         if (result != (char *)&inline_result)
     308                 :          0 :                                 kfree(result);
     309                 :            :                         return 1;
     310                 :            :                 }
     311                 :            :         } else {
     312                 :          0 :                 write_extent_buffer(buf, result, 0, csum_size);
     313                 :            :         }
     314         [ #  # ]:          0 :         if (result != (char *)&inline_result)
     315                 :          0 :                 kfree(result);
     316                 :            :         return 0;
     317                 :            : }
     318                 :            : 
     319                 :            : /*
     320                 :            :  * we can't consider a given block up to date unless the transid of the
     321                 :            :  * block matches the transid in the parent node's pointer.  This is how we
     322                 :            :  * detect blocks that either didn't get written at all or got written
     323                 :            :  * in the wrong place.
     324                 :            :  */
     325                 :          0 : static int verify_parent_transid(struct extent_io_tree *io_tree,
     326                 :          0 :                                  struct extent_buffer *eb, u64 parent_transid,
     327                 :            :                                  int atomic)
     328                 :            : {
     329                 :          0 :         struct extent_state *cached_state = NULL;
     330                 :            :         int ret;
     331                 :            : 
     332   [ #  #  #  # ]:          0 :         if (!parent_transid || btrfs_header_generation(eb) == parent_transid)
     333                 :            :                 return 0;
     334                 :            : 
     335         [ #  # ]:          0 :         if (atomic)
     336                 :            :                 return -EAGAIN;
     337                 :            : 
     338                 :          0 :         lock_extent_bits(io_tree, eb->start, eb->start + eb->len - 1,
     339                 :            :                          0, &cached_state);
     340   [ #  #  #  # ]:          0 :         if (extent_buffer_uptodate(eb) &&
     341                 :            :             btrfs_header_generation(eb) == parent_transid) {
     342                 :            :                 ret = 0;
     343                 :            :                 goto out;
     344                 :            :         }
     345         [ #  # ]:          0 :         printk_ratelimited("parent transid verify failed on %llu wanted %llu "
     346                 :            :                        "found %llu\n",
     347                 :            :                        eb->start, parent_transid, btrfs_header_generation(eb));
     348                 :            :         ret = 1;
     349                 :          0 :         clear_extent_buffer_uptodate(eb);
     350                 :            : out:
     351                 :          0 :         unlock_extent_cached(io_tree, eb->start, eb->start + eb->len - 1,
     352                 :            :                              &cached_state, GFP_NOFS);
     353                 :          0 :         return ret;
     354                 :            : }
     355                 :            : 
     356                 :            : /*
     357                 :            :  * Return 0 if the superblock checksum type matches the checksum value of that
     358                 :            :  * algorithm. Pass the raw disk superblock data.
     359                 :            :  */
     360                 :          0 : static int btrfs_check_super_csum(char *raw_disk_sb)
     361                 :            : {
     362                 :            :         struct btrfs_super_block *disk_sb =
     363                 :            :                 (struct btrfs_super_block *)raw_disk_sb;
     364                 :            :         u16 csum_type = btrfs_super_csum_type(disk_sb);
     365                 :            :         int ret = 0;
     366                 :            : 
     367         [ #  # ]:          0 :         if (csum_type == BTRFS_CSUM_TYPE_CRC32) {
     368                 :            :                 u32 crc = ~(u32)0;
     369                 :            :                 const int csum_size = sizeof(crc);
     370                 :            :                 char result[csum_size];
     371                 :            : 
     372                 :            :                 /*
     373                 :            :                  * The super_block structure does not span the whole
     374                 :            :                  * BTRFS_SUPER_INFO_SIZE range, we expect that the unused space
     375                 :            :                  * is filled with zeros and is included in the checkum.
     376                 :            :                  */
     377                 :          0 :                 crc = btrfs_csum_data(raw_disk_sb + BTRFS_CSUM_SIZE,
     378                 :            :                                 crc, BTRFS_SUPER_INFO_SIZE - BTRFS_CSUM_SIZE);
     379                 :            :                 btrfs_csum_final(crc, result);
     380                 :            : 
     381         [ #  # ]:          0 :                 if (memcmp(raw_disk_sb, result, csum_size))
     382                 :            :                         ret = 1;
     383                 :            : 
     384 [ #  # ][ #  # ]:          0 :                 if (ret && btrfs_super_generation(disk_sb) < 10) {
     385                 :          0 :                         printk(KERN_WARNING "btrfs: super block crcs don't match, older mkfs detected\n");
     386                 :            :                         ret = 0;
     387                 :            :                 }
     388                 :            :         }
     389                 :            : 
     390         [ #  # ]:          0 :         if (csum_type >= ARRAY_SIZE(btrfs_csum_sizes)) {
     391                 :          0 :                 printk(KERN_ERR "btrfs: unsupported checksum algorithm %u\n",
     392                 :            :                                 csum_type);
     393                 :            :                 ret = 1;
     394                 :            :         }
     395                 :            : 
     396                 :          0 :         return ret;
     397                 :            : }
     398                 :            : 
     399                 :            : /*
     400                 :            :  * helper to read a given tree block, doing retries as required when
     401                 :            :  * the checksums don't match and we have alternate mirrors to try.
     402                 :            :  */
     403                 :          0 : static int btree_read_extent_buffer_pages(struct btrfs_root *root,
     404                 :            :                                           struct extent_buffer *eb,
     405                 :            :                                           u64 start, u64 parent_transid)
     406                 :            : {
     407                 :            :         struct extent_io_tree *io_tree;
     408                 :            :         int failed = 0;
     409                 :            :         int ret;
     410                 :            :         int num_copies = 0;
     411                 :            :         int mirror_num = 0;
     412                 :            :         int failed_mirror = 0;
     413                 :            : 
     414                 :          0 :         clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
     415                 :          0 :         io_tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree;
     416                 :            :         while (1) {
     417                 :          0 :                 ret = read_extent_buffer_pages(io_tree, eb, start,
     418                 :            :                                                WAIT_COMPLETE,
     419                 :            :                                                btree_get_extent, mirror_num);
     420         [ #  # ]:          0 :                 if (!ret) {
     421         [ #  # ]:          0 :                         if (!verify_parent_transid(io_tree, eb,
     422                 :            :                                                    parent_transid, 0))
     423                 :            :                                 break;
     424                 :            :                         else
     425                 :            :                                 ret = -EIO;
     426                 :            :                 }
     427                 :            : 
     428                 :            :                 /*
     429                 :            :                  * This buffer's crc is fine, but its contents are corrupted, so
     430                 :            :                  * there is no reason to read the other copies, they won't be
     431                 :            :                  * any less wrong.
     432                 :            :                  */
     433         [ #  # ]:          0 :                 if (test_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags))
     434                 :            :                         break;
     435                 :            : 
     436                 :          0 :                 num_copies = btrfs_num_copies(root->fs_info,
     437                 :          0 :                                               eb->start, eb->len);
     438         [ #  # ]:          0 :                 if (num_copies == 1)
     439                 :            :                         break;
     440                 :            : 
     441         [ #  # ]:          0 :                 if (!failed_mirror) {
     442                 :            :                         failed = 1;
     443                 :          0 :                         failed_mirror = eb->read_mirror;
     444                 :            :                 }
     445                 :            : 
     446                 :          0 :                 mirror_num++;
     447         [ #  # ]:          0 :                 if (mirror_num == failed_mirror)
     448                 :          0 :                         mirror_num++;
     449                 :            : 
     450         [ #  # ]:          0 :                 if (mirror_num > num_copies)
     451                 :            :                         break;
     452                 :            :         }
     453                 :            : 
     454 [ #  # ][ #  # ]:          0 :         if (failed && !ret && failed_mirror)
     455                 :          0 :                 repair_eb_io_failure(root, eb, failed_mirror);
     456                 :            : 
     457                 :          0 :         return ret;
     458                 :            : }
     459                 :            : 
     460                 :            : /*
     461                 :            :  * checksum a dirty tree block before IO.  This has extra checks to make sure
     462                 :            :  * we only fill in the checksum field in the first page of a multi-page block
     463                 :            :  */
     464                 :            : 
     465                 :          0 : static int csum_dirty_buffer(struct btrfs_root *root, struct page *page)
     466                 :            : {
     467                 :            :         struct extent_io_tree *tree;
     468                 :          0 :         u64 start = page_offset(page);
     469                 :            :         u64 found_start;
     470                 :            :         struct extent_buffer *eb;
     471                 :            : 
     472                 :            :         tree = &BTRFS_I(page->mapping->host)->io_tree;
     473                 :            : 
     474                 :          0 :         eb = (struct extent_buffer *)page->private;
     475         [ #  # ]:          0 :         if (page != eb->pages[0])
     476                 :            :                 return 0;
     477                 :            :         found_start = btrfs_header_bytenr(eb);
     478 [ #  # ][ #  # ]:          0 :         if (WARN_ON(found_start != start || !PageUptodate(page)))
         [ #  # ][ #  # ]
     479                 :            :                 return 0;
     480                 :          0 :         csum_tree_block(root, eb, 0);
     481                 :          0 :         return 0;
     482                 :            : }
     483                 :            : 
     484                 :          0 : static int check_tree_block_fsid(struct btrfs_root *root,
     485                 :            :                                  struct extent_buffer *eb)
     486                 :            : {
     487                 :          0 :         struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices;
     488                 :            :         u8 fsid[BTRFS_UUID_SIZE];
     489                 :            :         int ret = 1;
     490                 :            : 
     491                 :          0 :         read_extent_buffer(eb, fsid, btrfs_header_fsid(), BTRFS_FSID_SIZE);
     492         [ #  # ]:          0 :         while (fs_devices) {
     493         [ #  # ]:          0 :                 if (!memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE)) {
     494                 :            :                         ret = 0;
     495                 :            :                         break;
     496                 :            :                 }
     497                 :          0 :                 fs_devices = fs_devices->seed;
     498                 :            :         }
     499                 :          0 :         return ret;
     500                 :            : }
     501                 :            : 
     502                 :            : #define CORRUPT(reason, eb, root, slot)                         \
     503                 :            :         printk(KERN_CRIT "btrfs: corrupt leaf, %s: block=%llu,"       \
     504                 :            :                "root=%llu, slot=%d\n", reason,                        \
     505                 :            :                btrfs_header_bytenr(eb), root->objectid, slot)
     506                 :            : 
     507                 :          0 : static noinline int check_leaf(struct btrfs_root *root,
     508                 :          0 :                                struct extent_buffer *leaf)
     509                 :            : {
     510                 :            :         struct btrfs_key key;
     511                 :            :         struct btrfs_key leaf_key;
     512                 :            :         u32 nritems = btrfs_header_nritems(leaf);
     513                 :            :         int slot;
     514                 :            : 
     515         [ #  # ]:          0 :         if (nritems == 0)
     516                 :            :                 return 0;
     517                 :            : 
     518                 :            :         /* Check the 0 item */
     519         [ #  # ]:          0 :         if (btrfs_item_offset_nr(leaf, 0) + btrfs_item_size_nr(leaf, 0) !=
     520                 :          0 :             BTRFS_LEAF_DATA_SIZE(root)) {
     521                 :          0 :                 CORRUPT("invalid item offset size pair", leaf, root, 0);
     522                 :            :                 return -EIO;
     523                 :            :         }
     524                 :            : 
     525                 :            :         /*
     526                 :            :          * Check to make sure each items keys are in the correct order and their
     527                 :            :          * offsets make sense.  We only have to loop through nritems-1 because
     528                 :            :          * we check the current slot against the next slot, which verifies the
     529                 :            :          * next slot's offset+size makes sense and that the current's slot
     530                 :            :          * offset is correct.
     531                 :            :          */
     532         [ #  # ]:          0 :         for (slot = 0; slot < nritems - 1; slot++) {
     533                 :            :                 btrfs_item_key_to_cpu(leaf, &leaf_key, slot);
     534                 :          0 :                 btrfs_item_key_to_cpu(leaf, &key, slot + 1);
     535                 :            : 
     536                 :            :                 /* Make sure the keys are in the right order */
     537         [ #  # ]:          0 :                 if (btrfs_comp_cpu_keys(&leaf_key, &key) >= 0) {
     538                 :          0 :                         CORRUPT("bad key order", leaf, root, slot);
     539                 :            :                         return -EIO;
     540                 :            :                 }
     541                 :            : 
     542                 :            :                 /*
     543                 :            :                  * Make sure the offset and ends are right, remember that the
     544                 :            :                  * item data starts at the end of the leaf and grows towards the
     545                 :            :                  * front.
     546                 :            :                  */
     547         [ #  # ]:          0 :                 if (btrfs_item_offset_nr(leaf, slot) !=
     548                 :            :                         btrfs_item_end_nr(leaf, slot + 1)) {
     549                 :          0 :                         CORRUPT("slot offset bad", leaf, root, slot);
     550                 :            :                         return -EIO;
     551                 :            :                 }
     552                 :            : 
     553                 :            :                 /*
     554                 :            :                  * Check to make sure that we don't point outside of the leaf,
     555                 :            :                  * just incase all the items are consistent to eachother, but
     556                 :            :                  * all point outside of the leaf.
     557                 :            :                  */
     558         [ #  # ]:          0 :                 if (btrfs_item_end_nr(leaf, slot) >
     559                 :          0 :                     BTRFS_LEAF_DATA_SIZE(root)) {
     560                 :          0 :                         CORRUPT("slot end outside of leaf", leaf, root, slot);
     561                 :            :                         return -EIO;
     562                 :            :                 }
     563                 :            :         }
     564                 :            : 
     565                 :            :         return 0;
     566                 :            : }
     567                 :            : 
     568                 :          0 : static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
     569                 :            :                                       u64 phy_offset, struct page *page,
     570                 :            :                                       u64 start, u64 end, int mirror)
     571                 :            : {
     572                 :            :         struct extent_io_tree *tree;
     573                 :            :         u64 found_start;
     574                 :            :         int found_level;
     575                 :          0 :         struct extent_buffer *eb;
     576                 :          0 :         struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
     577                 :            :         int ret = 0;
     578                 :            :         int reads_done;
     579                 :            : 
     580         [ #  # ]:          0 :         if (!page->private)
     581                 :            :                 goto out;
     582                 :            : 
     583                 :            :         tree = &BTRFS_I(page->mapping->host)->io_tree;
     584                 :          0 :         eb = (struct extent_buffer *)page->private;
     585                 :            : 
     586                 :            :         /* the pending IO might have been the only thing that kept this buffer
     587                 :            :          * in memory.  Make sure we have a ref for all this other checks
     588                 :            :          */
     589                 :            :         extent_buffer_get(eb);
     590                 :            : 
     591                 :          0 :         reads_done = atomic_dec_and_test(&eb->io_pages);
     592         [ #  # ]:          0 :         if (!reads_done)
     593                 :            :                 goto err;
     594                 :            : 
     595                 :          0 :         eb->read_mirror = mirror;
     596         [ #  # ]:          0 :         if (test_bit(EXTENT_BUFFER_IOERR, &eb->bflags)) {
     597                 :            :                 ret = -EIO;
     598                 :            :                 goto err;
     599                 :            :         }
     600                 :            : 
     601                 :            :         found_start = btrfs_header_bytenr(eb);
     602         [ #  # ]:          0 :         if (found_start != eb->start) {
     603         [ #  # ]:          0 :                 printk_ratelimited(KERN_INFO "btrfs bad tree block start "
     604                 :            :                                "%llu %llu\n",
     605                 :            :                                found_start, eb->start);
     606                 :            :                 ret = -EIO;
     607                 :            :                 goto err;
     608                 :            :         }
     609         [ #  # ]:          0 :         if (check_tree_block_fsid(root, eb)) {
     610         [ #  # ]:          0 :                 printk_ratelimited(KERN_INFO "btrfs bad fsid on block %llu\n",
     611                 :            :                                eb->start);
     612                 :            :                 ret = -EIO;
     613                 :            :                 goto err;
     614                 :            :         }
     615                 :          0 :         found_level = btrfs_header_level(eb);
     616         [ #  # ]:          0 :         if (found_level >= BTRFS_MAX_LEVEL) {
     617                 :          0 :                 btrfs_info(root->fs_info, "bad tree block level %d\n",
     618                 :            :                            (int)btrfs_header_level(eb));
     619                 :            :                 ret = -EIO;
     620                 :          0 :                 goto err;
     621                 :            :         }
     622                 :            : 
     623                 :            :         btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb),
     624                 :            :                                        eb, found_level);
     625                 :            : 
     626                 :          0 :         ret = csum_tree_block(root, eb, 1);
     627         [ #  # ]:          0 :         if (ret) {
     628                 :            :                 ret = -EIO;
     629                 :            :                 goto err;
     630                 :            :         }
     631                 :            : 
     632                 :            :         /*
     633                 :            :          * If this is a leaf block and it is corrupt, set the corrupt bit so
     634                 :            :          * that we don't try and read the other copies of this block, just
     635                 :            :          * return -EIO.
     636                 :            :          */
     637 [ #  # ][ #  # ]:          0 :         if (found_level == 0 && check_leaf(root, eb)) {
     638                 :          0 :                 set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
     639                 :            :                 ret = -EIO;
     640                 :            :         }
     641                 :            : 
     642         [ #  # ]:          0 :         if (!ret)
     643                 :          0 :                 set_extent_buffer_uptodate(eb);
     644                 :            : err:
     645   [ #  #  #  # ]:          0 :         if (reads_done &&
     646                 :          0 :             test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
     647                 :          0 :                 btree_readahead_hook(root, eb, eb->start, ret);
     648                 :            : 
     649         [ #  # ]:          0 :         if (ret) {
     650                 :            :                 /*
     651                 :            :                  * our io error hook is going to dec the io pages
     652                 :            :                  * again, we have to make sure it has something
     653                 :            :                  * to decrement
     654                 :            :                  */
     655                 :            :                 atomic_inc(&eb->io_pages);
     656                 :          0 :                 clear_extent_buffer_uptodate(eb);
     657                 :            :         }
     658                 :          0 :         free_extent_buffer(eb);
     659                 :            : out:
     660                 :          0 :         return ret;
     661                 :            : }
     662                 :            : 
     663                 :          0 : static int btree_io_failed_hook(struct page *page, int failed_mirror)
     664                 :            : {
     665                 :            :         struct extent_buffer *eb;
     666                 :          0 :         struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
     667                 :            : 
     668                 :          0 :         eb = (struct extent_buffer *)page->private;
     669                 :          0 :         set_bit(EXTENT_BUFFER_IOERR, &eb->bflags);
     670                 :          0 :         eb->read_mirror = failed_mirror;
     671                 :          0 :         atomic_dec(&eb->io_pages);
     672         [ #  # ]:          0 :         if (test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
     673                 :          0 :                 btree_readahead_hook(root, eb, eb->start, -EIO);
     674                 :          0 :         return -EIO;    /* we fixed nothing */
     675                 :            : }
     676                 :            : 
     677                 :          0 : static void end_workqueue_bio(struct bio *bio, int err)
     678                 :            : {
     679                 :          0 :         struct end_io_wq *end_io_wq = bio->bi_private;
     680                 :            :         struct btrfs_fs_info *fs_info;
     681                 :            : 
     682                 :          0 :         fs_info = end_io_wq->info;
     683                 :          0 :         end_io_wq->error = err;
     684                 :          0 :         end_io_wq->work.func = end_workqueue_fn;
     685                 :          0 :         end_io_wq->work.flags = 0;
     686                 :            : 
     687         [ #  # ]:          0 :         if (bio->bi_rw & REQ_WRITE) {
     688         [ #  # ]:          0 :                 if (end_io_wq->metadata == BTRFS_WQ_ENDIO_METADATA)
     689                 :          0 :                         btrfs_queue_worker(&fs_info->endio_meta_write_workers,
     690                 :            :                                            &end_io_wq->work);
     691         [ #  # ]:          0 :                 else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_FREE_SPACE)
     692                 :          0 :                         btrfs_queue_worker(&fs_info->endio_freespace_worker,
     693                 :            :                                            &end_io_wq->work);
     694         [ #  # ]:          0 :                 else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56)
     695                 :          0 :                         btrfs_queue_worker(&fs_info->endio_raid56_workers,
     696                 :            :                                            &end_io_wq->work);
     697                 :            :                 else
     698                 :          0 :                         btrfs_queue_worker(&fs_info->endio_write_workers,
     699                 :            :                                            &end_io_wq->work);
     700                 :            :         } else {
     701         [ #  # ]:          0 :                 if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56)
     702                 :          0 :                         btrfs_queue_worker(&fs_info->endio_raid56_workers,
     703                 :            :                                            &end_io_wq->work);
     704         [ #  # ]:          0 :                 else if (end_io_wq->metadata)
     705                 :          0 :                         btrfs_queue_worker(&fs_info->endio_meta_workers,
     706                 :            :                                            &end_io_wq->work);
     707                 :            :                 else
     708                 :          0 :                         btrfs_queue_worker(&fs_info->endio_workers,
     709                 :            :                                            &end_io_wq->work);
     710                 :            :         }
     711                 :          0 : }
     712                 :            : 
     713                 :            : /*
     714                 :            :  * For the metadata arg you want
     715                 :            :  *
     716                 :            :  * 0 - if data
     717                 :            :  * 1 - if normal metadta
     718                 :            :  * 2 - if writing to the free space cache area
     719                 :            :  * 3 - raid parity work
     720                 :            :  */
     721                 :          0 : int btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio,
     722                 :            :                         int metadata)
     723                 :            : {
     724                 :            :         struct end_io_wq *end_io_wq;
     725                 :            :         end_io_wq = kmalloc(sizeof(*end_io_wq), GFP_NOFS);
     726         [ #  # ]:          0 :         if (!end_io_wq)
     727                 :            :                 return -ENOMEM;
     728                 :            : 
     729                 :          0 :         end_io_wq->private = bio->bi_private;
     730                 :          0 :         end_io_wq->end_io = bio->bi_end_io;
     731                 :          0 :         end_io_wq->info = info;
     732                 :          0 :         end_io_wq->error = 0;
     733                 :          0 :         end_io_wq->bio = bio;
     734                 :          0 :         end_io_wq->metadata = metadata;
     735                 :            : 
     736                 :          0 :         bio->bi_private = end_io_wq;
     737                 :          0 :         bio->bi_end_io = end_workqueue_bio;
     738                 :          0 :         return 0;
     739                 :            : }
     740                 :            : 
     741                 :          0 : unsigned long btrfs_async_submit_limit(struct btrfs_fs_info *info)
     742                 :            : {
     743                 :          0 :         unsigned long limit = min_t(unsigned long,
     744                 :            :                                     info->workers.max_workers,
     745                 :            :                                     info->fs_devices->open_devices);
     746                 :          0 :         return 256 * limit;
     747                 :            : }
     748                 :            : 
     749                 :          0 : static void run_one_async_start(struct btrfs_work *work)
     750                 :            : {
     751                 :            :         struct async_submit_bio *async;
     752                 :            :         int ret;
     753                 :            : 
     754                 :            :         async = container_of(work, struct  async_submit_bio, work);
     755                 :          0 :         ret = async->submit_bio_start(async->inode, async->rw, async->bio,
     756                 :            :                                       async->mirror_num, async->bio_flags,
     757                 :            :                                       async->bio_offset);
     758         [ #  # ]:          0 :         if (ret)
     759                 :          0 :                 async->error = ret;
     760                 :          0 : }
     761                 :            : 
     762                 :          0 : static void run_one_async_done(struct btrfs_work *work)
     763                 :            : {
     764                 :            :         struct btrfs_fs_info *fs_info;
     765                 :            :         struct async_submit_bio *async;
     766                 :            :         int limit;
     767                 :            : 
     768                 :            :         async = container_of(work, struct  async_submit_bio, work);
     769                 :          0 :         fs_info = BTRFS_I(async->inode)->root->fs_info;
     770                 :            : 
     771                 :          0 :         limit = btrfs_async_submit_limit(fs_info);
     772                 :          0 :         limit = limit * 2 / 3;
     773                 :            : 
     774 [ #  # ][ #  # ]:          0 :         if (atomic_dec_return(&fs_info->nr_async_submits) < limit &&
     775                 :            :             waitqueue_active(&fs_info->async_submit_wait))
     776                 :          0 :                 wake_up(&fs_info->async_submit_wait);
     777                 :            : 
     778                 :            :         /* If an error occured we just want to clean up the bio and move on */
     779         [ #  # ]:          0 :         if (async->error) {
     780                 :          0 :                 bio_endio(async->bio, async->error);
     781                 :          0 :                 return;
     782                 :            :         }
     783                 :            : 
     784                 :          0 :         async->submit_bio_done(async->inode, async->rw, async->bio,
     785                 :            :                                async->mirror_num, async->bio_flags,
     786                 :            :                                async->bio_offset);
     787                 :            : }
     788                 :            : 
     789                 :          0 : static void run_one_async_free(struct btrfs_work *work)
     790                 :            : {
     791                 :            :         struct async_submit_bio *async;
     792                 :            : 
     793                 :          0 :         async = container_of(work, struct  async_submit_bio, work);
     794                 :          0 :         kfree(async);
     795                 :          0 : }
     796                 :            : 
     797                 :          0 : int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
     798                 :            :                         int rw, struct bio *bio, int mirror_num,
     799                 :            :                         unsigned long bio_flags,
     800                 :            :                         u64 bio_offset,
     801                 :            :                         extent_submit_bio_hook_t *submit_bio_start,
     802                 :            :                         extent_submit_bio_hook_t *submit_bio_done)
     803                 :            : {
     804                 :            :         struct async_submit_bio *async;
     805                 :            : 
     806                 :            :         async = kmalloc(sizeof(*async), GFP_NOFS);
     807         [ #  # ]:          0 :         if (!async)
     808                 :            :                 return -ENOMEM;
     809                 :            : 
     810                 :          0 :         async->inode = inode;
     811                 :          0 :         async->rw = rw;
     812                 :          0 :         async->bio = bio;
     813                 :          0 :         async->mirror_num = mirror_num;
     814                 :          0 :         async->submit_bio_start = submit_bio_start;
     815                 :          0 :         async->submit_bio_done = submit_bio_done;
     816                 :            : 
     817                 :          0 :         async->work.func = run_one_async_start;
     818                 :          0 :         async->work.ordered_func = run_one_async_done;
     819                 :          0 :         async->work.ordered_free = run_one_async_free;
     820                 :            : 
     821                 :          0 :         async->work.flags = 0;
     822                 :          0 :         async->bio_flags = bio_flags;
     823                 :          0 :         async->bio_offset = bio_offset;
     824                 :            : 
     825                 :          0 :         async->error = 0;
     826                 :            : 
     827                 :          0 :         atomic_inc(&fs_info->nr_async_submits);
     828                 :            : 
     829         [ #  # ]:          0 :         if (rw & REQ_SYNC)
     830                 :          0 :                 btrfs_set_work_high_prio(&async->work);
     831                 :            : 
     832                 :          0 :         btrfs_queue_worker(&fs_info->workers, &async->work);
     833                 :            : 
     834 [ #  # ][ #  # ]:          0 :         while (atomic_read(&fs_info->async_submit_draining) &&
     835                 :          0 :               atomic_read(&fs_info->nr_async_submits)) {
     836 [ #  # ][ #  # ]:          0 :                 wait_event(fs_info->async_submit_wait,
     837                 :            :                            (atomic_read(&fs_info->nr_async_submits) == 0));
     838                 :            :         }
     839                 :            : 
     840                 :            :         return 0;
     841                 :            : }
     842                 :            : 
     843                 :          0 : static int btree_csum_one_bio(struct bio *bio)
     844                 :            : {
     845                 :          0 :         struct bio_vec *bvec = bio->bi_io_vec;
     846                 :            :         int bio_index = 0;
     847                 :            :         struct btrfs_root *root;
     848                 :            :         int ret = 0;
     849                 :            : 
     850         [ #  # ]:          0 :         WARN_ON(bio->bi_vcnt <= 0);
     851         [ #  # ]:          0 :         while (bio_index < bio->bi_vcnt) {
     852                 :          0 :                 root = BTRFS_I(bvec->bv_page->mapping->host)->root;
     853                 :          0 :                 ret = csum_dirty_buffer(root, bvec->bv_page);
     854         [ #  # ]:          0 :                 if (ret)
     855                 :            :                         break;
     856                 :          0 :                 bio_index++;
     857                 :          0 :                 bvec++;
     858                 :            :         }
     859                 :          0 :         return ret;
     860                 :            : }
     861                 :            : 
     862                 :          0 : static int __btree_submit_bio_start(struct inode *inode, int rw,
     863                 :          0 :                                     struct bio *bio, int mirror_num,
     864                 :            :                                     unsigned long bio_flags,
     865                 :            :                                     u64 bio_offset)
     866                 :            : {
     867                 :            :         /*
     868                 :            :          * when we're called for a write, we're already in the async
     869                 :            :          * submission context.  Just jump into btrfs_map_bio
     870                 :            :          */
     871                 :          0 :         return btree_csum_one_bio(bio);
     872                 :            : }
     873                 :            : 
     874                 :          0 : static int __btree_submit_bio_done(struct inode *inode, int rw, struct bio *bio,
     875                 :            :                                  int mirror_num, unsigned long bio_flags,
     876                 :            :                                  u64 bio_offset)
     877                 :            : {
     878                 :            :         int ret;
     879                 :            : 
     880                 :            :         /*
     881                 :            :          * when we're called for a write, we're already in the async
     882                 :            :          * submission context.  Just jump into btrfs_map_bio
     883                 :            :          */
     884                 :          0 :         ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, mirror_num, 1);
     885         [ #  # ]:          0 :         if (ret)
     886                 :          0 :                 bio_endio(bio, ret);
     887                 :          0 :         return ret;
     888                 :            : }
     889                 :            : 
     890                 :            : static int check_async_write(struct inode *inode, unsigned long bio_flags)
     891                 :            : {
     892         [ #  # ]:          0 :         if (bio_flags & EXTENT_BIO_TREE_LOG)
     893                 :            :                 return 0;
     894                 :            : #ifdef CONFIG_X86
     895                 :            :         if (cpu_has_xmm4_2)
     896                 :            :                 return 0;
     897                 :            : #endif
     898                 :            :         return 1;
     899                 :            : }
     900                 :            : 
     901                 :          0 : static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
     902                 :            :                                  int mirror_num, unsigned long bio_flags,
     903                 :            :                                  u64 bio_offset)
     904                 :            : {
     905                 :            :         int async = check_async_write(inode, bio_flags);
     906                 :            :         int ret;
     907                 :            : 
     908         [ #  # ]:          0 :         if (!(rw & REQ_WRITE)) {
     909                 :            :                 /*
     910                 :            :                  * called for a read, do the setup so that checksum validation
     911                 :            :                  * can happen in the async kernel threads
     912                 :            :                  */
     913                 :          0 :                 ret = btrfs_bio_wq_end_io(BTRFS_I(inode)->root->fs_info,
     914                 :            :                                           bio, 1);
     915         [ #  # ]:          0 :                 if (ret)
     916                 :            :                         goto out_w_error;
     917                 :          0 :                 ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio,
     918                 :            :                                     mirror_num, 0);
     919         [ #  # ]:          0 :         } else if (!async) {
     920                 :          0 :                 ret = btree_csum_one_bio(bio);
     921         [ #  # ]:          0 :                 if (ret)
     922                 :            :                         goto out_w_error;
     923                 :          0 :                 ret = btrfs_map_bio(BTRFS_I(inode)->root, rw, bio,
     924                 :            :                                     mirror_num, 0);
     925                 :            :         } else {
     926                 :            :                 /*
     927                 :            :                  * kthread helpers are used to submit writes so that
     928                 :            :                  * checksumming can happen in parallel across all CPUs
     929                 :            :                  */
     930                 :          0 :                 ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
     931                 :            :                                           inode, rw, bio, mirror_num, 0,
     932                 :            :                                           bio_offset,
     933                 :            :                                           __btree_submit_bio_start,
     934                 :            :                                           __btree_submit_bio_done);
     935                 :            :         }
     936                 :            : 
     937         [ #  # ]:          0 :         if (ret) {
     938                 :            : out_w_error:
     939                 :          0 :                 bio_endio(bio, ret);
     940                 :            :         }
     941                 :          0 :         return ret;
     942                 :            : }
     943                 :            : 
     944                 :            : #ifdef CONFIG_MIGRATION
     945                 :          0 : static int btree_migratepage(struct address_space *mapping,
     946                 :          0 :                         struct page *newpage, struct page *page,
     947                 :            :                         enum migrate_mode mode)
     948                 :            : {
     949                 :            :         /*
     950                 :            :          * we can't safely write a btree page from here,
     951                 :            :          * we haven't done the locking hook
     952                 :            :          */
     953         [ #  # ]:          0 :         if (PageDirty(page))
     954                 :            :                 return -EAGAIN;
     955                 :            :         /*
     956                 :            :          * Buffers may be managed in a filesystem specific way.
     957                 :            :          * We must have no buffers or drop them.
     958                 :            :          */
     959   [ #  #  #  # ]:          0 :         if (page_has_private(page) &&
     960                 :          0 :             !try_to_release_page(page, GFP_KERNEL))
     961                 :            :                 return -EAGAIN;
     962                 :          0 :         return migrate_page(mapping, newpage, page, mode);
     963                 :            : }
     964                 :            : #endif
     965                 :            : 
     966                 :            : 
     967                 :          0 : static int btree_writepages(struct address_space *mapping,
     968                 :            :                             struct writeback_control *wbc)
     969                 :            : {
     970                 :            :         struct extent_io_tree *tree;
     971                 :            :         struct btrfs_fs_info *fs_info;
     972                 :            :         int ret;
     973                 :            : 
     974                 :            :         tree = &BTRFS_I(mapping->host)->io_tree;
     975         [ #  # ]:          0 :         if (wbc->sync_mode == WB_SYNC_NONE) {
     976                 :            : 
     977         [ #  # ]:          0 :                 if (wbc->for_kupdate)
     978                 :            :                         return 0;
     979                 :            : 
     980                 :          0 :                 fs_info = BTRFS_I(mapping->host)->root->fs_info;
     981                 :            :                 /* this is a bit racy, but that's ok */
     982                 :          0 :                 ret = percpu_counter_compare(&fs_info->dirty_metadata_bytes,
     983                 :            :                                              BTRFS_DIRTY_METADATA_THRESH);
     984         [ #  # ]:          0 :                 if (ret < 0)
     985                 :            :                         return 0;
     986                 :            :         }
     987                 :          0 :         return btree_write_cache_pages(mapping, wbc);
     988                 :            : }
     989                 :            : 
     990                 :          0 : static int btree_readpage(struct file *file, struct page *page)
     991                 :            : {
     992                 :            :         struct extent_io_tree *tree;
     993                 :          0 :         tree = &BTRFS_I(page->mapping->host)->io_tree;
     994                 :          0 :         return extent_read_full_page(tree, page, btree_get_extent, 0);
     995                 :            : }
     996                 :            : 
     997                 :          0 : static int btree_releasepage(struct page *page, gfp_t gfp_flags)
     998                 :            : {
     999 [ #  # ][ #  # ]:          0 :         if (PageWriteback(page) || PageDirty(page))
    1000                 :            :                 return 0;
    1001                 :            : 
    1002                 :          0 :         return try_release_extent_buffer(page);
    1003                 :            : }
    1004                 :            : 
    1005                 :          0 : static void btree_invalidatepage(struct page *page, unsigned int offset,
    1006                 :            :                                  unsigned int length)
    1007                 :            : {
    1008                 :            :         struct extent_io_tree *tree;
    1009                 :          0 :         tree = &BTRFS_I(page->mapping->host)->io_tree;
    1010                 :          0 :         extent_invalidatepage(tree, page, offset);
    1011                 :          0 :         btree_releasepage(page, GFP_NOFS);
    1012         [ #  # ]:          0 :         if (PagePrivate(page)) {
    1013                 :          0 :                 printk(KERN_WARNING "btrfs warning page private not zero "
    1014                 :            :                        "on page %llu\n", (unsigned long long)page_offset(page));
    1015                 :            :                 ClearPagePrivate(page);
    1016                 :          0 :                 set_page_private(page, 0);
    1017                 :          0 :                 page_cache_release(page);
    1018                 :            :         }
    1019                 :          0 : }
    1020                 :            : 
    1021                 :          0 : static int btree_set_page_dirty(struct page *page)
    1022                 :            : {
    1023                 :            : #ifdef DEBUG
    1024                 :            :         struct extent_buffer *eb;
    1025                 :            : 
    1026                 :            :         BUG_ON(!PagePrivate(page));
    1027                 :            :         eb = (struct extent_buffer *)page->private;
    1028                 :            :         BUG_ON(!eb);
    1029                 :            :         BUG_ON(!test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags));
    1030                 :            :         BUG_ON(!atomic_read(&eb->refs));
    1031                 :            :         btrfs_assert_tree_locked(eb);
    1032                 :            : #endif
    1033                 :          0 :         return __set_page_dirty_nobuffers(page);
    1034                 :            : }
    1035                 :            : 
    1036                 :            : static const struct address_space_operations btree_aops = {
    1037                 :            :         .readpage       = btree_readpage,
    1038                 :            :         .writepages     = btree_writepages,
    1039                 :            :         .releasepage    = btree_releasepage,
    1040                 :            :         .invalidatepage = btree_invalidatepage,
    1041                 :            : #ifdef CONFIG_MIGRATION
    1042                 :            :         .migratepage    = btree_migratepage,
    1043                 :            : #endif
    1044                 :            :         .set_page_dirty = btree_set_page_dirty,
    1045                 :            : };
    1046                 :            : 
    1047                 :          0 : int readahead_tree_block(struct btrfs_root *root, u64 bytenr, u32 blocksize,
    1048                 :            :                          u64 parent_transid)
    1049                 :            : {
    1050                 :            :         struct extent_buffer *buf = NULL;
    1051                 :          0 :         struct inode *btree_inode = root->fs_info->btree_inode;
    1052                 :            :         int ret = 0;
    1053                 :            : 
    1054                 :            :         buf = btrfs_find_create_tree_block(root, bytenr, blocksize);
    1055         [ #  # ]:          0 :         if (!buf)
    1056                 :            :                 return 0;
    1057                 :          0 :         read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree,
    1058                 :            :                                  buf, 0, WAIT_NONE, btree_get_extent, 0);
    1059                 :          0 :         free_extent_buffer(buf);
    1060                 :          0 :         return ret;
    1061                 :            : }
    1062                 :            : 
    1063                 :          0 : int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr, u32 blocksize,
    1064                 :            :                          int mirror_num, struct extent_buffer **eb)
    1065                 :            : {
    1066                 :            :         struct extent_buffer *buf = NULL;
    1067                 :          0 :         struct inode *btree_inode = root->fs_info->btree_inode;
    1068                 :          0 :         struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
    1069                 :            :         int ret;
    1070                 :            : 
    1071                 :            :         buf = btrfs_find_create_tree_block(root, bytenr, blocksize);
    1072         [ #  # ]:          0 :         if (!buf)
    1073                 :            :                 return 0;
    1074                 :            : 
    1075                 :          0 :         set_bit(EXTENT_BUFFER_READAHEAD, &buf->bflags);
    1076                 :            : 
    1077                 :          0 :         ret = read_extent_buffer_pages(io_tree, buf, 0, WAIT_PAGE_LOCK,
    1078                 :            :                                        btree_get_extent, mirror_num);
    1079         [ #  # ]:          0 :         if (ret) {
    1080                 :          0 :                 free_extent_buffer(buf);
    1081                 :          0 :                 return ret;
    1082                 :            :         }
    1083                 :            : 
    1084         [ #  # ]:          0 :         if (test_bit(EXTENT_BUFFER_CORRUPT, &buf->bflags)) {
    1085                 :          0 :                 free_extent_buffer(buf);
    1086                 :          0 :                 return -EIO;
    1087         [ #  # ]:          0 :         } else if (extent_buffer_uptodate(buf)) {
    1088                 :          0 :                 *eb = buf;
    1089                 :            :         } else {
    1090                 :          0 :                 free_extent_buffer(buf);
    1091                 :            :         }
    1092                 :            :         return 0;
    1093                 :            : }
    1094                 :            : 
    1095                 :          0 : struct extent_buffer *btrfs_find_tree_block(struct btrfs_root *root,
    1096                 :            :                                             u64 bytenr, u32 blocksize)
    1097                 :            : {
    1098                 :          0 :         struct inode *btree_inode = root->fs_info->btree_inode;
    1099                 :            :         struct extent_buffer *eb;
    1100                 :          0 :         eb = find_extent_buffer(&BTRFS_I(btree_inode)->io_tree, bytenr);
    1101                 :          0 :         return eb;
    1102                 :            : }
    1103                 :            : 
    1104                 :          0 : struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
    1105                 :            :                                                  u64 bytenr, u32 blocksize)
    1106                 :            : {
    1107                 :          0 :         struct inode *btree_inode = root->fs_info->btree_inode;
    1108                 :            :         struct extent_buffer *eb;
    1109                 :            : 
    1110                 :          0 :         eb = alloc_extent_buffer(&BTRFS_I(btree_inode)->io_tree,
    1111                 :            :                                  bytenr, blocksize);
    1112                 :          0 :         return eb;
    1113                 :            : }
    1114                 :            : 
    1115                 :            : 
    1116                 :          0 : int btrfs_write_tree_block(struct extent_buffer *buf)
    1117                 :            : {
    1118                 :          0 :         return filemap_fdatawrite_range(buf->pages[0]->mapping, buf->start,
    1119                 :          0 :                                         buf->start + buf->len - 1);
    1120                 :            : }
    1121                 :            : 
    1122                 :          0 : int btrfs_wait_tree_block_writeback(struct extent_buffer *buf)
    1123                 :            : {
    1124                 :          0 :         return filemap_fdatawait_range(buf->pages[0]->mapping,
    1125                 :          0 :                                        buf->start, buf->start + buf->len - 1);
    1126                 :            : }
    1127                 :            : 
    1128                 :          0 : struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
    1129                 :            :                                       u32 blocksize, u64 parent_transid)
    1130                 :            : {
    1131                 :            :         struct extent_buffer *buf = NULL;
    1132                 :            :         int ret;
    1133                 :            : 
    1134                 :            :         buf = btrfs_find_create_tree_block(root, bytenr, blocksize);
    1135         [ #  # ]:          0 :         if (!buf)
    1136                 :            :                 return NULL;
    1137                 :            : 
    1138                 :          0 :         ret = btree_read_extent_buffer_pages(root, buf, 0, parent_transid);
    1139         [ #  # ]:          0 :         if (ret) {
    1140                 :          0 :                 free_extent_buffer(buf);
    1141                 :          0 :                 return NULL;
    1142                 :            :         }
    1143                 :            :         return buf;
    1144                 :            : 
    1145                 :            : }
    1146                 :            : 
    1147                 :          0 : void clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
    1148                 :          0 :                       struct extent_buffer *buf)
    1149                 :            : {
    1150                 :          0 :         struct btrfs_fs_info *fs_info = root->fs_info;
    1151                 :            : 
    1152         [ #  # ]:          0 :         if (btrfs_header_generation(buf) ==
    1153                 :          0 :             fs_info->running_transaction->transid) {
    1154                 :          0 :                 btrfs_assert_tree_locked(buf);
    1155                 :            : 
    1156         [ #  # ]:          0 :                 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &buf->bflags)) {
    1157                 :          0 :                         __percpu_counter_add(&fs_info->dirty_metadata_bytes,
    1158                 :          0 :                                              -buf->len,
    1159                 :            :                                              fs_info->dirty_metadata_batch);
    1160                 :            :                         /* ugh, clear_extent_buffer_dirty needs to lock the page */
    1161                 :            :                         btrfs_set_lock_blocking(buf);
    1162                 :          0 :                         clear_extent_buffer_dirty(buf);
    1163                 :            :                 }
    1164                 :            :         }
    1165                 :          0 : }
    1166                 :            : 
    1167                 :          0 : static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,
    1168                 :            :                          u32 stripesize, struct btrfs_root *root,
    1169                 :            :                          struct btrfs_fs_info *fs_info,
    1170                 :            :                          u64 objectid)
    1171                 :            : {
    1172                 :          0 :         root->node = NULL;
    1173                 :          0 :         root->commit_root = NULL;
    1174                 :          0 :         root->sectorsize = sectorsize;
    1175                 :          0 :         root->nodesize = nodesize;
    1176                 :          0 :         root->leafsize = leafsize;
    1177                 :          0 :         root->stripesize = stripesize;
    1178                 :          0 :         root->ref_cows = 0;
    1179                 :          0 :         root->track_dirty = 0;
    1180                 :          0 :         root->in_radix = 0;
    1181                 :          0 :         root->orphan_item_inserted = 0;
    1182                 :          0 :         root->orphan_cleanup_state = 0;
    1183                 :            : 
    1184                 :          0 :         root->objectid = objectid;
    1185                 :          0 :         root->last_trans = 0;
    1186                 :          0 :         root->highest_objectid = 0;
    1187                 :          0 :         root->nr_delalloc_inodes = 0;
    1188                 :          0 :         root->nr_ordered_extents = 0;
    1189                 :          0 :         root->name = NULL;
    1190                 :          0 :         root->inode_tree = RB_ROOT;
    1191                 :          0 :         INIT_RADIX_TREE(&root->delayed_nodes_tree, GFP_ATOMIC);
    1192                 :          0 :         root->block_rsv = NULL;
    1193                 :          0 :         root->orphan_block_rsv = NULL;
    1194                 :            : 
    1195                 :          0 :         INIT_LIST_HEAD(&root->dirty_list);
    1196                 :          0 :         INIT_LIST_HEAD(&root->root_list);
    1197                 :          0 :         INIT_LIST_HEAD(&root->delalloc_inodes);
    1198                 :          0 :         INIT_LIST_HEAD(&root->delalloc_root);
    1199                 :          0 :         INIT_LIST_HEAD(&root->ordered_extents);
    1200                 :          0 :         INIT_LIST_HEAD(&root->ordered_root);
    1201                 :          0 :         INIT_LIST_HEAD(&root->logged_list[0]);
    1202                 :          0 :         INIT_LIST_HEAD(&root->logged_list[1]);
    1203                 :          0 :         spin_lock_init(&root->orphan_lock);
    1204                 :          0 :         spin_lock_init(&root->inode_lock);
    1205                 :          0 :         spin_lock_init(&root->delalloc_lock);
    1206                 :          0 :         spin_lock_init(&root->ordered_extent_lock);
    1207                 :          0 :         spin_lock_init(&root->accounting_lock);
    1208                 :          0 :         spin_lock_init(&root->log_extents_lock[0]);
    1209                 :          0 :         spin_lock_init(&root->log_extents_lock[1]);
    1210                 :          0 :         mutex_init(&root->objectid_mutex);
    1211                 :          0 :         mutex_init(&root->log_mutex);
    1212                 :          0 :         init_waitqueue_head(&root->log_writer_wait);
    1213                 :          0 :         init_waitqueue_head(&root->log_commit_wait[0]);
    1214                 :          0 :         init_waitqueue_head(&root->log_commit_wait[1]);
    1215                 :          0 :         atomic_set(&root->log_commit[0], 0);
    1216                 :          0 :         atomic_set(&root->log_commit[1], 0);
    1217                 :          0 :         atomic_set(&root->log_writers, 0);
    1218                 :          0 :         atomic_set(&root->log_batch, 0);
    1219                 :          0 :         atomic_set(&root->orphan_inodes, 0);
    1220                 :          0 :         atomic_set(&root->refs, 1);
    1221                 :          0 :         root->log_transid = 0;
    1222                 :          0 :         root->last_log_commit = 0;
    1223         [ #  # ]:          0 :         if (fs_info)
    1224                 :          0 :                 extent_io_tree_init(&root->dirty_log_pages,
    1225                 :          0 :                                      fs_info->btree_inode->i_mapping);
    1226                 :            : 
    1227                 :          0 :         memset(&root->root_key, 0, sizeof(root->root_key));
    1228                 :          0 :         memset(&root->root_item, 0, sizeof(root->root_item));
    1229                 :          0 :         memset(&root->defrag_progress, 0, sizeof(root->defrag_progress));
    1230                 :          0 :         memset(&root->root_kobj, 0, sizeof(root->root_kobj));
    1231         [ #  # ]:          0 :         if (fs_info)
    1232                 :          0 :                 root->defrag_trans_start = fs_info->generation;
    1233                 :            :         else
    1234                 :          0 :                 root->defrag_trans_start = 0;
    1235                 :            :         init_completion(&root->kobj_unregister);
    1236                 :          0 :         root->defrag_running = 0;
    1237                 :          0 :         root->root_key.objectid = objectid;
    1238                 :          0 :         root->anon_dev = 0;
    1239                 :            : 
    1240                 :          0 :         spin_lock_init(&root->root_item_lock);
    1241                 :          0 : }
    1242                 :            : 
    1243                 :          0 : static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info)
    1244                 :            : {
    1245                 :            :         struct btrfs_root *root = kzalloc(sizeof(*root), GFP_NOFS);
    1246         [ #  # ]:          0 :         if (root)
    1247                 :          0 :                 root->fs_info = fs_info;
    1248                 :          0 :         return root;
    1249                 :            : }
    1250                 :            : 
    1251                 :            : #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
    1252                 :            : /* Should only be used by the testing infrastructure */
    1253                 :            : struct btrfs_root *btrfs_alloc_dummy_root(void)
    1254                 :            : {
    1255                 :            :         struct btrfs_root *root;
    1256                 :            : 
    1257                 :            :         root = btrfs_alloc_root(NULL);
    1258                 :            :         if (!root)
    1259                 :            :                 return ERR_PTR(-ENOMEM);
    1260                 :            :         __setup_root(4096, 4096, 4096, 4096, root, NULL, 1);
    1261                 :            :         root->dummy_root = 1;
    1262                 :            : 
    1263                 :            :         return root;
    1264                 :            : }
    1265                 :            : #endif
    1266                 :            : 
    1267                 :          0 : struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans,
    1268                 :            :                                      struct btrfs_fs_info *fs_info,
    1269                 :            :                                      u64 objectid)
    1270                 :            : {
    1271                 :          0 :         struct extent_buffer *leaf;
    1272                 :          0 :         struct btrfs_root *tree_root = fs_info->tree_root;
    1273                 :            :         struct btrfs_root *root;
    1274                 :            :         struct btrfs_key key;
    1275                 :            :         int ret = 0;
    1276                 :            :         u64 bytenr;
    1277                 :            :         uuid_le uuid;
    1278                 :            : 
    1279                 :          0 :         root = btrfs_alloc_root(fs_info);
    1280         [ #  # ]:          0 :         if (!root)
    1281                 :            :                 return ERR_PTR(-ENOMEM);
    1282                 :            : 
    1283                 :          0 :         __setup_root(tree_root->nodesize, tree_root->leafsize,
    1284                 :            :                      tree_root->sectorsize, tree_root->stripesize,
    1285                 :            :                      root, fs_info, objectid);
    1286                 :          0 :         root->root_key.objectid = objectid;
    1287                 :          0 :         root->root_key.type = BTRFS_ROOT_ITEM_KEY;
    1288                 :          0 :         root->root_key.offset = 0;
    1289                 :            : 
    1290                 :          0 :         leaf = btrfs_alloc_free_block(trans, root, root->leafsize,
    1291                 :            :                                       0, objectid, NULL, 0, 0, 0);
    1292         [ #  # ]:          0 :         if (IS_ERR(leaf)) {
    1293                 :            :                 ret = PTR_ERR(leaf);
    1294                 :            :                 leaf = NULL;
    1295                 :          0 :                 goto fail;
    1296                 :            :         }
    1297                 :            : 
    1298                 :            :         bytenr = leaf->start;
    1299                 :          0 :         memset_extent_buffer(leaf, 0, 0, sizeof(struct btrfs_header));
    1300                 :          0 :         btrfs_set_header_bytenr(leaf, leaf->start);
    1301                 :          0 :         btrfs_set_header_generation(leaf, trans->transid);
    1302                 :            :         btrfs_set_header_backref_rev(leaf, BTRFS_MIXED_BACKREF_REV);
    1303                 :            :         btrfs_set_header_owner(leaf, objectid);
    1304                 :          0 :         root->node = leaf;
    1305                 :            : 
    1306                 :          0 :         write_extent_buffer(leaf, fs_info->fsid, btrfs_header_fsid(),
    1307                 :            :                             BTRFS_FSID_SIZE);
    1308                 :          0 :         write_extent_buffer(leaf, fs_info->chunk_tree_uuid,
    1309                 :            :                             btrfs_header_chunk_tree_uuid(leaf),
    1310                 :            :                             BTRFS_UUID_SIZE);
    1311                 :          0 :         btrfs_mark_buffer_dirty(leaf);
    1312                 :            : 
    1313                 :          0 :         root->commit_root = btrfs_root_node(root);
    1314                 :          0 :         root->track_dirty = 1;
    1315                 :            : 
    1316                 :            : 
    1317                 :          0 :         root->root_item.flags = 0;
    1318                 :          0 :         root->root_item.byte_limit = 0;
    1319                 :          0 :         btrfs_set_root_bytenr(&root->root_item, leaf->start);
    1320                 :          0 :         btrfs_set_root_generation(&root->root_item, trans->transid);
    1321                 :            :         btrfs_set_root_level(&root->root_item, 0);
    1322                 :            :         btrfs_set_root_refs(&root->root_item, 1);
    1323                 :          0 :         btrfs_set_root_used(&root->root_item, leaf->len);
    1324                 :            :         btrfs_set_root_last_snapshot(&root->root_item, 0);
    1325                 :            :         btrfs_set_root_dirid(&root->root_item, 0);
    1326                 :          0 :         uuid_le_gen(&uuid);
    1327                 :          0 :         memcpy(root->root_item.uuid, uuid.b, BTRFS_UUID_SIZE);
    1328                 :          0 :         root->root_item.drop_level = 0;
    1329                 :            : 
    1330                 :          0 :         key.objectid = objectid;
    1331                 :          0 :         key.type = BTRFS_ROOT_ITEM_KEY;
    1332                 :          0 :         key.offset = 0;
    1333                 :          0 :         ret = btrfs_insert_root(trans, tree_root, &key, &root->root_item);
    1334         [ #  # ]:          0 :         if (ret)
    1335                 :            :                 goto fail;
    1336                 :            : 
    1337                 :          0 :         btrfs_tree_unlock(leaf);
    1338                 :            : 
    1339                 :          0 :         return root;
    1340                 :            : 
    1341                 :            : fail:
    1342         [ #  # ]:          0 :         if (leaf) {
    1343                 :          0 :                 btrfs_tree_unlock(leaf);
    1344                 :          0 :                 free_extent_buffer(leaf);
    1345                 :            :         }
    1346                 :          0 :         kfree(root);
    1347                 :            : 
    1348                 :          0 :         return ERR_PTR(ret);
    1349                 :            : }
    1350                 :            : 
    1351                 :          0 : static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans,
    1352                 :            :                                          struct btrfs_fs_info *fs_info)
    1353                 :            : {
    1354                 :            :         struct btrfs_root *root;
    1355                 :          0 :         struct btrfs_root *tree_root = fs_info->tree_root;
    1356                 :          0 :         struct extent_buffer *leaf;
    1357                 :            : 
    1358                 :          0 :         root = btrfs_alloc_root(fs_info);
    1359         [ #  # ]:          0 :         if (!root)
    1360                 :            :                 return ERR_PTR(-ENOMEM);
    1361                 :            : 
    1362                 :          0 :         __setup_root(tree_root->nodesize, tree_root->leafsize,
    1363                 :            :                      tree_root->sectorsize, tree_root->stripesize,
    1364                 :            :                      root, fs_info, BTRFS_TREE_LOG_OBJECTID);
    1365                 :            : 
    1366                 :          0 :         root->root_key.objectid = BTRFS_TREE_LOG_OBJECTID;
    1367                 :          0 :         root->root_key.type = BTRFS_ROOT_ITEM_KEY;
    1368                 :          0 :         root->root_key.offset = BTRFS_TREE_LOG_OBJECTID;
    1369                 :            :         /*
    1370                 :            :          * log trees do not get reference counted because they go away
    1371                 :            :          * before a real commit is actually done.  They do store pointers
    1372                 :            :          * to file data extents, and those reference counts still get
    1373                 :            :          * updated (along with back refs to the log tree).
    1374                 :            :          */
    1375                 :          0 :         root->ref_cows = 0;
    1376                 :            : 
    1377                 :          0 :         leaf = btrfs_alloc_free_block(trans, root, root->leafsize, 0,
    1378                 :            :                                       BTRFS_TREE_LOG_OBJECTID, NULL,
    1379                 :            :                                       0, 0, 0);
    1380         [ #  # ]:          0 :         if (IS_ERR(leaf)) {
    1381                 :          0 :                 kfree(root);
    1382                 :          0 :                 return ERR_CAST(leaf);
    1383                 :            :         }
    1384                 :            : 
    1385                 :          0 :         memset_extent_buffer(leaf, 0, 0, sizeof(struct btrfs_header));
    1386                 :          0 :         btrfs_set_header_bytenr(leaf, leaf->start);
    1387                 :          0 :         btrfs_set_header_generation(leaf, trans->transid);
    1388                 :            :         btrfs_set_header_backref_rev(leaf, BTRFS_MIXED_BACKREF_REV);
    1389                 :            :         btrfs_set_header_owner(leaf, BTRFS_TREE_LOG_OBJECTID);
    1390                 :          0 :         root->node = leaf;
    1391                 :            : 
    1392                 :          0 :         write_extent_buffer(root->node, root->fs_info->fsid,
    1393                 :            :                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
    1394                 :          0 :         btrfs_mark_buffer_dirty(root->node);
    1395                 :          0 :         btrfs_tree_unlock(root->node);
    1396                 :          0 :         return root;
    1397                 :            : }
    1398                 :            : 
    1399                 :          0 : int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
    1400                 :            :                              struct btrfs_fs_info *fs_info)
    1401                 :            : {
    1402                 :            :         struct btrfs_root *log_root;
    1403                 :            : 
    1404                 :          0 :         log_root = alloc_log_tree(trans, fs_info);
    1405         [ #  # ]:          0 :         if (IS_ERR(log_root))
    1406                 :          0 :                 return PTR_ERR(log_root);
    1407         [ #  # ]:          0 :         WARN_ON(fs_info->log_root_tree);
    1408                 :          0 :         fs_info->log_root_tree = log_root;
    1409                 :          0 :         return 0;
    1410                 :            : }
    1411                 :            : 
    1412                 :          0 : int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
    1413                 :            :                        struct btrfs_root *root)
    1414                 :            : {
    1415                 :            :         struct btrfs_root *log_root;
    1416                 :            :         struct btrfs_inode_item *inode_item;
    1417                 :            : 
    1418                 :          0 :         log_root = alloc_log_tree(trans, root->fs_info);
    1419         [ #  # ]:          0 :         if (IS_ERR(log_root))
    1420                 :          0 :                 return PTR_ERR(log_root);
    1421                 :            : 
    1422                 :          0 :         log_root->last_trans = trans->transid;
    1423                 :          0 :         log_root->root_key.offset = root->root_key.objectid;
    1424                 :            : 
    1425                 :            :         inode_item = &log_root->root_item.inode;
    1426                 :            :         btrfs_set_stack_inode_generation(inode_item, 1);
    1427                 :            :         btrfs_set_stack_inode_size(inode_item, 3);
    1428                 :            :         btrfs_set_stack_inode_nlink(inode_item, 1);
    1429                 :          0 :         btrfs_set_stack_inode_nbytes(inode_item, root->leafsize);
    1430                 :            :         btrfs_set_stack_inode_mode(inode_item, S_IFDIR | 0755);
    1431                 :            : 
    1432                 :          0 :         btrfs_set_root_node(&log_root->root_item, log_root->node);
    1433                 :            : 
    1434         [ #  # ]:          0 :         WARN_ON(root->log_root);
    1435                 :          0 :         root->log_root = log_root;
    1436                 :          0 :         root->log_transid = 0;
    1437                 :          0 :         root->last_log_commit = 0;
    1438                 :          0 :         return 0;
    1439                 :            : }
    1440                 :            : 
    1441                 :          0 : static struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
    1442                 :            :                                                struct btrfs_key *key)
    1443                 :            : {
    1444                 :          0 :         struct btrfs_root *root;
    1445                 :          0 :         struct btrfs_fs_info *fs_info = tree_root->fs_info;
    1446                 :            :         struct btrfs_path *path;
    1447                 :            :         u64 generation;
    1448                 :            :         u32 blocksize;
    1449                 :            :         int ret;
    1450                 :            : 
    1451                 :          0 :         path = btrfs_alloc_path();
    1452         [ #  # ]:          0 :         if (!path)
    1453                 :            :                 return ERR_PTR(-ENOMEM);
    1454                 :            : 
    1455                 :          0 :         root = btrfs_alloc_root(fs_info);
    1456         [ #  # ]:          0 :         if (!root) {
    1457                 :            :                 ret = -ENOMEM;
    1458                 :            :                 goto alloc_fail;
    1459                 :            :         }
    1460                 :            : 
    1461                 :          0 :         __setup_root(tree_root->nodesize, tree_root->leafsize,
    1462                 :            :                      tree_root->sectorsize, tree_root->stripesize,
    1463                 :            :                      root, fs_info, key->objectid);
    1464                 :            : 
    1465                 :          0 :         ret = btrfs_find_root(tree_root, key, path,
    1466                 :            :                               &root->root_item, &root->root_key);
    1467         [ #  # ]:          0 :         if (ret) {
    1468         [ #  # ]:          0 :                 if (ret > 0)
    1469                 :            :                         ret = -ENOENT;
    1470                 :            :                 goto find_fail;
    1471                 :            :         }
    1472                 :            : 
    1473                 :            :         generation = btrfs_root_generation(&root->root_item);
    1474                 :            :         blocksize = btrfs_level_size(root, btrfs_root_level(&root->root_item));
    1475                 :          0 :         root->node = read_tree_block(root, btrfs_root_bytenr(&root->root_item),
    1476                 :            :                                      blocksize, generation);
    1477         [ #  # ]:          0 :         if (!root->node) {
    1478                 :            :                 ret = -ENOMEM;
    1479                 :            :                 goto find_fail;
    1480         [ #  # ]:          0 :         } else if (!btrfs_buffer_uptodate(root->node, generation, 0)) {
    1481                 :            :                 ret = -EIO;
    1482                 :            :                 goto read_fail;
    1483                 :            :         }
    1484                 :          0 :         root->commit_root = btrfs_root_node(root);
    1485                 :            : out:
    1486                 :          0 :         btrfs_free_path(path);
    1487                 :          0 :         return root;
    1488                 :            : 
    1489                 :            : read_fail:
    1490                 :          0 :         free_extent_buffer(root->node);
    1491                 :            : find_fail:
    1492                 :          0 :         kfree(root);
    1493                 :            : alloc_fail:
    1494                 :            :         root = ERR_PTR(ret);
    1495                 :          0 :         goto out;
    1496                 :            : }
    1497                 :            : 
    1498                 :          0 : struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root,
    1499                 :            :                                       struct btrfs_key *location)
    1500                 :            : {
    1501                 :            :         struct btrfs_root *root;
    1502                 :            : 
    1503                 :          0 :         root = btrfs_read_tree_root(tree_root, location);
    1504         [ #  # ]:          0 :         if (IS_ERR(root))
    1505                 :            :                 return root;
    1506                 :            : 
    1507         [ #  # ]:          0 :         if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
    1508                 :          0 :                 root->ref_cows = 1;
    1509                 :          0 :                 btrfs_check_and_init_root_item(&root->root_item);
    1510                 :            :         }
    1511                 :            : 
    1512                 :            :         return root;
    1513                 :            : }
    1514                 :            : 
    1515                 :          0 : int btrfs_init_fs_root(struct btrfs_root *root)
    1516                 :            : {
    1517                 :            :         int ret;
    1518                 :            : 
    1519                 :          0 :         root->free_ino_ctl = kzalloc(sizeof(*root->free_ino_ctl), GFP_NOFS);
    1520                 :          0 :         root->free_ino_pinned = kzalloc(sizeof(*root->free_ino_pinned),
    1521                 :            :                                         GFP_NOFS);
    1522 [ #  # ][ #  # ]:          0 :         if (!root->free_ino_pinned || !root->free_ino_ctl) {
    1523                 :            :                 ret = -ENOMEM;
    1524                 :            :                 goto fail;
    1525                 :            :         }
    1526                 :            : 
    1527                 :          0 :         btrfs_init_free_ino_ctl(root);
    1528                 :          0 :         mutex_init(&root->fs_commit_mutex);
    1529                 :          0 :         spin_lock_init(&root->cache_lock);
    1530                 :          0 :         init_waitqueue_head(&root->cache_wait);
    1531                 :            : 
    1532                 :          0 :         ret = get_anon_bdev(&root->anon_dev);
    1533         [ #  # ]:          0 :         if (ret)
    1534                 :            :                 goto fail;
    1535                 :            :         return 0;
    1536                 :            : fail:
    1537                 :          0 :         kfree(root->free_ino_ctl);
    1538                 :          0 :         kfree(root->free_ino_pinned);
    1539                 :          0 :         return ret;
    1540                 :            : }
    1541                 :            : 
    1542                 :          0 : static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info,
    1543                 :            :                                                u64 root_id)
    1544                 :            : {
    1545                 :            :         struct btrfs_root *root;
    1546                 :            : 
    1547                 :            :         spin_lock(&fs_info->fs_roots_radix_lock);
    1548                 :          0 :         root = radix_tree_lookup(&fs_info->fs_roots_radix,
    1549                 :            :                                  (unsigned long)root_id);
    1550                 :            :         spin_unlock(&fs_info->fs_roots_radix_lock);
    1551                 :          0 :         return root;
    1552                 :            : }
    1553                 :            : 
    1554                 :          0 : int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info,
    1555                 :            :                          struct btrfs_root *root)
    1556                 :            : {
    1557                 :            :         int ret;
    1558                 :            : 
    1559                 :          0 :         ret = radix_tree_preload(GFP_NOFS & ~__GFP_HIGHMEM);
    1560         [ #  # ]:          0 :         if (ret)
    1561                 :            :                 return ret;
    1562                 :            : 
    1563                 :            :         spin_lock(&fs_info->fs_roots_radix_lock);
    1564                 :          0 :         ret = radix_tree_insert(&fs_info->fs_roots_radix,
    1565                 :          0 :                                 (unsigned long)root->root_key.objectid,
    1566                 :            :                                 root);
    1567         [ #  # ]:          0 :         if (ret == 0)
    1568                 :          0 :                 root->in_radix = 1;
    1569                 :            :         spin_unlock(&fs_info->fs_roots_radix_lock);
    1570                 :            :         radix_tree_preload_end();
    1571                 :            : 
    1572                 :          0 :         return ret;
    1573                 :            : }
    1574                 :            : 
    1575                 :          0 : struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
    1576                 :            :                                      struct btrfs_key *location,
    1577                 :            :                                      bool check_ref)
    1578                 :            : {
    1579                 :            :         struct btrfs_root *root;
    1580                 :            :         int ret;
    1581                 :            : 
    1582         [ #  # ]:          0 :         if (location->objectid == BTRFS_ROOT_TREE_OBJECTID)
    1583                 :          0 :                 return fs_info->tree_root;
    1584         [ #  # ]:          0 :         if (location->objectid == BTRFS_EXTENT_TREE_OBJECTID)
    1585                 :          0 :                 return fs_info->extent_root;
    1586         [ #  # ]:          0 :         if (location->objectid == BTRFS_CHUNK_TREE_OBJECTID)
    1587                 :          0 :                 return fs_info->chunk_root;
    1588         [ #  # ]:          0 :         if (location->objectid == BTRFS_DEV_TREE_OBJECTID)
    1589                 :          0 :                 return fs_info->dev_root;
    1590         [ #  # ]:          0 :         if (location->objectid == BTRFS_CSUM_TREE_OBJECTID)
    1591                 :          0 :                 return fs_info->csum_root;
    1592         [ #  # ]:          0 :         if (location->objectid == BTRFS_QUOTA_TREE_OBJECTID)
    1593         [ #  # ]:          0 :                 return fs_info->quota_root ? fs_info->quota_root :
    1594                 :            :                                              ERR_PTR(-ENOENT);
    1595         [ #  # ]:          0 :         if (location->objectid == BTRFS_UUID_TREE_OBJECTID)
    1596         [ #  # ]:          0 :                 return fs_info->uuid_root ? fs_info->uuid_root :
    1597                 :            :                                             ERR_PTR(-ENOENT);
    1598                 :            : again:
    1599                 :          0 :         root = btrfs_lookup_fs_root(fs_info, location->objectid);
    1600         [ #  # ]:          0 :         if (root) {
    1601 [ #  # ][ #  # ]:          0 :                 if (check_ref && btrfs_root_refs(&root->root_item) == 0)
    1602                 :            :                         return ERR_PTR(-ENOENT);
    1603                 :          0 :                 return root;
    1604                 :            :         }
    1605                 :            : 
    1606                 :          0 :         root = btrfs_read_fs_root(fs_info->tree_root, location);
    1607         [ #  # ]:          0 :         if (IS_ERR(root))
    1608                 :            :                 return root;
    1609                 :            : 
    1610 [ #  # ][ #  # ]:          0 :         if (check_ref && btrfs_root_refs(&root->root_item) == 0) {
    1611                 :            :                 ret = -ENOENT;
    1612                 :            :                 goto fail;
    1613                 :            :         }
    1614                 :            : 
    1615                 :          0 :         ret = btrfs_init_fs_root(root);
    1616         [ #  # ]:          0 :         if (ret)
    1617                 :            :                 goto fail;
    1618                 :            : 
    1619                 :          0 :         ret = btrfs_find_orphan_item(fs_info->tree_root, location->objectid);
    1620         [ #  # ]:          0 :         if (ret < 0)
    1621                 :            :                 goto fail;
    1622         [ #  # ]:          0 :         if (ret == 0)
    1623                 :          0 :                 root->orphan_item_inserted = 1;
    1624                 :            : 
    1625                 :          0 :         ret = btrfs_insert_fs_root(fs_info, root);
    1626         [ #  # ]:          0 :         if (ret) {
    1627         [ #  # ]:          0 :                 if (ret == -EEXIST) {
    1628                 :          0 :                         free_fs_root(root);
    1629                 :          0 :                         goto again;
    1630                 :            :                 }
    1631                 :            :                 goto fail;
    1632                 :            :         }
    1633                 :            :         return root;
    1634                 :            : fail:
    1635                 :          0 :         free_fs_root(root);
    1636                 :          0 :         return ERR_PTR(ret);
    1637                 :            : }
    1638                 :            : 
    1639                 :          0 : static int btrfs_congested_fn(void *congested_data, int bdi_bits)
    1640                 :            : {
    1641                 :            :         struct btrfs_fs_info *info = (struct btrfs_fs_info *)congested_data;
    1642                 :            :         int ret = 0;
    1643                 :            :         struct btrfs_device *device;
    1644                 :            :         struct backing_dev_info *bdi;
    1645                 :            : 
    1646                 :            :         rcu_read_lock();
    1647         [ #  # ]:          0 :         list_for_each_entry_rcu(device, &info->fs_devices->devices, dev_list) {
    1648         [ #  # ]:          0 :                 if (!device->bdev)
    1649                 :          0 :                         continue;
    1650                 :          0 :                 bdi = blk_get_backing_dev_info(device->bdev);
    1651 [ #  # ][ #  # ]:          0 :                 if (bdi && bdi_congested(bdi, bdi_bits)) {
    1652                 :            :                         ret = 1;
    1653                 :            :                         break;
    1654                 :            :                 }
    1655                 :            :         }
    1656                 :            :         rcu_read_unlock();
    1657                 :          0 :         return ret;
    1658                 :            : }
    1659                 :            : 
    1660                 :            : /*
    1661                 :            :  * If this fails, caller must call bdi_destroy() to get rid of the
    1662                 :            :  * bdi again.
    1663                 :            :  */
    1664                 :          0 : static int setup_bdi(struct btrfs_fs_info *info, struct backing_dev_info *bdi)
    1665                 :            : {
    1666                 :            :         int err;
    1667                 :            : 
    1668                 :          0 :         bdi->capabilities = BDI_CAP_MAP_COPY;
    1669                 :          0 :         err = bdi_setup_and_register(bdi, "btrfs", BDI_CAP_MAP_COPY);
    1670         [ #  # ]:          0 :         if (err)
    1671                 :            :                 return err;
    1672                 :            : 
    1673                 :          0 :         bdi->ra_pages        = default_backing_dev_info.ra_pages;
    1674                 :          0 :         bdi->congested_fn    = btrfs_congested_fn;
    1675                 :          0 :         bdi->congested_data  = info;
    1676                 :          0 :         return 0;
    1677                 :            : }
    1678                 :            : 
    1679                 :            : /*
    1680                 :            :  * called by the kthread helper functions to finally call the bio end_io
    1681                 :            :  * functions.  This is where read checksum verification actually happens
    1682                 :            :  */
    1683                 :          0 : static void end_workqueue_fn(struct btrfs_work *work)
    1684                 :            : {
    1685                 :            :         struct bio *bio;
    1686                 :            :         struct end_io_wq *end_io_wq;
    1687                 :            :         struct btrfs_fs_info *fs_info;
    1688                 :            :         int error;
    1689                 :            : 
    1690                 :          0 :         end_io_wq = container_of(work, struct end_io_wq, work);
    1691                 :          0 :         bio = end_io_wq->bio;
    1692                 :            :         fs_info = end_io_wq->info;
    1693                 :            : 
    1694                 :          0 :         error = end_io_wq->error;
    1695                 :          0 :         bio->bi_private = end_io_wq->private;
    1696                 :          0 :         bio->bi_end_io = end_io_wq->end_io;
    1697                 :          0 :         kfree(end_io_wq);
    1698                 :          0 :         bio_endio(bio, error);
    1699                 :          0 : }
    1700                 :            : 
    1701                 :          0 : static int cleaner_kthread(void *arg)
    1702                 :            : {
    1703                 :          0 :         struct btrfs_root *root = arg;
    1704                 :            :         int again;
    1705                 :            : 
    1706                 :            :         do {
    1707                 :            :                 again = 0;
    1708                 :            : 
    1709                 :            :                 /* Make the cleaner go to sleep early. */
    1710         [ #  # ]:          0 :                 if (btrfs_need_cleaner_sleep(root))
    1711                 :            :                         goto sleep;
    1712                 :            : 
    1713         [ #  # ]:          0 :                 if (!mutex_trylock(&root->fs_info->cleaner_mutex))
    1714                 :            :                         goto sleep;
    1715                 :            : 
    1716                 :            :                 /*
    1717                 :            :                  * Avoid the problem that we change the status of the fs
    1718                 :            :                  * during the above check and trylock.
    1719                 :            :                  */
    1720         [ #  # ]:          0 :                 if (btrfs_need_cleaner_sleep(root)) {
    1721                 :          0 :                         mutex_unlock(&root->fs_info->cleaner_mutex);
    1722                 :          0 :                         goto sleep;
    1723                 :            :                 }
    1724                 :            : 
    1725                 :          0 :                 btrfs_run_delayed_iputs(root);
    1726                 :          0 :                 again = btrfs_clean_one_deleted_snapshot(root);
    1727                 :          0 :                 mutex_unlock(&root->fs_info->cleaner_mutex);
    1728                 :            : 
    1729                 :            :                 /*
    1730                 :            :                  * The defragger has dealt with the R/O remount and umount,
    1731                 :            :                  * needn't do anything special here.
    1732                 :            :                  */
    1733                 :          0 :                 btrfs_run_defrag_inodes(root->fs_info);
    1734                 :            : sleep:
    1735 [ #  # ][ #  # ]:          0 :                 if (!try_to_freeze() && !again) {
    1736                 :          0 :                         set_current_state(TASK_INTERRUPTIBLE);
    1737         [ #  # ]:          0 :                         if (!kthread_should_stop())
    1738                 :          0 :                                 schedule();
    1739                 :          0 :                         __set_current_state(TASK_RUNNING);
    1740                 :            :                 }
    1741         [ #  # ]:          0 :         } while (!kthread_should_stop());
    1742                 :          0 :         return 0;
    1743                 :            : }
    1744                 :            : 
    1745                 :          0 : static int transaction_kthread(void *arg)
    1746                 :            : {
    1747                 :            :         struct btrfs_root *root = arg;
    1748                 :            :         struct btrfs_trans_handle *trans;
    1749                 :            :         struct btrfs_transaction *cur;
    1750                 :            :         u64 transid;
    1751                 :            :         unsigned long now;
    1752                 :            :         unsigned long delay;
    1753                 :            :         bool cannot_commit;
    1754                 :            : 
    1755                 :            :         do {
    1756                 :            :                 cannot_commit = false;
    1757                 :          0 :                 delay = HZ * root->fs_info->commit_interval;
    1758                 :          0 :                 mutex_lock(&root->fs_info->transaction_kthread_mutex);
    1759                 :            : 
    1760                 :          0 :                 spin_lock(&root->fs_info->trans_lock);
    1761                 :          0 :                 cur = root->fs_info->running_transaction;
    1762         [ #  # ]:          0 :                 if (!cur) {
    1763                 :            :                         spin_unlock(&root->fs_info->trans_lock);
    1764                 :            :                         goto sleep;
    1765                 :            :                 }
    1766                 :            : 
    1767                 :          0 :                 now = get_seconds();
    1768 [ #  # ][ #  # ]:          0 :                 if (cur->state < TRANS_STATE_BLOCKED &&
    1769         [ #  # ]:          0 :                     (now < cur->start_time ||
    1770                 :          0 :                      now - cur->start_time < root->fs_info->commit_interval)) {
    1771                 :          0 :                         spin_unlock(&root->fs_info->trans_lock);
    1772                 :            :                         delay = HZ * 5;
    1773                 :          0 :                         goto sleep;
    1774                 :            :                 }
    1775                 :          0 :                 transid = cur->transid;
    1776                 :          0 :                 spin_unlock(&root->fs_info->trans_lock);
    1777                 :            : 
    1778                 :            :                 /* If the file system is aborted, this will always fail. */
    1779                 :          0 :                 trans = btrfs_attach_transaction(root);
    1780         [ #  # ]:          0 :                 if (IS_ERR(trans)) {
    1781         [ #  # ]:          0 :                         if (PTR_ERR(trans) != -ENOENT)
    1782                 :            :                                 cannot_commit = true;
    1783                 :            :                         goto sleep;
    1784                 :            :                 }
    1785         [ #  # ]:          0 :                 if (transid == trans->transid) {
    1786                 :          0 :                         btrfs_commit_transaction(trans, root);
    1787                 :            :                 } else {
    1788                 :          0 :                         btrfs_end_transaction(trans, root);
    1789                 :            :                 }
    1790                 :            : sleep:
    1791                 :          0 :                 wake_up_process(root->fs_info->cleaner_kthread);
    1792                 :          0 :                 mutex_unlock(&root->fs_info->transaction_kthread_mutex);
    1793                 :            : 
    1794         [ #  # ]:          0 :                 if (unlikely(test_bit(BTRFS_FS_STATE_ERROR,
    1795                 :            :                                       &root->fs_info->fs_state)))
    1796                 :          0 :                         btrfs_cleanup_transaction(root);
    1797         [ #  # ]:          0 :                 if (!try_to_freeze()) {
    1798                 :          0 :                         set_current_state(TASK_INTERRUPTIBLE);
    1799   [ #  #  #  # ]:          0 :                         if (!kthread_should_stop() &&
    1800         [ #  # ]:          0 :                             (!btrfs_transaction_blocked(root->fs_info) ||
    1801                 :            :                              cannot_commit))
    1802                 :          0 :                                 schedule_timeout(delay);
    1803                 :          0 :                         __set_current_state(TASK_RUNNING);
    1804                 :            :                 }
    1805         [ #  # ]:          0 :         } while (!kthread_should_stop());
    1806                 :          0 :         return 0;
    1807                 :            : }
    1808                 :            : 
    1809                 :            : /*
    1810                 :            :  * this will find the highest generation in the array of
    1811                 :            :  * root backups.  The index of the highest array is returned,
    1812                 :            :  * or -1 if we can't find anything.
    1813                 :            :  *
    1814                 :            :  * We check to make sure the array is valid by comparing the
    1815                 :            :  * generation of the latest  root in the array with the generation
    1816                 :            :  * in the super block.  If they don't match we pitch it.
    1817                 :            :  */
    1818                 :            : static int find_newest_super_backup(struct btrfs_fs_info *info, u64 newest_gen)
    1819                 :            : {
    1820                 :            :         u64 cur;
    1821                 :            :         int newest_index = -1;
    1822                 :            :         struct btrfs_root_backup *root_backup;
    1823                 :            :         int i;
    1824                 :            : 
    1825 [ #  # ][ #  # ]:          0 :         for (i = 0; i < BTRFS_NUM_BACKUP_ROOTS; i++) {
    1826                 :          0 :                 root_backup = info->super_copy->super_roots + i;
    1827                 :            :                 cur = btrfs_backup_tree_root_gen(root_backup);
    1828 [ #  # ][ #  # ]:          0 :                 if (cur == newest_gen)
    1829                 :            :                         newest_index = i;
    1830                 :            :         }
    1831                 :            : 
    1832                 :            :         /* check to see if we actually wrapped around */
    1833 [ #  # ][ #  # ]:          0 :         if (newest_index == BTRFS_NUM_BACKUP_ROOTS - 1) {
    1834                 :          0 :                 root_backup = info->super_copy->super_roots;
    1835                 :            :                 cur = btrfs_backup_tree_root_gen(root_backup);
    1836 [ #  # ][ #  # ]:          0 :                 if (cur == newest_gen)
    1837                 :            :                         newest_index = 0;
    1838                 :            :         }
    1839                 :            :         return newest_index;
    1840                 :            : }
    1841                 :            : 
    1842                 :            : 
    1843                 :            : /*
    1844                 :            :  * find the oldest backup so we know where to store new entries
    1845                 :            :  * in the backup array.  This will set the backup_root_index
    1846                 :            :  * field in the fs_info struct
    1847                 :            :  */
    1848                 :          0 : static void find_oldest_super_backup(struct btrfs_fs_info *info,
    1849                 :            :                                      u64 newest_gen)
    1850                 :            : {
    1851                 :            :         int newest_index = -1;
    1852                 :            : 
    1853                 :            :         newest_index = find_newest_super_backup(info, newest_gen);
    1854                 :            :         /* if there was garbage in there, just move along */
    1855         [ #  # ]:          0 :         if (newest_index == -1) {
    1856                 :          0 :                 info->backup_root_index = 0;
    1857                 :            :         } else {
    1858                 :          0 :                 info->backup_root_index = (newest_index + 1) % BTRFS_NUM_BACKUP_ROOTS;
    1859                 :            :         }
    1860                 :          0 : }
    1861                 :            : 
    1862                 :            : /*
    1863                 :            :  * copy all the root pointers into the super backup array.
    1864                 :            :  * this will bump the backup pointer by one when it is
    1865                 :            :  * done
    1866                 :            :  */
    1867                 :          0 : static void backup_super_roots(struct btrfs_fs_info *info)
    1868                 :            : {
    1869                 :            :         int next_backup;
    1870                 :            :         struct btrfs_root_backup *root_backup;
    1871                 :            :         int last_backup;
    1872                 :            : 
    1873                 :          0 :         next_backup = info->backup_root_index;
    1874                 :          0 :         last_backup = (next_backup + BTRFS_NUM_BACKUP_ROOTS - 1) %
    1875                 :            :                 BTRFS_NUM_BACKUP_ROOTS;
    1876                 :            : 
    1877                 :            :         /*
    1878                 :            :          * just overwrite the last backup if we're at the same generation
    1879                 :            :          * this happens only at umount
    1880                 :            :          */
    1881                 :          0 :         root_backup = info->super_for_commit->super_roots + last_backup;
    1882         [ #  # ]:          0 :         if (btrfs_backup_tree_root_gen(root_backup) ==
    1883                 :          0 :             btrfs_header_generation(info->tree_root->node))
    1884                 :            :                 next_backup = last_backup;
    1885                 :            : 
    1886                 :          0 :         root_backup = info->super_for_commit->super_roots + next_backup;
    1887                 :            : 
    1888                 :            :         /*
    1889                 :            :          * make sure all of our padding and empty slots get zero filled
    1890                 :            :          * regardless of which ones we use today
    1891                 :            :          */
    1892                 :          0 :         memset(root_backup, 0, sizeof(*root_backup));
    1893                 :            : 
    1894                 :          0 :         info->backup_root_index = (next_backup + 1) % BTRFS_NUM_BACKUP_ROOTS;
    1895                 :            : 
    1896                 :          0 :         btrfs_set_backup_tree_root(root_backup, info->tree_root->node->start);
    1897                 :          0 :         btrfs_set_backup_tree_root_gen(root_backup,
    1898                 :          0 :                                btrfs_header_generation(info->tree_root->node));
    1899                 :            : 
    1900                 :          0 :         btrfs_set_backup_tree_root_level(root_backup,
    1901                 :          0 :                                btrfs_header_level(info->tree_root->node));
    1902                 :            : 
    1903                 :          0 :         btrfs_set_backup_chunk_root(root_backup, info->chunk_root->node->start);
    1904                 :          0 :         btrfs_set_backup_chunk_root_gen(root_backup,
    1905                 :          0 :                                btrfs_header_generation(info->chunk_root->node));
    1906                 :          0 :         btrfs_set_backup_chunk_root_level(root_backup,
    1907                 :          0 :                                btrfs_header_level(info->chunk_root->node));
    1908                 :            : 
    1909                 :          0 :         btrfs_set_backup_extent_root(root_backup, info->extent_root->node->start);
    1910                 :          0 :         btrfs_set_backup_extent_root_gen(root_backup,
    1911                 :          0 :                                btrfs_header_generation(info->extent_root->node));
    1912                 :          0 :         btrfs_set_backup_extent_root_level(root_backup,
    1913                 :          0 :                                btrfs_header_level(info->extent_root->node));
    1914                 :            : 
    1915                 :            :         /*
    1916                 :            :          * we might commit during log recovery, which happens before we set
    1917                 :            :          * the fs_root.  Make sure it is valid before we fill it in.
    1918                 :            :          */
    1919 [ #  # ][ #  # ]:          0 :         if (info->fs_root && info->fs_root->node) {
    1920                 :          0 :                 btrfs_set_backup_fs_root(root_backup,
    1921                 :            :                                          info->fs_root->node->start);
    1922                 :          0 :                 btrfs_set_backup_fs_root_gen(root_backup,
    1923                 :          0 :                                btrfs_header_generation(info->fs_root->node));
    1924                 :          0 :                 btrfs_set_backup_fs_root_level(root_backup,
    1925                 :          0 :                                btrfs_header_level(info->fs_root->node));
    1926                 :            :         }
    1927                 :            : 
    1928                 :          0 :         btrfs_set_backup_dev_root(root_backup, info->dev_root->node->start);
    1929                 :          0 :         btrfs_set_backup_dev_root_gen(root_backup,
    1930                 :          0 :                                btrfs_header_generation(info->dev_root->node));
    1931                 :          0 :         btrfs_set_backup_dev_root_level(root_backup,
    1932                 :          0 :                                        btrfs_header_level(info->dev_root->node));
    1933                 :            : 
    1934                 :          0 :         btrfs_set_backup_csum_root(root_backup, info->csum_root->node->start);
    1935                 :          0 :         btrfs_set_backup_csum_root_gen(root_backup,
    1936                 :          0 :                                btrfs_header_generation(info->csum_root->node));
    1937                 :          0 :         btrfs_set_backup_csum_root_level(root_backup,
    1938                 :          0 :                                btrfs_header_level(info->csum_root->node));
    1939                 :            : 
    1940                 :          0 :         btrfs_set_backup_total_bytes(root_backup,
    1941                 :            :                              btrfs_super_total_bytes(info->super_copy));
    1942                 :          0 :         btrfs_set_backup_bytes_used(root_backup,
    1943                 :            :                              btrfs_super_bytes_used(info->super_copy));
    1944                 :          0 :         btrfs_set_backup_num_devices(root_backup,
    1945                 :            :                              btrfs_super_num_devices(info->super_copy));
    1946                 :            : 
    1947                 :            :         /*
    1948                 :            :          * if we don't copy this out to the super_copy, it won't get remembered
    1949                 :            :          * for the next commit
    1950                 :            :          */
    1951                 :          0 :         memcpy(&info->super_copy->super_roots,
    1952                 :          0 :                &info->super_for_commit->super_roots,
    1953                 :            :                sizeof(*root_backup) * BTRFS_NUM_BACKUP_ROOTS);
    1954                 :          0 : }
    1955                 :            : 
    1956                 :            : /*
    1957                 :            :  * this copies info out of the root backup array and back into
    1958                 :            :  * the in-memory super block.  It is meant to help iterate through
    1959                 :            :  * the array, so you send it the number of backups you've already
    1960                 :            :  * tried and the last backup index you used.
    1961                 :            :  *
    1962                 :            :  * this returns -1 when it has tried all the backups
    1963                 :            :  */
    1964                 :          0 : static noinline int next_root_backup(struct btrfs_fs_info *info,
    1965                 :            :                                      struct btrfs_super_block *super,
    1966                 :            :                                      int *num_backups_tried, int *backup_index)
    1967                 :            : {
    1968                 :          0 :         struct btrfs_root_backup *root_backup;
    1969                 :            :         int newest = *backup_index;
    1970                 :            : 
    1971         [ #  # ]:          0 :         if (*num_backups_tried == 0) {
    1972                 :            :                 u64 gen = btrfs_super_generation(super);
    1973                 :            : 
    1974                 :            :                 newest = find_newest_super_backup(info, gen);
    1975         [ #  # ]:          0 :                 if (newest == -1)
    1976                 :            :                         return -1;
    1977                 :            : 
    1978                 :          0 :                 *backup_index = newest;
    1979                 :          0 :                 *num_backups_tried = 1;
    1980         [ #  # ]:          0 :         } else if (*num_backups_tried == BTRFS_NUM_BACKUP_ROOTS) {
    1981                 :            :                 /* we've tried all the backups, all done */
    1982                 :            :                 return -1;
    1983                 :            :         } else {
    1984                 :            :                 /* jump to the next oldest backup */
    1985                 :          0 :                 newest = (*backup_index + BTRFS_NUM_BACKUP_ROOTS - 1) %
    1986                 :            :                         BTRFS_NUM_BACKUP_ROOTS;
    1987                 :          0 :                 *backup_index = newest;
    1988                 :          0 :                 *num_backups_tried += 1;
    1989                 :            :         }
    1990                 :          0 :         root_backup = super->super_roots + newest;
    1991                 :            : 
    1992                 :            :         btrfs_set_super_generation(super,
    1993                 :            :                                    btrfs_backup_tree_root_gen(root_backup));
    1994                 :            :         btrfs_set_super_root(super, btrfs_backup_tree_root(root_backup));
    1995                 :            :         btrfs_set_super_root_level(super,
    1996                 :            :                                    btrfs_backup_tree_root_level(root_backup));
    1997                 :            :         btrfs_set_super_bytes_used(super, btrfs_backup_bytes_used(root_backup));
    1998                 :            : 
    1999                 :            :         /*
    2000                 :            :          * fixme: the total bytes and num_devices need to match or we should
    2001                 :            :          * need a fsck
    2002                 :            :          */
    2003                 :            :         btrfs_set_super_total_bytes(super, btrfs_backup_total_bytes(root_backup));
    2004                 :            :         btrfs_set_super_num_devices(super, btrfs_backup_num_devices(root_backup));
    2005                 :          0 :         return 0;
    2006                 :            : }
    2007                 :            : 
    2008                 :            : /* helper to cleanup workers */
    2009                 :          0 : static void btrfs_stop_all_workers(struct btrfs_fs_info *fs_info)
    2010                 :            : {
    2011                 :          0 :         btrfs_stop_workers(&fs_info->generic_worker);
    2012                 :          0 :         btrfs_stop_workers(&fs_info->fixup_workers);
    2013                 :          0 :         btrfs_stop_workers(&fs_info->delalloc_workers);
    2014                 :          0 :         btrfs_stop_workers(&fs_info->workers);
    2015                 :          0 :         btrfs_stop_workers(&fs_info->endio_workers);
    2016                 :          0 :         btrfs_stop_workers(&fs_info->endio_meta_workers);
    2017                 :          0 :         btrfs_stop_workers(&fs_info->endio_raid56_workers);
    2018                 :          0 :         btrfs_stop_workers(&fs_info->rmw_workers);
    2019                 :          0 :         btrfs_stop_workers(&fs_info->endio_meta_write_workers);
    2020                 :          0 :         btrfs_stop_workers(&fs_info->endio_write_workers);
    2021                 :          0 :         btrfs_stop_workers(&fs_info->endio_freespace_worker);
    2022                 :          0 :         btrfs_stop_workers(&fs_info->submit_workers);
    2023                 :          0 :         btrfs_stop_workers(&fs_info->delayed_workers);
    2024                 :          0 :         btrfs_stop_workers(&fs_info->caching_workers);
    2025                 :          0 :         btrfs_stop_workers(&fs_info->readahead_workers);
    2026                 :          0 :         btrfs_stop_workers(&fs_info->flush_workers);
    2027                 :          0 :         btrfs_stop_workers(&fs_info->qgroup_rescan_workers);
    2028                 :          0 : }
    2029                 :            : 
    2030                 :          0 : static void free_root_extent_buffers(struct btrfs_root *root)
    2031                 :            : {
    2032         [ #  # ]:          0 :         if (root) {
    2033                 :          0 :                 free_extent_buffer(root->node);
    2034                 :          0 :                 free_extent_buffer(root->commit_root);
    2035                 :          0 :                 root->node = NULL;
    2036                 :          0 :                 root->commit_root = NULL;
    2037                 :            :         }
    2038                 :          0 : }
    2039                 :            : 
    2040                 :            : /* helper to cleanup tree roots */
    2041                 :          0 : static void free_root_pointers(struct btrfs_fs_info *info, int chunk_root)
    2042                 :            : {
    2043                 :          0 :         free_root_extent_buffers(info->tree_root);
    2044                 :            : 
    2045                 :          0 :         free_root_extent_buffers(info->dev_root);
    2046                 :          0 :         free_root_extent_buffers(info->extent_root);
    2047                 :          0 :         free_root_extent_buffers(info->csum_root);
    2048                 :          0 :         free_root_extent_buffers(info->quota_root);
    2049                 :          0 :         free_root_extent_buffers(info->uuid_root);
    2050         [ #  # ]:          0 :         if (chunk_root)
    2051                 :          0 :                 free_root_extent_buffers(info->chunk_root);
    2052                 :          0 : }
    2053                 :            : 
    2054                 :          0 : static void del_fs_roots(struct btrfs_fs_info *fs_info)
    2055                 :            : {
    2056                 :            :         int ret;
    2057                 :            :         struct btrfs_root *gang[8];
    2058                 :            :         int i;
    2059                 :            : 
    2060         [ #  # ]:          0 :         while (!list_empty(&fs_info->dead_roots)) {
    2061                 :          0 :                 gang[0] = list_entry(fs_info->dead_roots.next,
    2062                 :            :                                      struct btrfs_root, root_list);
    2063                 :            :                 list_del(&gang[0]->root_list);
    2064                 :            : 
    2065         [ #  # ]:          0 :                 if (gang[0]->in_radix) {
    2066                 :          0 :                         btrfs_drop_and_free_fs_root(fs_info, gang[0]);
    2067                 :            :                 } else {
    2068                 :          0 :                         free_extent_buffer(gang[0]->node);
    2069                 :          0 :                         free_extent_buffer(gang[0]->commit_root);
    2070                 :          0 :                         btrfs_put_fs_root(gang[0]);
    2071                 :            :                 }
    2072                 :            :         }
    2073                 :            : 
    2074                 :            :         while (1) {
    2075                 :          0 :                 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix,
    2076                 :            :                                              (void **)gang, 0,
    2077                 :            :                                              ARRAY_SIZE(gang));
    2078         [ #  # ]:          0 :                 if (!ret)
    2079                 :            :                         break;
    2080         [ #  # ]:          0 :                 for (i = 0; i < ret; i++)
    2081                 :          0 :                         btrfs_drop_and_free_fs_root(fs_info, gang[i]);
    2082                 :            :         }
    2083                 :          0 : }
    2084                 :            : 
    2085                 :          0 : int open_ctree(struct super_block *sb,
    2086                 :            :                struct btrfs_fs_devices *fs_devices,
    2087                 :            :                char *options)
    2088                 :            : {
    2089                 :            :         u32 sectorsize;
    2090                 :            :         u32 nodesize;
    2091                 :            :         u32 leafsize;
    2092                 :            :         u32 blocksize;
    2093                 :            :         u32 stripesize;
    2094                 :            :         u64 generation;
    2095                 :            :         u64 features;
    2096                 :            :         struct btrfs_key location;
    2097                 :            :         struct buffer_head *bh;
    2098                 :          0 :         struct btrfs_super_block *disk_super;
    2099                 :            :         struct btrfs_fs_info *fs_info = btrfs_sb(sb);
    2100                 :          0 :         struct btrfs_root *tree_root;
    2101                 :            :         struct btrfs_root *extent_root;
    2102                 :            :         struct btrfs_root *csum_root;
    2103                 :            :         struct btrfs_root *chunk_root;
    2104                 :            :         struct btrfs_root *dev_root;
    2105                 :            :         struct btrfs_root *quota_root;
    2106                 :            :         struct btrfs_root *uuid_root;
    2107                 :            :         struct btrfs_root *log_tree_root;
    2108                 :            :         int ret;
    2109                 :            :         int err = -EINVAL;
    2110                 :          0 :         int num_backups_tried = 0;
    2111                 :          0 :         int backup_index = 0;
    2112                 :            :         bool create_uuid_tree;
    2113                 :            :         bool check_uuid_tree;
    2114                 :            : 
    2115                 :          0 :         tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info);
    2116                 :          0 :         chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info);
    2117         [ #  # ]:          0 :         if (!tree_root || !chunk_root) {
    2118                 :            :                 err = -ENOMEM;
    2119                 :            :                 goto fail;
    2120                 :            :         }
    2121                 :            : 
    2122                 :          0 :         ret = init_srcu_struct(&fs_info->subvol_srcu);
    2123         [ #  # ]:          0 :         if (ret) {
    2124                 :            :                 err = ret;
    2125                 :            :                 goto fail;
    2126                 :            :         }
    2127                 :            : 
    2128                 :          0 :         ret = setup_bdi(fs_info, &fs_info->bdi);
    2129         [ #  # ]:          0 :         if (ret) {
    2130                 :            :                 err = ret;
    2131                 :            :                 goto fail_srcu;
    2132                 :            :         }
    2133                 :            : 
    2134                 :          0 :         ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0);
    2135         [ #  # ]:          0 :         if (ret) {
    2136                 :            :                 err = ret;
    2137                 :            :                 goto fail_bdi;
    2138                 :            :         }
    2139 [ #  # ][ #  # ]:          0 :         fs_info->dirty_metadata_batch = PAGE_CACHE_SIZE *
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    2140                 :          0 :                                         (1 + ilog2(nr_cpu_ids));
    2141                 :            : 
    2142                 :          0 :         ret = percpu_counter_init(&fs_info->delalloc_bytes, 0);
    2143         [ #  # ]:          0 :         if (ret) {
    2144                 :            :                 err = ret;
    2145                 :            :                 goto fail_dirty_metadata_bytes;
    2146                 :            :         }
    2147                 :            : 
    2148                 :          0 :         fs_info->btree_inode = new_inode(sb);
    2149         [ #  # ]:          0 :         if (!fs_info->btree_inode) {
    2150                 :            :                 err = -ENOMEM;
    2151                 :            :                 goto fail_delalloc_bytes;
    2152                 :            :         }
    2153                 :            : 
    2154                 :          0 :         mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS);
    2155                 :            : 
    2156                 :          0 :         INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC);
    2157                 :          0 :         INIT_LIST_HEAD(&fs_info->trans_list);
    2158                 :          0 :         INIT_LIST_HEAD(&fs_info->dead_roots);
    2159                 :          0 :         INIT_LIST_HEAD(&fs_info->delayed_iputs);
    2160                 :          0 :         INIT_LIST_HEAD(&fs_info->delalloc_roots);
    2161                 :          0 :         INIT_LIST_HEAD(&fs_info->caching_block_groups);
    2162                 :          0 :         spin_lock_init(&fs_info->delalloc_root_lock);
    2163                 :          0 :         spin_lock_init(&fs_info->trans_lock);
    2164                 :          0 :         spin_lock_init(&fs_info->fs_roots_radix_lock);
    2165                 :          0 :         spin_lock_init(&fs_info->delayed_iput_lock);
    2166                 :          0 :         spin_lock_init(&fs_info->defrag_inodes_lock);
    2167                 :          0 :         spin_lock_init(&fs_info->free_chunk_lock);
    2168                 :          0 :         spin_lock_init(&fs_info->tree_mod_seq_lock);
    2169                 :          0 :         spin_lock_init(&fs_info->super_lock);
    2170                 :          0 :         rwlock_init(&fs_info->tree_mod_log_lock);
    2171                 :          0 :         mutex_init(&fs_info->reloc_mutex);
    2172                 :          0 :         seqlock_init(&fs_info->profiles_lock);
    2173                 :            : 
    2174                 :            :         init_completion(&fs_info->kobj_unregister);
    2175                 :          0 :         INIT_LIST_HEAD(&fs_info->dirty_cowonly_roots);
    2176                 :          0 :         INIT_LIST_HEAD(&fs_info->space_info);
    2177                 :          0 :         INIT_LIST_HEAD(&fs_info->tree_mod_seq_list);
    2178                 :          0 :         btrfs_mapping_init(&fs_info->mapping_tree);
    2179                 :          0 :         btrfs_init_block_rsv(&fs_info->global_block_rsv,
    2180                 :            :                              BTRFS_BLOCK_RSV_GLOBAL);
    2181                 :          0 :         btrfs_init_block_rsv(&fs_info->delalloc_block_rsv,
    2182                 :            :                              BTRFS_BLOCK_RSV_DELALLOC);
    2183                 :          0 :         btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS);
    2184                 :          0 :         btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK);
    2185                 :          0 :         btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY);
    2186                 :          0 :         btrfs_init_block_rsv(&fs_info->delayed_block_rsv,
    2187                 :            :                              BTRFS_BLOCK_RSV_DELOPS);
    2188                 :          0 :         atomic_set(&fs_info->nr_async_submits, 0);
    2189                 :          0 :         atomic_set(&fs_info->async_delalloc_pages, 0);
    2190                 :          0 :         atomic_set(&fs_info->async_submit_draining, 0);
    2191                 :          0 :         atomic_set(&fs_info->nr_async_bios, 0);
    2192                 :          0 :         atomic_set(&fs_info->defrag_running, 0);
    2193                 :          0 :         atomic64_set(&fs_info->tree_mod_seq, 0);
    2194                 :          0 :         fs_info->sb = sb;
    2195                 :          0 :         fs_info->max_inline = 8192 * 1024;
    2196                 :          0 :         fs_info->metadata_ratio = 0;
    2197                 :          0 :         fs_info->defrag_inodes = RB_ROOT;
    2198                 :          0 :         fs_info->free_chunk_space = 0;
    2199                 :          0 :         fs_info->tree_mod_log = RB_ROOT;
    2200                 :          0 :         fs_info->commit_interval = BTRFS_DEFAULT_COMMIT_INTERVAL;
    2201                 :            : 
    2202                 :            :         /* readahead state */
    2203                 :          0 :         INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_WAIT);
    2204                 :          0 :         spin_lock_init(&fs_info->reada_lock);
    2205                 :            : 
    2206                 :          0 :         fs_info->thread_pool_size = min_t(unsigned long,
    2207                 :            :                                           num_online_cpus() + 2, 8);
    2208                 :            : 
    2209                 :          0 :         INIT_LIST_HEAD(&fs_info->ordered_roots);
    2210                 :          0 :         spin_lock_init(&fs_info->ordered_root_lock);
    2211                 :          0 :         fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root),
    2212                 :            :                                         GFP_NOFS);
    2213         [ #  # ]:          0 :         if (!fs_info->delayed_root) {
    2214                 :            :                 err = -ENOMEM;
    2215                 :            :                 goto fail_iput;
    2216                 :            :         }
    2217                 :            :         btrfs_init_delayed_root(fs_info->delayed_root);
    2218                 :            : 
    2219                 :          0 :         mutex_init(&fs_info->scrub_lock);
    2220                 :          0 :         atomic_set(&fs_info->scrubs_running, 0);
    2221                 :          0 :         atomic_set(&fs_info->scrub_pause_req, 0);
    2222                 :          0 :         atomic_set(&fs_info->scrubs_paused, 0);
    2223                 :          0 :         atomic_set(&fs_info->scrub_cancel_req, 0);
    2224                 :          0 :         init_waitqueue_head(&fs_info->scrub_pause_wait);
    2225                 :          0 :         fs_info->scrub_workers_refcnt = 0;
    2226                 :            : #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
    2227                 :            :         fs_info->check_integrity_print_mask = 0;
    2228                 :            : #endif
    2229                 :            : 
    2230                 :          0 :         spin_lock_init(&fs_info->balance_lock);
    2231                 :          0 :         mutex_init(&fs_info->balance_mutex);
    2232                 :          0 :         atomic_set(&fs_info->balance_running, 0);
    2233                 :          0 :         atomic_set(&fs_info->balance_pause_req, 0);
    2234                 :          0 :         atomic_set(&fs_info->balance_cancel_req, 0);
    2235                 :          0 :         fs_info->balance_ctl = NULL;
    2236                 :          0 :         init_waitqueue_head(&fs_info->balance_wait_q);
    2237                 :            : 
    2238                 :          0 :         sb->s_blocksize = 4096;
    2239                 :          0 :         sb->s_blocksize_bits = blksize_bits(4096);
    2240                 :          0 :         sb->s_bdi = &fs_info->bdi;
    2241                 :            : 
    2242                 :          0 :         fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID;
    2243                 :          0 :         set_nlink(fs_info->btree_inode, 1);
    2244                 :            :         /*
    2245                 :            :          * we set the i_size on the btree inode to the max possible int.
    2246                 :            :          * the real end of the address space is determined by all of
    2247                 :            :          * the devices in the system
    2248                 :            :          */
    2249                 :          0 :         fs_info->btree_inode->i_size = OFFSET_MAX;
    2250                 :          0 :         fs_info->btree_inode->i_mapping->a_ops = &btree_aops;
    2251                 :          0 :         fs_info->btree_inode->i_mapping->backing_dev_info = &fs_info->bdi;
    2252                 :            : 
    2253                 :          0 :         RB_CLEAR_NODE(&BTRFS_I(fs_info->btree_inode)->rb_node);
    2254                 :          0 :         extent_io_tree_init(&BTRFS_I(fs_info->btree_inode)->io_tree,
    2255                 :            :                              fs_info->btree_inode->i_mapping);
    2256                 :          0 :         BTRFS_I(fs_info->btree_inode)->io_tree.track_uptodate = 0;
    2257                 :          0 :         extent_map_tree_init(&BTRFS_I(fs_info->btree_inode)->extent_tree);
    2258                 :            : 
    2259                 :          0 :         BTRFS_I(fs_info->btree_inode)->io_tree.ops = &btree_extent_io_ops;
    2260                 :            : 
    2261                 :          0 :         BTRFS_I(fs_info->btree_inode)->root = tree_root;
    2262                 :          0 :         memset(&BTRFS_I(fs_info->btree_inode)->location, 0,
    2263                 :            :                sizeof(struct btrfs_key));
    2264                 :          0 :         set_bit(BTRFS_INODE_DUMMY,
    2265                 :            :                 &BTRFS_I(fs_info->btree_inode)->runtime_flags);
    2266                 :          0 :         btrfs_insert_inode_hash(fs_info->btree_inode);
    2267                 :            : 
    2268                 :          0 :         spin_lock_init(&fs_info->block_group_cache_lock);
    2269                 :          0 :         fs_info->block_group_cache_tree = RB_ROOT;
    2270                 :          0 :         fs_info->first_logical_byte = (u64)-1;
    2271                 :            : 
    2272                 :          0 :         extent_io_tree_init(&fs_info->freed_extents[0],
    2273                 :          0 :                              fs_info->btree_inode->i_mapping);
    2274                 :          0 :         extent_io_tree_init(&fs_info->freed_extents[1],
    2275                 :          0 :                              fs_info->btree_inode->i_mapping);
    2276                 :          0 :         fs_info->pinned_extents = &fs_info->freed_extents[0];
    2277                 :          0 :         fs_info->do_barriers = 1;
    2278                 :            : 
    2279                 :            : 
    2280                 :          0 :         mutex_init(&fs_info->ordered_operations_mutex);
    2281                 :          0 :         mutex_init(&fs_info->ordered_extent_flush_mutex);
    2282                 :          0 :         mutex_init(&fs_info->tree_log_mutex);
    2283                 :          0 :         mutex_init(&fs_info->chunk_mutex);
    2284                 :          0 :         mutex_init(&fs_info->transaction_kthread_mutex);
    2285                 :          0 :         mutex_init(&fs_info->cleaner_mutex);
    2286                 :          0 :         mutex_init(&fs_info->volume_mutex);
    2287                 :          0 :         init_rwsem(&fs_info->extent_commit_sem);
    2288                 :          0 :         init_rwsem(&fs_info->cleanup_work_sem);
    2289                 :          0 :         init_rwsem(&fs_info->subvol_sem);
    2290                 :            :         sema_init(&fs_info->uuid_tree_rescan_sem, 1);
    2291                 :          0 :         fs_info->dev_replace.lock_owner = 0;
    2292                 :          0 :         atomic_set(&fs_info->dev_replace.nesting_level, 0);
    2293                 :          0 :         mutex_init(&fs_info->dev_replace.lock_finishing_cancel_unmount);
    2294                 :          0 :         mutex_init(&fs_info->dev_replace.lock_management_lock);
    2295                 :          0 :         mutex_init(&fs_info->dev_replace.lock);
    2296                 :            : 
    2297                 :          0 :         spin_lock_init(&fs_info->qgroup_lock);
    2298                 :          0 :         mutex_init(&fs_info->qgroup_ioctl_lock);
    2299                 :          0 :         fs_info->qgroup_tree = RB_ROOT;
    2300                 :          0 :         INIT_LIST_HEAD(&fs_info->dirty_qgroups);
    2301                 :          0 :         fs_info->qgroup_seq = 1;
    2302                 :          0 :         fs_info->quota_enabled = 0;
    2303                 :          0 :         fs_info->pending_quota_state = 0;
    2304                 :          0 :         fs_info->qgroup_ulist = NULL;
    2305                 :          0 :         mutex_init(&fs_info->qgroup_rescan_lock);
    2306                 :            : 
    2307                 :          0 :         btrfs_init_free_cluster(&fs_info->meta_alloc_cluster);
    2308                 :          0 :         btrfs_init_free_cluster(&fs_info->data_alloc_cluster);
    2309                 :            : 
    2310                 :          0 :         init_waitqueue_head(&fs_info->transaction_throttle);
    2311                 :          0 :         init_waitqueue_head(&fs_info->transaction_wait);
    2312                 :          0 :         init_waitqueue_head(&fs_info->transaction_blocked_wait);
    2313                 :          0 :         init_waitqueue_head(&fs_info->async_submit_wait);
    2314                 :            : 
    2315                 :          0 :         ret = btrfs_alloc_stripe_hash_table(fs_info);
    2316         [ #  # ]:          0 :         if (ret) {
    2317                 :            :                 err = ret;
    2318                 :            :                 goto fail_alloc;
    2319                 :            :         }
    2320                 :            : 
    2321                 :          0 :         __setup_root(4096, 4096, 4096, 4096, tree_root,
    2322                 :            :                      fs_info, BTRFS_ROOT_TREE_OBJECTID);
    2323                 :            : 
    2324                 :          0 :         invalidate_bdev(fs_devices->latest_bdev);
    2325                 :            : 
    2326                 :            :         /*
    2327                 :            :          * Read super block and check the signature bytes only
    2328                 :            :          */
    2329                 :          0 :         bh = btrfs_read_dev_super(fs_devices->latest_bdev);
    2330         [ #  # ]:          0 :         if (!bh) {
    2331                 :            :                 err = -EINVAL;
    2332                 :            :                 goto fail_alloc;
    2333                 :            :         }
    2334                 :            : 
    2335                 :            :         /*
    2336                 :            :          * We want to check superblock checksum, the type is stored inside.
    2337                 :            :          * Pass the whole disk block of size BTRFS_SUPER_INFO_SIZE (4k).
    2338                 :            :          */
    2339         [ #  # ]:          0 :         if (btrfs_check_super_csum(bh->b_data)) {
    2340                 :          0 :                 printk(KERN_ERR "btrfs: superblock checksum mismatch\n");
    2341                 :            :                 err = -EINVAL;
    2342                 :          0 :                 goto fail_alloc;
    2343                 :            :         }
    2344                 :            : 
    2345                 :            :         /*
    2346                 :            :          * super_copy is zeroed at allocation time and we never touch the
    2347                 :            :          * following bytes up to INFO_SIZE, the checksum is calculated from
    2348                 :            :          * the whole block of INFO_SIZE
    2349                 :            :          */
    2350                 :          0 :         memcpy(fs_info->super_copy, bh->b_data, sizeof(*fs_info->super_copy));
    2351                 :          0 :         memcpy(fs_info->super_for_commit, fs_info->super_copy,
    2352                 :            :                sizeof(*fs_info->super_for_commit));
    2353                 :            :         brelse(bh);
    2354                 :            : 
    2355                 :          0 :         memcpy(fs_info->fsid, fs_info->super_copy->fsid, BTRFS_FSID_SIZE);
    2356                 :            : 
    2357                 :            :         ret = btrfs_check_super_valid(fs_info, sb->s_flags & MS_RDONLY);
    2358                 :            :         if (ret) {
    2359                 :            :                 printk(KERN_ERR "btrfs: superblock contains fatal errors\n");
    2360                 :            :                 err = -EINVAL;
    2361                 :            :                 goto fail_alloc;
    2362                 :            :         }
    2363                 :            : 
    2364                 :          0 :         disk_super = fs_info->super_copy;
    2365         [ #  # ]:          0 :         if (!btrfs_super_root(disk_super))
    2366                 :            :                 goto fail_alloc;
    2367                 :            : 
    2368                 :            :         /* check FS state, whether FS is broken. */
    2369         [ #  # ]:          0 :         if (btrfs_super_flags(disk_super) & BTRFS_SUPER_FLAG_ERROR)
    2370                 :          0 :                 set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state);
    2371                 :            : 
    2372                 :            :         /*
    2373                 :            :          * run through our array of backup supers and setup
    2374                 :            :          * our ring pointer to the oldest one
    2375                 :            :          */
    2376                 :            :         generation = btrfs_super_generation(disk_super);
    2377                 :          0 :         find_oldest_super_backup(fs_info, generation);
    2378                 :            : 
    2379                 :            :         /*
    2380                 :            :          * In the long term, we'll store the compression type in the super
    2381                 :            :          * block, and it'll be used for per file compression control.
    2382                 :            :          */
    2383                 :          0 :         fs_info->compress_type = BTRFS_COMPRESS_ZLIB;
    2384                 :            : 
    2385                 :          0 :         ret = btrfs_parse_options(tree_root, options);
    2386         [ #  # ]:          0 :         if (ret) {
    2387                 :            :                 err = ret;
    2388                 :            :                 goto fail_alloc;
    2389                 :            :         }
    2390                 :            : 
    2391                 :          0 :         features = btrfs_super_incompat_flags(disk_super) &
    2392                 :            :                 ~BTRFS_FEATURE_INCOMPAT_SUPP;
    2393         [ #  # ]:          0 :         if (features) {
    2394                 :          0 :                 printk(KERN_ERR "BTRFS: couldn't mount because of "
    2395                 :            :                        "unsupported optional features (%Lx).\n",
    2396                 :            :                        features);
    2397                 :            :                 err = -EINVAL;
    2398                 :          0 :                 goto fail_alloc;
    2399                 :            :         }
    2400                 :            : 
    2401         [ #  # ]:          0 :         if (btrfs_super_leafsize(disk_super) !=
    2402                 :            :             btrfs_super_nodesize(disk_super)) {
    2403                 :          0 :                 printk(KERN_ERR "BTRFS: couldn't mount because metadata "
    2404                 :            :                        "blocksizes don't match.  node %d leaf %d\n",
    2405                 :            :                        btrfs_super_nodesize(disk_super),
    2406                 :            :                        btrfs_super_leafsize(disk_super));
    2407                 :            :                 err = -EINVAL;
    2408                 :          0 :                 goto fail_alloc;
    2409                 :            :         }
    2410         [ #  # ]:          0 :         if (btrfs_super_leafsize(disk_super) > BTRFS_MAX_METADATA_BLOCKSIZE) {
    2411                 :          0 :                 printk(KERN_ERR "BTRFS: couldn't mount because metadata "
    2412                 :            :                        "blocksize (%d) was too large\n",
    2413                 :            :                        btrfs_super_leafsize(disk_super));
    2414                 :            :                 err = -EINVAL;
    2415                 :          0 :                 goto fail_alloc;
    2416                 :            :         }
    2417                 :            : 
    2418                 :            :         features = btrfs_super_incompat_flags(disk_super);
    2419                 :          0 :         features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF;
    2420         [ #  # ]:          0 :         if (tree_root->fs_info->compress_type == BTRFS_COMPRESS_LZO)
    2421                 :          0 :                 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
    2422                 :            : 
    2423         [ #  # ]:          0 :         if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
    2424                 :          0 :                 printk(KERN_ERR "btrfs: has skinny extents\n");
    2425                 :            : 
    2426                 :            :         /*
    2427                 :            :          * flag our filesystem as having big metadata blocks if
    2428                 :            :          * they are bigger than the page size
    2429                 :            :          */
    2430         [ #  # ]:          0 :         if (btrfs_super_leafsize(disk_super) > PAGE_CACHE_SIZE) {
    2431         [ #  # ]:          0 :                 if (!(features & BTRFS_FEATURE_INCOMPAT_BIG_METADATA))
    2432                 :          0 :                         printk(KERN_INFO "btrfs flagging fs with big metadata feature\n");
    2433                 :          0 :                 features |= BTRFS_FEATURE_INCOMPAT_BIG_METADATA;
    2434                 :            :         }
    2435                 :            : 
    2436                 :            :         nodesize = btrfs_super_nodesize(disk_super);
    2437                 :            :         leafsize = btrfs_super_leafsize(disk_super);
    2438                 :            :         sectorsize = btrfs_super_sectorsize(disk_super);
    2439                 :            :         stripesize = btrfs_super_stripesize(disk_super);
    2440 [ #  # ][ #  # ]:          0 :         fs_info->dirty_metadata_batch = leafsize * (1 + ilog2(nr_cpu_ids));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    2441 [ #  # ][ #  # ]:          0 :         fs_info->delalloc_batch = sectorsize * 512 * (1 + ilog2(nr_cpu_ids));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    2442                 :            : 
    2443                 :            :         /*
    2444                 :            :          * mixed block groups end up with duplicate but slightly offset
    2445                 :            :          * extent buffers for the same range.  It leads to corruptions
    2446                 :            :          */
    2447 [ #  # ][ #  # ]:          0 :         if ((features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) &&
    2448                 :            :             (sectorsize != leafsize)) {
    2449                 :          0 :                 printk(KERN_WARNING "btrfs: unequal leaf/node/sector sizes "
    2450                 :            :                                 "are not allowed for mixed block groups on %s\n",
    2451                 :          0 :                                 sb->s_id);
    2452                 :          0 :                 goto fail_alloc;
    2453                 :            :         }
    2454                 :            : 
    2455                 :            :         /*
    2456                 :            :          * Needn't use the lock because there is no other task which will
    2457                 :            :          * update the flag.
    2458                 :            :          */
    2459                 :            :         btrfs_set_super_incompat_flags(disk_super, features);
    2460                 :            : 
    2461                 :            :         features = btrfs_super_compat_ro_flags(disk_super) &
    2462                 :            :                 ~BTRFS_FEATURE_COMPAT_RO_SUPP;
    2463 [ #  # ][ #  # ]:          0 :         if (!(sb->s_flags & MS_RDONLY) && features) {
    2464                 :          0 :                 printk(KERN_ERR "BTRFS: couldn't mount RDWR because of "
    2465                 :            :                        "unsupported option features (%Lx).\n",
    2466                 :            :                        features);
    2467                 :            :                 err = -EINVAL;
    2468                 :          0 :                 goto fail_alloc;
    2469                 :            :         }
    2470                 :            : 
    2471                 :          0 :         btrfs_init_workers(&fs_info->generic_worker,
    2472                 :            :                            "genwork", 1, NULL);
    2473                 :            : 
    2474                 :          0 :         btrfs_init_workers(&fs_info->workers, "worker",
    2475                 :            :                            fs_info->thread_pool_size,
    2476                 :            :                            &fs_info->generic_worker);
    2477                 :            : 
    2478                 :          0 :         btrfs_init_workers(&fs_info->delalloc_workers, "delalloc",
    2479                 :            :                            fs_info->thread_pool_size, NULL);
    2480                 :            : 
    2481                 :          0 :         btrfs_init_workers(&fs_info->flush_workers, "flush_delalloc",
    2482                 :            :                            fs_info->thread_pool_size, NULL);
    2483                 :            : 
    2484                 :          0 :         btrfs_init_workers(&fs_info->submit_workers, "submit",
    2485                 :          0 :                            min_t(u64, fs_devices->num_devices,
    2486                 :            :                            fs_info->thread_pool_size), NULL);
    2487                 :            : 
    2488                 :          0 :         btrfs_init_workers(&fs_info->caching_workers, "cache",
    2489                 :            :                            fs_info->thread_pool_size, NULL);
    2490                 :            : 
    2491                 :            :         /* a higher idle thresh on the submit workers makes it much more
    2492                 :            :          * likely that bios will be send down in a sane order to the
    2493                 :            :          * devices
    2494                 :            :          */
    2495                 :          0 :         fs_info->submit_workers.idle_thresh = 64;
    2496                 :            : 
    2497                 :          0 :         fs_info->workers.idle_thresh = 16;
    2498                 :          0 :         fs_info->workers.ordered = 1;
    2499                 :            : 
    2500                 :          0 :         fs_info->delalloc_workers.idle_thresh = 2;
    2501                 :          0 :         fs_info->delalloc_workers.ordered = 1;
    2502                 :            : 
    2503                 :          0 :         btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1,
    2504                 :            :                            &fs_info->generic_worker);
    2505                 :          0 :         btrfs_init_workers(&fs_info->endio_workers, "endio",
    2506                 :            :                            fs_info->thread_pool_size,
    2507                 :            :                            &fs_info->generic_worker);
    2508                 :          0 :         btrfs_init_workers(&fs_info->endio_meta_workers, "endio-meta",
    2509                 :            :                            fs_info->thread_pool_size,
    2510                 :            :                            &fs_info->generic_worker);
    2511                 :          0 :         btrfs_init_workers(&fs_info->endio_meta_write_workers,
    2512                 :            :                            "endio-meta-write", fs_info->thread_pool_size,
    2513                 :            :                            &fs_info->generic_worker);
    2514                 :          0 :         btrfs_init_workers(&fs_info->endio_raid56_workers,
    2515                 :            :                            "endio-raid56", fs_info->thread_pool_size,
    2516                 :            :                            &fs_info->generic_worker);
    2517                 :          0 :         btrfs_init_workers(&fs_info->rmw_workers,
    2518                 :            :                            "rmw", fs_info->thread_pool_size,
    2519                 :            :                            &fs_info->generic_worker);
    2520                 :          0 :         btrfs_init_workers(&fs_info->endio_write_workers, "endio-write",
    2521                 :            :                            fs_info->thread_pool_size,
    2522                 :            :                            &fs_info->generic_worker);
    2523                 :          0 :         btrfs_init_workers(&fs_info->endio_freespace_worker, "freespace-write",
    2524                 :            :                            1, &fs_info->generic_worker);
    2525                 :          0 :         btrfs_init_workers(&fs_info->delayed_workers, "delayed-meta",
    2526                 :            :                            fs_info->thread_pool_size,
    2527                 :            :                            &fs_info->generic_worker);
    2528                 :          0 :         btrfs_init_workers(&fs_info->readahead_workers, "readahead",
    2529                 :            :                            fs_info->thread_pool_size,
    2530                 :            :                            &fs_info->generic_worker);
    2531                 :          0 :         btrfs_init_workers(&fs_info->qgroup_rescan_workers, "qgroup-rescan", 1,
    2532                 :            :                            &fs_info->generic_worker);
    2533                 :            : 
    2534                 :            :         /*
    2535                 :            :          * endios are largely parallel and should have a very
    2536                 :            :          * low idle thresh
    2537                 :            :          */
    2538                 :          0 :         fs_info->endio_workers.idle_thresh = 4;
    2539                 :          0 :         fs_info->endio_meta_workers.idle_thresh = 4;
    2540                 :          0 :         fs_info->endio_raid56_workers.idle_thresh = 4;
    2541                 :          0 :         fs_info->rmw_workers.idle_thresh = 2;
    2542                 :            : 
    2543                 :          0 :         fs_info->endio_write_workers.idle_thresh = 2;
    2544                 :          0 :         fs_info->endio_meta_write_workers.idle_thresh = 2;
    2545                 :          0 :         fs_info->readahead_workers.idle_thresh = 2;
    2546                 :            : 
    2547                 :            :         /*
    2548                 :            :          * btrfs_start_workers can really only fail because of ENOMEM so just
    2549                 :            :          * return -ENOMEM if any of these fail.
    2550                 :            :          */
    2551                 :          0 :         ret = btrfs_start_workers(&fs_info->workers);
    2552                 :          0 :         ret |= btrfs_start_workers(&fs_info->generic_worker);
    2553                 :          0 :         ret |= btrfs_start_workers(&fs_info->submit_workers);
    2554                 :          0 :         ret |= btrfs_start_workers(&fs_info->delalloc_workers);
    2555                 :          0 :         ret |= btrfs_start_workers(&fs_info->fixup_workers);
    2556                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_workers);
    2557                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_meta_workers);
    2558                 :          0 :         ret |= btrfs_start_workers(&fs_info->rmw_workers);
    2559                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_raid56_workers);
    2560                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_meta_write_workers);
    2561                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_write_workers);
    2562                 :          0 :         ret |= btrfs_start_workers(&fs_info->endio_freespace_worker);
    2563                 :          0 :         ret |= btrfs_start_workers(&fs_info->delayed_workers);
    2564                 :          0 :         ret |= btrfs_start_workers(&fs_info->caching_workers);
    2565                 :          0 :         ret |= btrfs_start_workers(&fs_info->readahead_workers);
    2566                 :          0 :         ret |= btrfs_start_workers(&fs_info->flush_workers);
    2567                 :          0 :         ret |= btrfs_start_workers(&fs_info->qgroup_rescan_workers);
    2568         [ #  # ]:          0 :         if (ret) {
    2569                 :            :                 err = -ENOMEM;
    2570                 :            :                 goto fail_sb_buffer;
    2571                 :            :         }
    2572                 :            : 
    2573                 :          0 :         fs_info->bdi.ra_pages *= btrfs_super_num_devices(disk_super);
    2574                 :          0 :         fs_info->bdi.ra_pages = max(fs_info->bdi.ra_pages,
    2575                 :            :                                     4 * 1024 * 1024 / PAGE_CACHE_SIZE);
    2576                 :            : 
    2577                 :          0 :         tree_root->nodesize = nodesize;
    2578                 :          0 :         tree_root->leafsize = leafsize;
    2579                 :          0 :         tree_root->sectorsize = sectorsize;
    2580                 :          0 :         tree_root->stripesize = stripesize;
    2581                 :            : 
    2582                 :          0 :         sb->s_blocksize = sectorsize;
    2583                 :          0 :         sb->s_blocksize_bits = blksize_bits(sectorsize);
    2584                 :            : 
    2585         [ #  # ]:          0 :         if (btrfs_super_magic(disk_super) != BTRFS_MAGIC) {
    2586                 :          0 :                 printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id);
    2587                 :          0 :                 goto fail_sb_buffer;
    2588                 :            :         }
    2589                 :            : 
    2590         [ #  # ]:          0 :         if (sectorsize != PAGE_SIZE) {
    2591                 :          0 :                 printk(KERN_WARNING "btrfs: Incompatible sector size(%lu) "
    2592                 :          0 :                        "found on %s\n", (unsigned long)sectorsize, sb->s_id);
    2593                 :          0 :                 goto fail_sb_buffer;
    2594                 :            :         }
    2595                 :            : 
    2596                 :          0 :         mutex_lock(&fs_info->chunk_mutex);
    2597                 :          0 :         ret = btrfs_read_sys_array(tree_root);
    2598                 :          0 :         mutex_unlock(&fs_info->chunk_mutex);
    2599         [ #  # ]:          0 :         if (ret) {
    2600                 :          0 :                 printk(KERN_WARNING "btrfs: failed to read the system "
    2601                 :          0 :                        "array on %s\n", sb->s_id);
    2602                 :          0 :                 goto fail_sb_buffer;
    2603                 :            :         }
    2604                 :            : 
    2605                 :            :         blocksize = btrfs_level_size(tree_root,
    2606                 :            :                                      btrfs_super_chunk_root_level(disk_super));
    2607                 :            :         generation = btrfs_super_chunk_root_generation(disk_super);
    2608                 :            : 
    2609                 :          0 :         __setup_root(nodesize, leafsize, sectorsize, stripesize,
    2610                 :            :                      chunk_root, fs_info, BTRFS_CHUNK_TREE_OBJECTID);
    2611                 :            : 
    2612                 :          0 :         chunk_root->node = read_tree_block(chunk_root,
    2613                 :            :                                            btrfs_super_chunk_root(disk_super),
    2614                 :            :                                            blocksize, generation);
    2615 [ #  # ][ #  # ]:          0 :         if (!chunk_root->node ||
    2616                 :            :             !test_bit(EXTENT_BUFFER_UPTODATE, &chunk_root->node->bflags)) {
    2617                 :          0 :                 printk(KERN_WARNING "btrfs: failed to read chunk root on %s\n",
    2618                 :          0 :                        sb->s_id);
    2619                 :          0 :                 goto fail_tree_roots;
    2620                 :            :         }
    2621                 :          0 :         btrfs_set_root_node(&chunk_root->root_item, chunk_root->node);
    2622                 :          0 :         chunk_root->commit_root = btrfs_root_node(chunk_root);
    2623                 :            : 
    2624                 :          0 :         read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid,
    2625                 :            :            btrfs_header_chunk_tree_uuid(chunk_root->node), BTRFS_UUID_SIZE);
    2626                 :            : 
    2627                 :          0 :         ret = btrfs_read_chunk_tree(chunk_root);
    2628         [ #  # ]:          0 :         if (ret) {
    2629                 :          0 :                 printk(KERN_WARNING "btrfs: failed to read chunk tree on %s\n",
    2630                 :          0 :                        sb->s_id);
    2631                 :          0 :                 goto fail_tree_roots;
    2632                 :            :         }
    2633                 :            : 
    2634                 :            :         /*
    2635                 :            :          * keep the device that is marked to be the target device for the
    2636                 :            :          * dev_replace procedure
    2637                 :            :          */
    2638                 :          0 :         btrfs_close_extra_devices(fs_info, fs_devices, 0);
    2639                 :            : 
    2640         [ #  # ]:          0 :         if (!fs_devices->latest_bdev) {
    2641                 :          0 :                 printk(KERN_CRIT "btrfs: failed to read devices on %s\n",
    2642                 :          0 :                        sb->s_id);
    2643                 :          0 :                 goto fail_tree_roots;
    2644                 :            :         }
    2645                 :            : 
    2646                 :            : retry_root_backup:
    2647                 :            :         blocksize = btrfs_level_size(tree_root,
    2648                 :            :                                      btrfs_super_root_level(disk_super));
    2649                 :            :         generation = btrfs_super_generation(disk_super);
    2650                 :            : 
    2651                 :          0 :         tree_root->node = read_tree_block(tree_root,
    2652                 :            :                                           btrfs_super_root(disk_super),
    2653                 :            :                                           blocksize, generation);
    2654 [ #  # ][ #  # ]:          0 :         if (!tree_root->node ||
    2655                 :            :             !test_bit(EXTENT_BUFFER_UPTODATE, &tree_root->node->bflags)) {
    2656                 :          0 :                 printk(KERN_WARNING "btrfs: failed to read tree root on %s\n",
    2657                 :          0 :                        sb->s_id);
    2658                 :            : 
    2659                 :          0 :                 goto recovery_tree_root;
    2660                 :            :         }
    2661                 :            : 
    2662                 :          0 :         btrfs_set_root_node(&tree_root->root_item, tree_root->node);
    2663                 :          0 :         tree_root->commit_root = btrfs_root_node(tree_root);
    2664                 :            :         btrfs_set_root_refs(&tree_root->root_item, 1);
    2665                 :            : 
    2666                 :          0 :         location.objectid = BTRFS_EXTENT_TREE_OBJECTID;
    2667                 :          0 :         location.type = BTRFS_ROOT_ITEM_KEY;
    2668                 :          0 :         location.offset = 0;
    2669                 :            : 
    2670                 :          0 :         extent_root = btrfs_read_tree_root(tree_root, &location);
    2671         [ #  # ]:          0 :         if (IS_ERR(extent_root)) {
    2672                 :            :                 ret = PTR_ERR(extent_root);
    2673                 :            :                 goto recovery_tree_root;
    2674                 :            :         }
    2675                 :          0 :         extent_root->track_dirty = 1;
    2676                 :          0 :         fs_info->extent_root = extent_root;
    2677                 :            : 
    2678                 :          0 :         location.objectid = BTRFS_DEV_TREE_OBJECTID;
    2679                 :          0 :         dev_root = btrfs_read_tree_root(tree_root, &location);
    2680         [ #  # ]:          0 :         if (IS_ERR(dev_root)) {
    2681                 :            :                 ret = PTR_ERR(dev_root);
    2682                 :            :                 goto recovery_tree_root;
    2683                 :            :         }
    2684                 :          0 :         dev_root->track_dirty = 1;
    2685                 :          0 :         fs_info->dev_root = dev_root;
    2686                 :          0 :         btrfs_init_devices_late(fs_info);
    2687                 :            : 
    2688                 :          0 :         location.objectid = BTRFS_CSUM_TREE_OBJECTID;
    2689                 :          0 :         csum_root = btrfs_read_tree_root(tree_root, &location);
    2690         [ #  # ]:          0 :         if (IS_ERR(csum_root)) {
    2691                 :            :                 ret = PTR_ERR(csum_root);
    2692                 :            :                 goto recovery_tree_root;
    2693                 :            :         }
    2694                 :          0 :         csum_root->track_dirty = 1;
    2695                 :          0 :         fs_info->csum_root = csum_root;
    2696                 :            : 
    2697                 :          0 :         location.objectid = BTRFS_QUOTA_TREE_OBJECTID;
    2698                 :          0 :         quota_root = btrfs_read_tree_root(tree_root, &location);
    2699         [ #  # ]:          0 :         if (!IS_ERR(quota_root)) {
    2700                 :          0 :                 quota_root->track_dirty = 1;
    2701                 :          0 :                 fs_info->quota_enabled = 1;
    2702                 :          0 :                 fs_info->pending_quota_state = 1;
    2703                 :          0 :                 fs_info->quota_root = quota_root;
    2704                 :            :         }
    2705                 :            : 
    2706                 :          0 :         location.objectid = BTRFS_UUID_TREE_OBJECTID;
    2707                 :          0 :         uuid_root = btrfs_read_tree_root(tree_root, &location);
    2708         [ #  # ]:          0 :         if (IS_ERR(uuid_root)) {
    2709                 :            :                 ret = PTR_ERR(uuid_root);
    2710         [ #  # ]:          0 :                 if (ret != -ENOENT)
    2711                 :            :                         goto recovery_tree_root;
    2712                 :            :                 create_uuid_tree = true;
    2713                 :            :                 check_uuid_tree = false;
    2714                 :            :         } else {
    2715                 :          0 :                 uuid_root->track_dirty = 1;
    2716                 :          0 :                 fs_info->uuid_root = uuid_root;
    2717                 :            :                 create_uuid_tree = false;
    2718                 :          0 :                 check_uuid_tree =
    2719                 :            :                     generation != btrfs_super_uuid_tree_generation(disk_super);
    2720                 :            :         }
    2721                 :            : 
    2722                 :          0 :         fs_info->generation = generation;
    2723                 :          0 :         fs_info->last_trans_committed = generation;
    2724                 :            : 
    2725                 :          0 :         ret = btrfs_recover_balance(fs_info);
    2726         [ #  # ]:          0 :         if (ret) {
    2727                 :          0 :                 printk(KERN_WARNING "btrfs: failed to recover balance\n");
    2728                 :          0 :                 goto fail_block_groups;
    2729                 :            :         }
    2730                 :            : 
    2731                 :          0 :         ret = btrfs_init_dev_stats(fs_info);
    2732         [ #  # ]:          0 :         if (ret) {
    2733                 :          0 :                 printk(KERN_ERR "btrfs: failed to init dev_stats: %d\n",
    2734                 :            :                        ret);
    2735                 :          0 :                 goto fail_block_groups;
    2736                 :            :         }
    2737                 :            : 
    2738                 :          0 :         ret = btrfs_init_dev_replace(fs_info);
    2739         [ #  # ]:          0 :         if (ret) {
    2740                 :          0 :                 pr_err("btrfs: failed to init dev_replace: %d\n", ret);
    2741                 :          0 :                 goto fail_block_groups;
    2742                 :            :         }
    2743                 :            : 
    2744                 :          0 :         btrfs_close_extra_devices(fs_info, fs_devices, 1);
    2745                 :            : 
    2746                 :          0 :         ret = btrfs_init_space_info(fs_info);
    2747         [ #  # ]:          0 :         if (ret) {
    2748                 :          0 :                 printk(KERN_ERR "Failed to initial space info: %d\n", ret);
    2749                 :          0 :                 goto fail_block_groups;
    2750                 :            :         }
    2751                 :            : 
    2752                 :          0 :         ret = btrfs_read_block_groups(extent_root);
    2753         [ #  # ]:          0 :         if (ret) {
    2754                 :          0 :                 printk(KERN_ERR "Failed to read block groups: %d\n", ret);
    2755                 :          0 :                 goto fail_block_groups;
    2756                 :            :         }
    2757                 :          0 :         fs_info->num_tolerated_disk_barrier_failures =
    2758                 :          0 :                 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info);
    2759         [ #  # ]:          0 :         if (fs_info->fs_devices->missing_devices >
    2760         [ #  # ]:          0 :              fs_info->num_tolerated_disk_barrier_failures &&
    2761                 :          0 :             !(sb->s_flags & MS_RDONLY)) {
    2762                 :          0 :                 printk(KERN_WARNING
    2763                 :            :                        "Btrfs: too many missing devices, writeable mount is not allowed\n");
    2764                 :          0 :                 goto fail_block_groups;
    2765                 :            :         }
    2766                 :            : 
    2767         [ #  # ]:          0 :         fs_info->cleaner_kthread = kthread_run(cleaner_kthread, tree_root,
    2768                 :            :                                                "btrfs-cleaner");
    2769         [ #  # ]:          0 :         if (IS_ERR(fs_info->cleaner_kthread))
    2770                 :            :                 goto fail_block_groups;
    2771                 :            : 
    2772         [ #  # ]:          0 :         fs_info->transaction_kthread = kthread_run(transaction_kthread,
    2773                 :            :                                                    tree_root,
    2774                 :            :                                                    "btrfs-transaction");
    2775         [ #  # ]:          0 :         if (IS_ERR(fs_info->transaction_kthread))
    2776                 :            :                 goto fail_cleaner;
    2777                 :            : 
    2778         [ #  # ]:          0 :         if (!btrfs_test_opt(tree_root, SSD) &&
    2779         [ #  # ]:          0 :             !btrfs_test_opt(tree_root, NOSSD) &&
    2780                 :          0 :             !fs_info->fs_devices->rotating) {
    2781                 :          0 :                 printk(KERN_INFO "Btrfs detected SSD devices, enabling SSD "
    2782                 :            :                        "mode\n");
    2783                 :          0 :                 btrfs_set_opt(fs_info->mount_opt, SSD);
    2784                 :            :         }
    2785                 :            : 
    2786                 :            : #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
    2787                 :            :         if (btrfs_test_opt(tree_root, CHECK_INTEGRITY)) {
    2788                 :            :                 ret = btrfsic_mount(tree_root, fs_devices,
    2789                 :            :                                     btrfs_test_opt(tree_root,
    2790                 :            :                                         CHECK_INTEGRITY_INCLUDING_EXTENT_DATA) ?
    2791                 :            :                                     1 : 0,
    2792                 :            :                                     fs_info->check_integrity_print_mask);
    2793                 :            :                 if (ret)
    2794                 :            :                         printk(KERN_WARNING "btrfs: failed to initialize"
    2795                 :            :                                " integrity check module %s\n", sb->s_id);
    2796                 :            :         }
    2797                 :            : #endif
    2798                 :          0 :         ret = btrfs_read_qgroup_config(fs_info);
    2799         [ #  # ]:          0 :         if (ret)
    2800                 :            :                 goto fail_trans_kthread;
    2801                 :            : 
    2802                 :            :         /* do not make disk changes in broken FS */
    2803         [ #  # ]:          0 :         if (btrfs_super_log_root(disk_super) != 0) {
    2804                 :            :                 u64 bytenr = btrfs_super_log_root(disk_super);
    2805                 :            : 
    2806         [ #  # ]:          0 :                 if (fs_devices->rw_devices == 0) {
    2807                 :          0 :                         printk(KERN_WARNING "Btrfs log replay required "
    2808                 :            :                                "on RO media\n");
    2809                 :            :                         err = -EIO;
    2810                 :          0 :                         goto fail_qgroup;
    2811                 :            :                 }
    2812                 :            :                 blocksize =
    2813                 :            :                      btrfs_level_size(tree_root,
    2814                 :            :                                       btrfs_super_log_root_level(disk_super));
    2815                 :            : 
    2816                 :          0 :                 log_tree_root = btrfs_alloc_root(fs_info);
    2817         [ #  # ]:          0 :                 if (!log_tree_root) {
    2818                 :            :                         err = -ENOMEM;
    2819                 :            :                         goto fail_qgroup;
    2820                 :            :                 }
    2821                 :            : 
    2822                 :          0 :                 __setup_root(nodesize, leafsize, sectorsize, stripesize,
    2823                 :            :                              log_tree_root, fs_info, BTRFS_TREE_LOG_OBJECTID);
    2824                 :            : 
    2825                 :          0 :                 log_tree_root->node = read_tree_block(tree_root, bytenr,
    2826                 :            :                                                       blocksize,
    2827                 :            :                                                       generation + 1);
    2828   [ #  #  #  # ]:          0 :                 if (!log_tree_root->node ||
    2829                 :          0 :                     !extent_buffer_uptodate(log_tree_root->node)) {
    2830                 :          0 :                         printk(KERN_ERR "btrfs: failed to read log tree\n");
    2831                 :          0 :                         free_extent_buffer(log_tree_root->node);
    2832                 :          0 :                         kfree(log_tree_root);
    2833                 :          0 :                         goto fail_trans_kthread;
    2834                 :            :                 }
    2835                 :            :                 /* returns with log_tree_root freed on success */
    2836                 :          0 :                 ret = btrfs_recover_log_trees(log_tree_root);
    2837         [ #  # ]:          0 :                 if (ret) {
    2838                 :          0 :                         btrfs_error(tree_root->fs_info, ret,
    2839                 :            :                                     "Failed to recover log tree");
    2840                 :          0 :                         free_extent_buffer(log_tree_root->node);
    2841                 :          0 :                         kfree(log_tree_root);
    2842                 :          0 :                         goto fail_trans_kthread;
    2843                 :            :                 }
    2844                 :            : 
    2845         [ #  # ]:          0 :                 if (sb->s_flags & MS_RDONLY) {
    2846                 :          0 :                         ret = btrfs_commit_super(tree_root);
    2847         [ #  # ]:          0 :                         if (ret)
    2848                 :            :                                 goto fail_trans_kthread;
    2849                 :            :                 }
    2850                 :            :         }
    2851                 :            : 
    2852                 :          0 :         ret = btrfs_find_orphan_roots(tree_root);
    2853         [ #  # ]:          0 :         if (ret)
    2854                 :            :                 goto fail_trans_kthread;
    2855                 :            : 
    2856         [ #  # ]:          0 :         if (!(sb->s_flags & MS_RDONLY)) {
    2857                 :          0 :                 ret = btrfs_cleanup_fs_roots(fs_info);
    2858         [ #  # ]:          0 :                 if (ret)
    2859                 :            :                         goto fail_trans_kthread;
    2860                 :            : 
    2861                 :          0 :                 ret = btrfs_recover_relocation(tree_root);
    2862         [ #  # ]:          0 :                 if (ret < 0) {
    2863                 :          0 :                         printk(KERN_WARNING
    2864                 :            :                                "btrfs: failed to recover relocation\n");
    2865                 :            :                         err = -EINVAL;
    2866                 :          0 :                         goto fail_qgroup;
    2867                 :            :                 }
    2868                 :            :         }
    2869                 :            : 
    2870                 :          0 :         location.objectid = BTRFS_FS_TREE_OBJECTID;
    2871                 :          0 :         location.type = BTRFS_ROOT_ITEM_KEY;
    2872                 :          0 :         location.offset = 0;
    2873                 :            : 
    2874                 :          0 :         fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location);
    2875         [ #  # ]:          0 :         if (IS_ERR(fs_info->fs_root)) {
    2876                 :            :                 err = PTR_ERR(fs_info->fs_root);
    2877                 :          0 :                 goto fail_qgroup;
    2878                 :            :         }
    2879                 :            : 
    2880         [ #  # ]:          0 :         if (sb->s_flags & MS_RDONLY)
    2881                 :            :                 return 0;
    2882                 :            : 
    2883                 :          0 :         down_read(&fs_info->cleanup_work_sem);
    2884 [ #  # ][ #  # ]:          0 :         if ((ret = btrfs_orphan_cleanup(fs_info->fs_root)) ||
    2885                 :          0 :             (ret = btrfs_orphan_cleanup(fs_info->tree_root))) {
    2886                 :          0 :                 up_read(&fs_info->cleanup_work_sem);
    2887                 :          0 :                 close_ctree(tree_root);
    2888                 :          0 :                 return ret;
    2889                 :            :         }
    2890                 :          0 :         up_read(&fs_info->cleanup_work_sem);
    2891                 :            : 
    2892                 :          0 :         ret = btrfs_resume_balance_async(fs_info);
    2893         [ #  # ]:          0 :         if (ret) {
    2894                 :          0 :                 printk(KERN_WARNING "btrfs: failed to resume balance\n");
    2895                 :          0 :                 close_ctree(tree_root);
    2896                 :          0 :                 return ret;
    2897                 :            :         }
    2898                 :            : 
    2899                 :          0 :         ret = btrfs_resume_dev_replace_async(fs_info);
    2900         [ #  # ]:          0 :         if (ret) {
    2901                 :          0 :                 pr_warn("btrfs: failed to resume dev_replace\n");
    2902                 :          0 :                 close_ctree(tree_root);
    2903                 :          0 :                 return ret;
    2904                 :            :         }
    2905                 :            : 
    2906                 :          0 :         btrfs_qgroup_rescan_resume(fs_info);
    2907                 :            : 
    2908         [ #  # ]:          0 :         if (create_uuid_tree) {
    2909                 :          0 :                 pr_info("btrfs: creating UUID tree\n");
    2910                 :          0 :                 ret = btrfs_create_uuid_tree(fs_info);
    2911         [ #  # ]:          0 :                 if (ret) {
    2912                 :          0 :                         pr_warn("btrfs: failed to create the UUID tree %d\n",
    2913                 :            :                                 ret);
    2914                 :          0 :                         close_ctree(tree_root);
    2915                 :          0 :                         return ret;
    2916                 :            :                 }
    2917 [ #  # ][ #  # ]:          0 :         } else if (check_uuid_tree ||
    2918                 :          0 :                    btrfs_test_opt(tree_root, RESCAN_UUID_TREE)) {
    2919                 :          0 :                 pr_info("btrfs: checking UUID tree\n");
    2920                 :          0 :                 ret = btrfs_check_uuid_tree(fs_info);
    2921         [ #  # ]:          0 :                 if (ret) {
    2922                 :          0 :                         pr_warn("btrfs: failed to check the UUID tree %d\n",
    2923                 :            :                                 ret);
    2924                 :          0 :                         close_ctree(tree_root);
    2925                 :          0 :                         return ret;
    2926                 :            :                 }
    2927                 :            :         } else {
    2928                 :          0 :                 fs_info->update_uuid_tree_gen = 1;
    2929                 :            :         }
    2930                 :            : 
    2931                 :            :         return 0;
    2932                 :            : 
    2933                 :            : fail_qgroup:
    2934                 :          0 :         btrfs_free_qgroup_config(fs_info);
    2935                 :            : fail_trans_kthread:
    2936                 :          0 :         kthread_stop(fs_info->transaction_kthread);
    2937                 :          0 :         btrfs_cleanup_transaction(fs_info->tree_root);
    2938                 :          0 :         del_fs_roots(fs_info);
    2939                 :            : fail_cleaner:
    2940                 :          0 :         kthread_stop(fs_info->cleaner_kthread);
    2941                 :            : 
    2942                 :            :         /*
    2943                 :            :          * make sure we're done with the btree inode before we stop our
    2944                 :            :          * kthreads
    2945                 :            :          */
    2946                 :          0 :         filemap_write_and_wait(fs_info->btree_inode->i_mapping);
    2947                 :            : 
    2948                 :            : fail_block_groups:
    2949                 :          0 :         btrfs_put_block_group_cache(fs_info);
    2950                 :          0 :         btrfs_free_block_groups(fs_info);
    2951                 :            : 
    2952                 :            : fail_tree_roots:
    2953                 :          0 :         free_root_pointers(fs_info, 1);
    2954                 :          0 :         invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
    2955                 :            : 
    2956                 :            : fail_sb_buffer:
    2957                 :          0 :         btrfs_stop_all_workers(fs_info);
    2958                 :            : fail_alloc:
    2959                 :            : fail_iput:
    2960                 :          0 :         btrfs_mapping_tree_free(&fs_info->mapping_tree);
    2961                 :            : 
    2962                 :          0 :         iput(fs_info->btree_inode);
    2963                 :            : fail_delalloc_bytes:
    2964                 :          0 :         percpu_counter_destroy(&fs_info->delalloc_bytes);
    2965                 :            : fail_dirty_metadata_bytes:
    2966                 :          0 :         percpu_counter_destroy(&fs_info->dirty_metadata_bytes);
    2967                 :            : fail_bdi:
    2968                 :          0 :         bdi_destroy(&fs_info->bdi);
    2969                 :            : fail_srcu:
    2970                 :          0 :         cleanup_srcu_struct(&fs_info->subvol_srcu);
    2971                 :            : fail:
    2972                 :          0 :         btrfs_free_stripe_hash_table(fs_info);
    2973                 :          0 :         btrfs_close_devices(fs_info->fs_devices);
    2974                 :          0 :         return err;
    2975                 :            : 
    2976                 :            : recovery_tree_root:
    2977         [ #  # ]:          0 :         if (!btrfs_test_opt(tree_root, RECOVERY))
    2978                 :            :                 goto fail_tree_roots;
    2979                 :            : 
    2980                 :          0 :         free_root_pointers(fs_info, 0);
    2981                 :            : 
    2982                 :            :         /* don't use the log in recovery mode, it won't be valid */
    2983                 :            :         btrfs_set_super_log_root(disk_super, 0);
    2984                 :            : 
    2985                 :            :         /* we can't trust the free space cache either */
    2986                 :          0 :         btrfs_set_opt(fs_info->mount_opt, CLEAR_CACHE);
    2987                 :            : 
    2988                 :          0 :         ret = next_root_backup(fs_info, fs_info->super_copy,
    2989                 :            :                                &num_backups_tried, &backup_index);
    2990         [ #  # ]:          0 :         if (ret == -1)
    2991                 :            :                 goto fail_block_groups;
    2992                 :            :         goto retry_root_backup;
    2993                 :            : }
    2994                 :            : 
    2995                 :          0 : static void btrfs_end_buffer_write_sync(struct buffer_head *bh, int uptodate)
    2996                 :            : {
    2997         [ #  # ]:          0 :         if (uptodate) {
    2998                 :            :                 set_buffer_uptodate(bh);
    2999                 :            :         } else {
    3000                 :          0 :                 struct btrfs_device *device = (struct btrfs_device *)
    3001                 :            :                         bh->b_private;
    3002                 :            : 
    3003         [ #  # ]:          0 :                 printk_ratelimited_in_rcu(KERN_WARNING "lost page write due to "
    3004                 :            :                                           "I/O error on %s\n",
    3005                 :            :                                           rcu_str_deref(device->name));
    3006                 :            :                 /* note, we dont' set_buffer_write_io_error because we have
    3007                 :            :                  * our own ways of dealing with the IO errors
    3008                 :            :                  */
    3009                 :            :                 clear_buffer_uptodate(bh);
    3010                 :          0 :                 btrfs_dev_stat_inc_and_print(device, BTRFS_DEV_STAT_WRITE_ERRS);
    3011                 :            :         }
    3012                 :          0 :         unlock_buffer(bh);
    3013                 :            :         put_bh(bh);
    3014                 :          0 : }
    3015                 :            : 
    3016                 :          0 : struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)
    3017                 :            : {
    3018                 :            :         struct buffer_head *bh;
    3019                 :            :         struct buffer_head *latest = NULL;
    3020                 :            :         struct btrfs_super_block *super;
    3021                 :            :         int i;
    3022                 :            :         u64 transid = 0;
    3023                 :            :         u64 bytenr;
    3024                 :            : 
    3025                 :            :         /* we would like to check all the supers, but that would make
    3026                 :            :          * a btrfs mount succeed after a mkfs from a different FS.
    3027                 :            :          * So, we need to add a special mount option to scan for
    3028                 :            :          * later supers, using BTRFS_SUPER_MIRROR_MAX instead
    3029                 :            :          */
    3030         [ #  # ]:          0 :         for (i = 0; i < 1; i++) {
    3031                 :            :                 bytenr = btrfs_sb_offset(i);
    3032         [ #  # ]:          0 :                 if (bytenr + BTRFS_SUPER_INFO_SIZE >=
    3033                 :          0 :                                         i_size_read(bdev->bd_inode))
    3034                 :            :                         break;
    3035                 :          0 :                 bh = __bread(bdev, bytenr / 4096,
    3036                 :            :                                         BTRFS_SUPER_INFO_SIZE);
    3037         [ #  # ]:          0 :                 if (!bh)
    3038                 :          0 :                         continue;
    3039                 :            : 
    3040                 :          0 :                 super = (struct btrfs_super_block *)bh->b_data;
    3041 [ #  # ][ #  # ]:          0 :                 if (btrfs_super_bytenr(super) != bytenr ||
    3042                 :            :                     btrfs_super_magic(super) != BTRFS_MAGIC) {
    3043                 :            :                         brelse(bh);
    3044                 :          0 :                         continue;
    3045                 :            :                 }
    3046                 :            : 
    3047 [ #  # ][ #  # ]:          0 :                 if (!latest || btrfs_super_generation(super) > transid) {
    3048                 :            :                         brelse(latest);
    3049                 :            :                         latest = bh;
    3050                 :          0 :                         transid = btrfs_super_generation(super);
    3051                 :            :                 } else {
    3052                 :            :                         brelse(bh);
    3053                 :            :                 }
    3054                 :            :         }
    3055                 :          0 :         return latest;
    3056                 :            : }
    3057                 :            : 
    3058                 :            : /*
    3059                 :            :  * this should be called twice, once with wait == 0 and
    3060                 :            :  * once with wait == 1.  When wait == 0 is done, all the buffer heads
    3061                 :            :  * we write are pinned.
    3062                 :            :  *
    3063                 :            :  * They are released when wait == 1 is done.
    3064                 :            :  * max_mirrors must be the same for both runs, and it indicates how
    3065                 :            :  * many supers on this one device should be written.
    3066                 :            :  *
    3067                 :            :  * max_mirrors == 0 means to write them all.
    3068                 :            :  */
    3069                 :          0 : static int write_dev_supers(struct btrfs_device *device,
    3070                 :            :                             struct btrfs_super_block *sb,
    3071                 :            :                             int do_barriers, int wait, int max_mirrors)
    3072                 :            : {
    3073                 :            :         struct buffer_head *bh;
    3074                 :            :         int i;
    3075                 :            :         int ret;
    3076                 :            :         int errors = 0;
    3077                 :            :         u32 crc;
    3078                 :            :         u64 bytenr;
    3079                 :            : 
    3080         [ #  # ]:          0 :         if (max_mirrors == 0)
    3081                 :            :                 max_mirrors = BTRFS_SUPER_MIRROR_MAX;
    3082                 :            : 
    3083         [ #  # ]:          0 :         for (i = 0; i < max_mirrors; i++) {
    3084                 :            :                 bytenr = btrfs_sb_offset(i);
    3085         [ #  # ]:          0 :                 if (bytenr + BTRFS_SUPER_INFO_SIZE >= device->total_bytes)
    3086                 :            :                         break;
    3087                 :            : 
    3088         [ #  # ]:          0 :                 if (wait) {
    3089                 :          0 :                         bh = __find_get_block(device->bdev, bytenr / 4096,
    3090                 :            :                                               BTRFS_SUPER_INFO_SIZE);
    3091         [ #  # ]:          0 :                         if (!bh) {
    3092                 :          0 :                                 errors++;
    3093                 :          0 :                                 continue;
    3094                 :            :                         }
    3095                 :            :                         wait_on_buffer(bh);
    3096         [ #  # ]:          0 :                         if (!buffer_uptodate(bh))
    3097                 :          0 :                                 errors++;
    3098                 :            : 
    3099                 :            :                         /* drop our reference */
    3100                 :            :                         brelse(bh);
    3101                 :            : 
    3102                 :            :                         /* drop the reference from the wait == 0 run */
    3103                 :            :                         brelse(bh);
    3104                 :          0 :                         continue;
    3105                 :            :                 } else {
    3106                 :            :                         btrfs_set_super_bytenr(sb, bytenr);
    3107                 :            : 
    3108                 :            :                         crc = ~(u32)0;
    3109                 :          0 :                         crc = btrfs_csum_data((char *)sb +
    3110                 :            :                                               BTRFS_CSUM_SIZE, crc,
    3111                 :            :                                               BTRFS_SUPER_INFO_SIZE -
    3112                 :            :                                               BTRFS_CSUM_SIZE);
    3113                 :            :                         btrfs_csum_final(crc, sb->csum);
    3114                 :            : 
    3115                 :            :                         /*
    3116                 :            :                          * one reference for us, and we leave it for the
    3117                 :            :                          * caller
    3118                 :            :                          */
    3119                 :          0 :                         bh = __getblk(device->bdev, bytenr / 4096,
    3120                 :            :                                       BTRFS_SUPER_INFO_SIZE);
    3121         [ #  # ]:          0 :                         if (!bh) {
    3122                 :          0 :                                 printk(KERN_ERR "btrfs: couldn't get super "
    3123                 :            :                                        "buffer head for bytenr %Lu\n", bytenr);
    3124                 :          0 :                                 errors++;
    3125                 :          0 :                                 continue;
    3126                 :            :                         }
    3127                 :            : 
    3128                 :          0 :                         memcpy(bh->b_data, sb, BTRFS_SUPER_INFO_SIZE);
    3129                 :            : 
    3130                 :            :                         /* one reference for submit_bh */
    3131                 :            :                         get_bh(bh);
    3132                 :            : 
    3133                 :            :                         set_buffer_uptodate(bh);
    3134                 :            :                         lock_buffer(bh);
    3135                 :          0 :                         bh->b_end_io = btrfs_end_buffer_write_sync;
    3136                 :          0 :                         bh->b_private = device;
    3137                 :            :                 }
    3138                 :            : 
    3139                 :            :                 /*
    3140                 :            :                  * we fua the first super.  The others we allow
    3141                 :            :                  * to go down lazy.
    3142                 :            :                  */
    3143                 :          0 :                 ret = btrfsic_submit_bh(WRITE_FUA, bh);
    3144         [ #  # ]:          0 :                 if (ret)
    3145                 :          0 :                         errors++;
    3146                 :            :         }
    3147         [ #  # ]:          0 :         return errors < i ? 0 : -1;
    3148                 :            : }
    3149                 :            : 
    3150                 :            : /*
    3151                 :            :  * endio for the write_dev_flush, this will wake anyone waiting
    3152                 :            :  * for the barrier when it is done
    3153                 :            :  */
    3154                 :          0 : static void btrfs_end_empty_barrier(struct bio *bio, int err)
    3155                 :            : {
    3156         [ #  # ]:          0 :         if (err) {
    3157         [ #  # ]:          0 :                 if (err == -EOPNOTSUPP)
    3158                 :          0 :                         set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
    3159                 :          0 :                 clear_bit(BIO_UPTODATE, &bio->bi_flags);
    3160                 :            :         }
    3161         [ #  # ]:          0 :         if (bio->bi_private)
    3162                 :          0 :                 complete(bio->bi_private);
    3163                 :          0 :         bio_put(bio);
    3164                 :          0 : }
    3165                 :            : 
    3166                 :            : /*
    3167                 :            :  * trigger flushes for one the devices.  If you pass wait == 0, the flushes are
    3168                 :            :  * sent down.  With wait == 1, it waits for the previous flush.
    3169                 :            :  *
    3170                 :            :  * any device where the flush fails with eopnotsupp are flagged as not-barrier
    3171                 :            :  * capable
    3172                 :            :  */
    3173                 :          0 : static int write_dev_flush(struct btrfs_device *device, int wait)
    3174                 :            : {
    3175                 :            :         struct bio *bio;
    3176                 :            :         int ret = 0;
    3177                 :            : 
    3178         [ #  # ]:          0 :         if (device->nobarriers)
    3179                 :            :                 return 0;
    3180                 :            : 
    3181         [ #  # ]:          0 :         if (wait) {
    3182                 :          0 :                 bio = device->flush_bio;
    3183         [ #  # ]:          0 :                 if (!bio)
    3184                 :            :                         return 0;
    3185                 :            : 
    3186                 :          0 :                 wait_for_completion(&device->flush_wait);
    3187                 :            : 
    3188         [ #  # ]:          0 :                 if (bio_flagged(bio, BIO_EOPNOTSUPP)) {
    3189                 :          0 :                         printk_in_rcu("btrfs: disabling barriers on dev %s\n",
    3190                 :            :                                       rcu_str_deref(device->name));
    3191                 :          0 :                         device->nobarriers = 1;
    3192         [ #  # ]:          0 :                 } else if (!bio_flagged(bio, BIO_UPTODATE)) {
    3193                 :            :                         ret = -EIO;
    3194                 :          0 :                         btrfs_dev_stat_inc_and_print(device,
    3195                 :            :                                 BTRFS_DEV_STAT_FLUSH_ERRS);
    3196                 :            :                 }
    3197                 :            : 
    3198                 :            :                 /* drop the reference from the wait == 0 run */
    3199                 :          0 :                 bio_put(bio);
    3200                 :          0 :                 device->flush_bio = NULL;
    3201                 :            : 
    3202                 :          0 :                 return ret;
    3203                 :            :         }
    3204                 :            : 
    3205                 :            :         /*
    3206                 :            :          * one reference for us, and we leave it for the
    3207                 :            :          * caller
    3208                 :            :          */
    3209                 :          0 :         device->flush_bio = NULL;
    3210                 :          0 :         bio = btrfs_io_bio_alloc(GFP_NOFS, 0);
    3211         [ #  # ]:          0 :         if (!bio)
    3212                 :            :                 return -ENOMEM;
    3213                 :            : 
    3214                 :          0 :         bio->bi_end_io = btrfs_end_empty_barrier;
    3215                 :          0 :         bio->bi_bdev = device->bdev;
    3216                 :            :         init_completion(&device->flush_wait);
    3217                 :          0 :         bio->bi_private = &device->flush_wait;
    3218                 :          0 :         device->flush_bio = bio;
    3219                 :            : 
    3220                 :          0 :         bio_get(bio);
    3221                 :          0 :         btrfsic_submit_bio(WRITE_FLUSH, bio);
    3222                 :            : 
    3223                 :          0 :         return 0;
    3224                 :            : }
    3225                 :            : 
    3226                 :            : /*
    3227                 :            :  * send an empty flush down to each device in parallel,
    3228                 :            :  * then wait for them
    3229                 :            :  */
    3230                 :          0 : static int barrier_all_devices(struct btrfs_fs_info *info)
    3231                 :            : {
    3232                 :            :         struct list_head *head;
    3233                 :            :         struct btrfs_device *dev;
    3234                 :            :         int errors_send = 0;
    3235                 :            :         int errors_wait = 0;
    3236                 :            :         int ret;
    3237                 :            : 
    3238                 :            :         /* send down all the barriers */
    3239                 :          0 :         head = &info->fs_devices->devices;
    3240         [ #  # ]:          0 :         list_for_each_entry_rcu(dev, head, dev_list) {
    3241         [ #  # ]:          0 :                 if (!dev->bdev) {
    3242                 :          0 :                         errors_send++;
    3243                 :          0 :                         continue;
    3244                 :            :                 }
    3245 [ #  # ][ #  # ]:          0 :                 if (!dev->in_fs_metadata || !dev->writeable)
    3246                 :          0 :                         continue;
    3247                 :            : 
    3248                 :          0 :                 ret = write_dev_flush(dev, 0);
    3249         [ #  # ]:          0 :                 if (ret)
    3250                 :          0 :                         errors_send++;
    3251                 :            :         }
    3252                 :            : 
    3253                 :            :         /* wait for all the barriers */
    3254         [ #  # ]:          0 :         list_for_each_entry_rcu(dev, head, dev_list) {
    3255         [ #  # ]:          0 :                 if (!dev->bdev) {
    3256                 :          0 :                         errors_wait++;
    3257                 :          0 :                         continue;
    3258                 :            :                 }
    3259 [ #  # ][ #  # ]:          0 :                 if (!dev->in_fs_metadata || !dev->writeable)
    3260                 :          0 :                         continue;
    3261                 :            : 
    3262                 :          0 :                 ret = write_dev_flush(dev, 1);
    3263         [ #  # ]:          0 :                 if (ret)
    3264                 :          0 :                         errors_wait++;
    3265                 :            :         }
    3266 [ #  # ][ #  # ]:          0 :         if (errors_send > info->num_tolerated_disk_barrier_failures ||
    3267                 :            :             errors_wait > info->num_tolerated_disk_barrier_failures)
    3268                 :            :                 return -EIO;
    3269                 :            :         return 0;
    3270                 :            : }
    3271                 :            : 
    3272                 :          0 : int btrfs_calc_num_tolerated_disk_barrier_failures(
    3273                 :            :         struct btrfs_fs_info *fs_info)
    3274                 :            : {
    3275                 :            :         struct btrfs_ioctl_space_info space;
    3276                 :            :         struct btrfs_space_info *sinfo;
    3277                 :          0 :         u64 types[] = {BTRFS_BLOCK_GROUP_DATA,
    3278                 :            :                        BTRFS_BLOCK_GROUP_SYSTEM,
    3279                 :            :                        BTRFS_BLOCK_GROUP_METADATA,
    3280                 :            :                        BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA};
    3281                 :            :         int num_types = 4;
    3282                 :            :         int i;
    3283                 :            :         int c;
    3284                 :          0 :         int num_tolerated_disk_barrier_failures =
    3285                 :          0 :                 (int)fs_info->fs_devices->num_devices;
    3286                 :            : 
    3287         [ #  # ]:          0 :         for (i = 0; i < num_types; i++) {
    3288                 :            :                 struct btrfs_space_info *tmp;
    3289                 :            : 
    3290                 :            :                 sinfo = NULL;
    3291                 :            :                 rcu_read_lock();
    3292         [ #  # ]:          0 :                 list_for_each_entry_rcu(tmp, &fs_info->space_info, list) {
    3293         [ #  # ]:          0 :                         if (tmp->flags == types[i]) {
    3294                 :            :                                 sinfo = tmp;
    3295                 :            :                                 break;
    3296                 :            :                         }
    3297                 :            :                 }
    3298                 :            :                 rcu_read_unlock();
    3299                 :            : 
    3300         [ #  # ]:          0 :                 if (!sinfo)
    3301                 :          0 :                         continue;
    3302                 :            : 
    3303                 :          0 :                 down_read(&sinfo->groups_sem);
    3304         [ #  # ]:          0 :                 for (c = 0; c < BTRFS_NR_RAID_TYPES; c++) {
    3305         [ #  # ]:          0 :                         if (!list_empty(&sinfo->block_groups[c])) {
    3306                 :            :                                 u64 flags;
    3307                 :            : 
    3308                 :          0 :                                 btrfs_get_block_group_info(
    3309                 :            :                                         &sinfo->block_groups[c], &space);
    3310 [ #  # ][ #  # ]:          0 :                                 if (space.total_bytes == 0 ||
    3311                 :          0 :                                     space.used_bytes == 0)
    3312                 :          0 :                                         continue;
    3313                 :          0 :                                 flags = space.flags;
    3314                 :            :                                 /*
    3315                 :            :                                  * return
    3316                 :            :                                  * 0: if dup, single or RAID0 is configured for
    3317                 :            :                                  *    any of metadata, system or data, else
    3318                 :            :                                  * 1: if RAID5 is configured, or if RAID1 or
    3319                 :            :                                  *    RAID10 is configured and only two mirrors
    3320                 :            :                                  *    are used, else
    3321                 :            :                                  * 2: if RAID6 is configured, else
    3322                 :            :                                  * num_mirrors - 1: if RAID1 or RAID10 is
    3323                 :            :                                  *                  configured and more than
    3324                 :            :                                  *                  2 mirrors are used.
    3325                 :            :                                  */
    3326 [ #  # ][ #  # ]:          0 :                                 if (num_tolerated_disk_barrier_failures > 0 &&
    3327                 :          0 :                                     ((flags & (BTRFS_BLOCK_GROUP_DUP |
    3328         [ #  # ]:          0 :                                                BTRFS_BLOCK_GROUP_RAID0)) ||
    3329                 :          0 :                                      ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK)
    3330                 :            :                                       == 0)))
    3331                 :            :                                         num_tolerated_disk_barrier_failures = 0;
    3332         [ #  # ]:          0 :                                 else if (num_tolerated_disk_barrier_failures > 1) {
    3333         [ #  # ]:          0 :                                         if (flags & (BTRFS_BLOCK_GROUP_RAID1 |
    3334                 :            :                                             BTRFS_BLOCK_GROUP_RAID5 |
    3335                 :            :                                             BTRFS_BLOCK_GROUP_RAID10)) {
    3336                 :            :                                                 num_tolerated_disk_barrier_failures = 1;
    3337         [ #  # ]:          0 :                                         } else if (flags &
    3338                 :            :                                                    BTRFS_BLOCK_GROUP_RAID6) {
    3339                 :            :                                                 num_tolerated_disk_barrier_failures = 2;
    3340                 :            :                                         }
    3341                 :            :                                 }
    3342                 :            :                         }
    3343                 :            :                 }
    3344                 :          0 :                 up_read(&sinfo->groups_sem);
    3345                 :            :         }
    3346                 :            : 
    3347                 :          0 :         return num_tolerated_disk_barrier_failures;
    3348                 :            : }
    3349                 :            : 
    3350                 :          0 : static int write_all_supers(struct btrfs_root *root, int max_mirrors)
    3351                 :            : {
    3352                 :            :         struct list_head *head;
    3353                 :            :         struct btrfs_device *dev;
    3354                 :            :         struct btrfs_super_block *sb;
    3355                 :            :         struct btrfs_dev_item *dev_item;
    3356                 :            :         int ret;
    3357                 :            :         int do_barriers;
    3358                 :            :         int max_errors;
    3359                 :            :         int total_errors = 0;
    3360                 :            :         u64 flags;
    3361                 :            : 
    3362                 :          0 :         do_barriers = !btrfs_test_opt(root, NOBARRIER);
    3363                 :          0 :         backup_super_roots(root->fs_info);
    3364                 :            : 
    3365                 :          0 :         sb = root->fs_info->super_for_commit;
    3366                 :            :         dev_item = &sb->dev_item;
    3367                 :            : 
    3368                 :          0 :         mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
    3369                 :          0 :         head = &root->fs_info->fs_devices->devices;
    3370                 :          0 :         max_errors = btrfs_super_num_devices(root->fs_info->super_copy) - 1;
    3371                 :            : 
    3372         [ #  # ]:          0 :         if (do_barriers) {
    3373                 :          0 :                 ret = barrier_all_devices(root->fs_info);
    3374         [ #  # ]:          0 :                 if (ret) {
    3375                 :          0 :                         mutex_unlock(
    3376                 :          0 :                                 &root->fs_info->fs_devices->device_list_mutex);
    3377                 :          0 :                         btrfs_error(root->fs_info, ret,
    3378                 :            :                                     "errors while submitting device barriers.");
    3379                 :            :                         return ret;
    3380                 :            :                 }
    3381                 :            :         }
    3382                 :            : 
    3383         [ #  # ]:          0 :         list_for_each_entry_rcu(dev, head, dev_list) {
    3384         [ #  # ]:          0 :                 if (!dev->bdev) {
    3385                 :          0 :                         total_errors++;
    3386                 :          0 :                         continue;
    3387                 :            :                 }
    3388 [ #  # ][ #  # ]:          0 :                 if (!dev->in_fs_metadata || !dev->writeable)
    3389                 :          0 :                         continue;
    3390                 :            : 
    3391                 :            :                 btrfs_set_stack_device_generation(dev_item, 0);
    3392                 :          0 :                 btrfs_set_stack_device_type(dev_item, dev->type);
    3393                 :          0 :                 btrfs_set_stack_device_id(dev_item, dev->devid);
    3394                 :          0 :                 btrfs_set_stack_device_total_bytes(dev_item, dev->total_bytes);
    3395                 :          0 :                 btrfs_set_stack_device_bytes_used(dev_item, dev->bytes_used);
    3396                 :          0 :                 btrfs_set_stack_device_io_align(dev_item, dev->io_align);
    3397                 :          0 :                 btrfs_set_stack_device_io_width(dev_item, dev->io_width);
    3398                 :          0 :                 btrfs_set_stack_device_sector_size(dev_item, dev->sector_size);
    3399                 :          0 :                 memcpy(dev_item->uuid, dev->uuid, BTRFS_UUID_SIZE);
    3400                 :          0 :                 memcpy(dev_item->fsid, dev->fs_devices->fsid, BTRFS_UUID_SIZE);
    3401                 :            : 
    3402                 :            :                 flags = btrfs_super_flags(sb);
    3403                 :          0 :                 btrfs_set_super_flags(sb, flags | BTRFS_HEADER_FLAG_WRITTEN);
    3404                 :            : 
    3405                 :          0 :                 ret = write_dev_supers(dev, sb, do_barriers, 0, max_mirrors);
    3406         [ #  # ]:          0 :                 if (ret)
    3407                 :          0 :                         total_errors++;
    3408                 :            :         }
    3409         [ #  # ]:          0 :         if (total_errors > max_errors) {
    3410                 :          0 :                 printk(KERN_ERR "btrfs: %d errors while writing supers\n",
    3411                 :            :                        total_errors);
    3412                 :          0 :                 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
    3413                 :            : 
    3414                 :            :                 /* FUA is masked off if unsupported and can't be the reason */
    3415                 :          0 :                 btrfs_error(root->fs_info, -EIO,
    3416                 :            :                             "%d errors while writing supers", total_errors);
    3417                 :            :                 return -EIO;
    3418                 :            :         }
    3419                 :            : 
    3420                 :            :         total_errors = 0;
    3421         [ #  # ]:          0 :         list_for_each_entry_rcu(dev, head, dev_list) {
    3422         [ #  # ]:          0 :                 if (!dev->bdev)
    3423                 :          0 :                         continue;
    3424 [ #  # ][ #  # ]:          0 :                 if (!dev->in_fs_metadata || !dev->writeable)
    3425                 :          0 :                         continue;
    3426                 :            : 
    3427                 :          0 :                 ret = write_dev_supers(dev, sb, do_barriers, 1, max_mirrors);
    3428         [ #  # ]:          0 :                 if (ret)
    3429                 :          0 :                         total_errors++;
    3430                 :            :         }
    3431                 :          0 :         mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
    3432         [ #  # ]:          0 :         if (total_errors > max_errors) {
    3433                 :          0 :                 btrfs_error(root->fs_info, -EIO,
    3434                 :            :                             "%d errors while writing supers", total_errors);
    3435                 :            :                 return -EIO;
    3436                 :            :         }
    3437                 :            :         return 0;
    3438                 :            : }
    3439                 :            : 
    3440                 :          0 : int write_ctree_super(struct btrfs_trans_handle *trans,
    3441                 :            :                       struct btrfs_root *root, int max_mirrors)
    3442                 :            : {
    3443                 :          0 :         return write_all_supers(root, max_mirrors);
    3444                 :            : }
    3445                 :            : 
    3446                 :            : /* Drop a fs root from the radix tree and free it. */
    3447                 :          0 : void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info,
    3448                 :            :                                   struct btrfs_root *root)
    3449                 :            : {
    3450                 :            :         spin_lock(&fs_info->fs_roots_radix_lock);
    3451                 :          0 :         radix_tree_delete(&fs_info->fs_roots_radix,
    3452                 :          0 :                           (unsigned long)root->root_key.objectid);
    3453                 :            :         spin_unlock(&fs_info->fs_roots_radix_lock);
    3454                 :            : 
    3455         [ #  # ]:          0 :         if (btrfs_root_refs(&root->root_item) == 0)
    3456                 :          0 :                 synchronize_srcu(&fs_info->subvol_srcu);
    3457                 :            : 
    3458         [ #  # ]:          0 :         if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
    3459                 :          0 :                 btrfs_free_log(NULL, root);
    3460                 :          0 :                 btrfs_free_log_root_tree(NULL, fs_info);
    3461                 :            :         }
    3462                 :            : 
    3463                 :          0 :         __btrfs_remove_free_space_cache(root->free_ino_pinned);
    3464                 :          0 :         __btrfs_remove_free_space_cache(root->free_ino_ctl);
    3465                 :          0 :         free_fs_root(root);
    3466                 :          0 : }
    3467                 :            : 
    3468                 :          0 : static void free_fs_root(struct btrfs_root *root)
    3469                 :            : {
    3470                 :          0 :         iput(root->cache_inode);
    3471         [ #  # ]:          0 :         WARN_ON(!RB_EMPTY_ROOT(&root->inode_tree));
    3472                 :          0 :         btrfs_free_block_rsv(root, root->orphan_block_rsv);
    3473                 :          0 :         root->orphan_block_rsv = NULL;
    3474         [ #  # ]:          0 :         if (root->anon_dev)
    3475                 :          0 :                 free_anon_bdev(root->anon_dev);
    3476                 :          0 :         free_extent_buffer(root->node);
    3477                 :          0 :         free_extent_buffer(root->commit_root);
    3478                 :          0 :         kfree(root->free_ino_ctl);
    3479                 :          0 :         kfree(root->free_ino_pinned);
    3480                 :          0 :         kfree(root->name);
    3481                 :            :         btrfs_put_fs_root(root);
    3482                 :          0 : }
    3483                 :            : 
    3484                 :          0 : void btrfs_free_fs_root(struct btrfs_root *root)
    3485                 :            : {
    3486                 :          0 :         free_fs_root(root);
    3487                 :          0 : }
    3488                 :            : 
    3489                 :          0 : int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info)
    3490                 :            : {
    3491                 :            :         u64 root_objectid = 0;
    3492                 :            :         struct btrfs_root *gang[8];
    3493                 :            :         int i;
    3494                 :            :         int ret;
    3495                 :            : 
    3496                 :            :         while (1) {
    3497                 :          0 :                 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix,
    3498                 :            :                                              (void **)gang, root_objectid,
    3499                 :            :                                              ARRAY_SIZE(gang));
    3500         [ #  # ]:          0 :                 if (!ret)
    3501                 :            :                         break;
    3502                 :            : 
    3503                 :          0 :                 root_objectid = gang[ret - 1]->root_key.objectid + 1;
    3504         [ #  # ]:          0 :                 for (i = 0; i < ret; i++) {
    3505                 :            :                         int err;
    3506                 :            : 
    3507                 :          0 :                         root_objectid = gang[i]->root_key.objectid;
    3508                 :          0 :                         err = btrfs_orphan_cleanup(gang[i]);
    3509         [ #  # ]:          0 :                         if (err)
    3510                 :            :                                 return err;
    3511                 :            :                 }
    3512                 :          0 :                 root_objectid++;
    3513                 :          0 :         }
    3514                 :            :         return 0;
    3515                 :            : }
    3516                 :            : 
    3517                 :          0 : int btrfs_commit_super(struct btrfs_root *root)
    3518                 :            : {
    3519                 :            :         struct btrfs_trans_handle *trans;
    3520                 :            : 
    3521                 :          0 :         mutex_lock(&root->fs_info->cleaner_mutex);
    3522                 :          0 :         btrfs_run_delayed_iputs(root);
    3523                 :          0 :         mutex_unlock(&root->fs_info->cleaner_mutex);
    3524                 :          0 :         wake_up_process(root->fs_info->cleaner_kthread);
    3525                 :            : 
    3526                 :            :         /* wait until ongoing cleanup work done */
    3527                 :          0 :         down_write(&root->fs_info->cleanup_work_sem);
    3528                 :          0 :         up_write(&root->fs_info->cleanup_work_sem);
    3529                 :            : 
    3530                 :          0 :         trans = btrfs_join_transaction(root);
    3531         [ #  # ]:          0 :         if (IS_ERR(trans))
    3532                 :          0 :                 return PTR_ERR(trans);
    3533                 :          0 :         return btrfs_commit_transaction(trans, root);
    3534                 :            : }
    3535                 :            : 
    3536                 :          0 : int close_ctree(struct btrfs_root *root)
    3537                 :            : {
    3538                 :          0 :         struct btrfs_fs_info *fs_info = root->fs_info;
    3539                 :            :         int ret;
    3540                 :            : 
    3541                 :          0 :         fs_info->closing = 1;
    3542                 :          0 :         smp_mb();
    3543                 :            : 
    3544                 :            :         /* wait for the uuid_scan task to finish */
    3545                 :          0 :         down(&fs_info->uuid_tree_rescan_sem);
    3546                 :            :         /* avoid complains from lockdep et al., set sem back to initial state */
    3547                 :          0 :         up(&fs_info->uuid_tree_rescan_sem);
    3548                 :            : 
    3549                 :            :         /* pause restriper - we want to resume on mount */
    3550                 :          0 :         btrfs_pause_balance(fs_info);
    3551                 :            : 
    3552                 :          0 :         btrfs_dev_replace_suspend_for_unmount(fs_info);
    3553                 :            : 
    3554                 :          0 :         btrfs_scrub_cancel(fs_info);
    3555                 :            : 
    3556                 :            :         /* wait for any defraggers to finish */
    3557 [ #  # ][ #  # ]:          0 :         wait_event(fs_info->transaction_wait,
    3558                 :            :                    (atomic_read(&fs_info->defrag_running) == 0));
    3559                 :            : 
    3560                 :            :         /* clear out the rbtree of defraggable inodes */
    3561                 :          0 :         btrfs_cleanup_defrag_inodes(fs_info);
    3562                 :            : 
    3563         [ #  # ]:          0 :         if (!(fs_info->sb->s_flags & MS_RDONLY)) {
    3564                 :          0 :                 ret = btrfs_commit_super(root);
    3565         [ #  # ]:          0 :                 if (ret)
    3566                 :          0 :                         printk(KERN_ERR "btrfs: commit super ret %d\n", ret);
    3567                 :            :         }
    3568                 :            : 
    3569         [ #  # ]:          0 :         if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state))
    3570                 :          0 :                 btrfs_error_commit_super(root);
    3571                 :            : 
    3572                 :          0 :         btrfs_put_block_group_cache(fs_info);
    3573                 :            : 
    3574                 :          0 :         kthread_stop(fs_info->transaction_kthread);
    3575                 :          0 :         kthread_stop(fs_info->cleaner_kthread);
    3576                 :            : 
    3577                 :          0 :         fs_info->closing = 2;
    3578                 :          0 :         smp_mb();
    3579                 :            : 
    3580                 :          0 :         btrfs_free_qgroup_config(root->fs_info);
    3581                 :            : 
    3582         [ #  # ]:          0 :         if (percpu_counter_sum(&fs_info->delalloc_bytes)) {
    3583                 :          0 :                 printk(KERN_INFO "btrfs: at unmount delalloc count %lld\n",
    3584                 :            :                        percpu_counter_sum(&fs_info->delalloc_bytes));
    3585                 :            :         }
    3586                 :            : 
    3587                 :          0 :         del_fs_roots(fs_info);
    3588                 :            : 
    3589                 :          0 :         btrfs_free_block_groups(fs_info);
    3590                 :            : 
    3591                 :          0 :         btrfs_stop_all_workers(fs_info);
    3592                 :            : 
    3593                 :          0 :         free_root_pointers(fs_info, 1);
    3594                 :            : 
    3595                 :          0 :         iput(fs_info->btree_inode);
    3596                 :            : 
    3597                 :            : #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
    3598                 :            :         if (btrfs_test_opt(root, CHECK_INTEGRITY))
    3599                 :            :                 btrfsic_unmount(root, fs_info->fs_devices);
    3600                 :            : #endif
    3601                 :            : 
    3602                 :          0 :         btrfs_close_devices(fs_info->fs_devices);
    3603                 :          0 :         btrfs_mapping_tree_free(&fs_info->mapping_tree);
    3604                 :            : 
    3605                 :          0 :         percpu_counter_destroy(&fs_info->dirty_metadata_bytes);
    3606                 :          0 :         percpu_counter_destroy(&fs_info->delalloc_bytes);
    3607                 :          0 :         bdi_destroy(&fs_info->bdi);
    3608                 :          0 :         cleanup_srcu_struct(&fs_info->subvol_srcu);
    3609                 :            : 
    3610                 :          0 :         btrfs_free_stripe_hash_table(fs_info);
    3611                 :            : 
    3612                 :          0 :         btrfs_free_block_rsv(root, root->orphan_block_rsv);
    3613                 :          0 :         root->orphan_block_rsv = NULL;
    3614                 :            : 
    3615                 :          0 :         return 0;
    3616                 :            : }
    3617                 :            : 
    3618                 :          0 : int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid,
    3619                 :            :                           int atomic)
    3620                 :            : {
    3621                 :            :         int ret;
    3622                 :          0 :         struct inode *btree_inode = buf->pages[0]->mapping->host;
    3623                 :            : 
    3624                 :          0 :         ret = extent_buffer_uptodate(buf);
    3625         [ #  # ]:          0 :         if (!ret)
    3626                 :            :                 return ret;
    3627                 :            : 
    3628                 :          0 :         ret = verify_parent_transid(&BTRFS_I(btree_inode)->io_tree, buf,
    3629                 :            :                                     parent_transid, atomic);
    3630         [ #  # ]:          0 :         if (ret == -EAGAIN)
    3631                 :            :                 return ret;
    3632                 :          0 :         return !ret;
    3633                 :            : }
    3634                 :            : 
    3635                 :          0 : int btrfs_set_buffer_uptodate(struct extent_buffer *buf)
    3636                 :            : {
    3637                 :          0 :         return set_extent_buffer_uptodate(buf);
    3638                 :            : }
    3639                 :            : 
    3640                 :          0 : void btrfs_mark_buffer_dirty(struct extent_buffer *buf)
    3641                 :            : {
    3642                 :            :         struct btrfs_root *root;
    3643                 :            :         u64 transid = btrfs_header_generation(buf);
    3644                 :            :         int was_dirty;
    3645                 :            : 
    3646                 :            : #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
    3647                 :            :         /*
    3648                 :            :          * This is a fast path so only do this check if we have sanity tests
    3649                 :            :          * enabled.  Normal people shouldn't be marking dummy buffers as dirty
    3650                 :            :          * outside of the sanity tests.
    3651                 :            :          */
    3652                 :            :         if (unlikely(test_bit(EXTENT_BUFFER_DUMMY, &buf->bflags)))
    3653                 :            :                 return;
    3654                 :            : #endif
    3655                 :          0 :         root = BTRFS_I(buf->pages[0]->mapping->host)->root;
    3656                 :          0 :         btrfs_assert_tree_locked(buf);
    3657         [ #  # ]:          0 :         if (transid != root->fs_info->generation)
    3658                 :          0 :                 WARN(1, KERN_CRIT "btrfs transid mismatch buffer %llu, "
    3659                 :            :                        "found %llu running %llu\n",
    3660                 :            :                         buf->start, transid, root->fs_info->generation);
    3661                 :          0 :         was_dirty = set_extent_buffer_dirty(buf);
    3662         [ #  # ]:          0 :         if (!was_dirty)
    3663                 :          0 :                 __percpu_counter_add(&root->fs_info->dirty_metadata_bytes,
    3664                 :          0 :                                      buf->len,
    3665                 :            :                                      root->fs_info->dirty_metadata_batch);
    3666                 :          0 : }
    3667                 :            : 
    3668                 :          0 : static void __btrfs_btree_balance_dirty(struct btrfs_root *root,
    3669                 :            :                                         int flush_delayed)
    3670                 :            : {
    3671                 :            :         /*
    3672                 :            :          * looks as though older kernels can get into trouble with
    3673                 :            :          * this code, they end up stuck in balance_dirty_pages forever
    3674                 :            :          */
    3675                 :            :         int ret;
    3676                 :            : 
    3677         [ #  # ]:          0 :         if (current->flags & PF_MEMALLOC)
    3678                 :            :                 return;
    3679                 :            : 
    3680         [ #  # ]:          0 :         if (flush_delayed)
    3681                 :          0 :                 btrfs_balance_delayed_items(root);
    3682                 :            : 
    3683                 :          0 :         ret = percpu_counter_compare(&root->fs_info->dirty_metadata_bytes,
    3684                 :            :                                      BTRFS_DIRTY_METADATA_THRESH);
    3685         [ #  # ]:          0 :         if (ret > 0) {
    3686                 :          0 :                 balance_dirty_pages_ratelimited(
    3687                 :          0 :                                    root->fs_info->btree_inode->i_mapping);
    3688                 :            :         }
    3689                 :            :         return;
    3690                 :            : }
    3691                 :            : 
    3692                 :          0 : void btrfs_btree_balance_dirty(struct btrfs_root *root)
    3693                 :            : {
    3694                 :          0 :         __btrfs_btree_balance_dirty(root, 1);
    3695                 :          0 : }
    3696                 :            : 
    3697                 :          0 : void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root)
    3698                 :            : {
    3699                 :          0 :         __btrfs_btree_balance_dirty(root, 0);
    3700                 :          0 : }
    3701                 :            : 
    3702                 :          0 : int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid)
    3703                 :            : {
    3704                 :          0 :         struct btrfs_root *root = BTRFS_I(buf->pages[0]->mapping->host)->root;
    3705                 :          0 :         return btree_read_extent_buffer_pages(root, buf, 0, parent_transid);
    3706                 :            : }
    3707                 :            : 
    3708                 :            : static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info,
    3709                 :            :                               int read_only)
    3710                 :            : {
    3711                 :            :         /*
    3712                 :            :          * Placeholder for checks
    3713                 :            :          */
    3714                 :            :         return 0;
    3715                 :            : }
    3716                 :            : 
    3717                 :          0 : static void btrfs_error_commit_super(struct btrfs_root *root)
    3718                 :            : {
    3719                 :          0 :         mutex_lock(&root->fs_info->cleaner_mutex);
    3720                 :          0 :         btrfs_run_delayed_iputs(root);
    3721                 :          0 :         mutex_unlock(&root->fs_info->cleaner_mutex);
    3722                 :            : 
    3723                 :          0 :         down_write(&root->fs_info->cleanup_work_sem);
    3724                 :          0 :         up_write(&root->fs_info->cleanup_work_sem);
    3725                 :            : 
    3726                 :            :         /* cleanup FS via transaction */
    3727                 :          0 :         btrfs_cleanup_transaction(root);
    3728                 :          0 : }
    3729                 :            : 
    3730                 :          0 : static void btrfs_destroy_ordered_operations(struct btrfs_transaction *t,
    3731                 :            :                                              struct btrfs_root *root)
    3732                 :            : {
    3733                 :            :         struct btrfs_inode *btrfs_inode;
    3734                 :            :         struct list_head splice;
    3735                 :            : 
    3736                 :            :         INIT_LIST_HEAD(&splice);
    3737                 :            : 
    3738                 :          0 :         mutex_lock(&root->fs_info->ordered_operations_mutex);
    3739                 :          0 :         spin_lock(&root->fs_info->ordered_root_lock);
    3740                 :            : 
    3741                 :          0 :         list_splice_init(&t->ordered_operations, &splice);
    3742         [ #  # ]:          0 :         while (!list_empty(&splice)) {
    3743                 :            :                 btrfs_inode = list_entry(splice.next, struct btrfs_inode,
    3744                 :            :                                          ordered_operations);
    3745                 :            : 
    3746                 :          0 :                 list_del_init(&btrfs_inode->ordered_operations);
    3747                 :          0 :                 spin_unlock(&root->fs_info->ordered_root_lock);
    3748                 :            : 
    3749                 :          0 :                 btrfs_invalidate_inodes(btrfs_inode->root);
    3750                 :            : 
    3751                 :          0 :                 spin_lock(&root->fs_info->ordered_root_lock);
    3752                 :            :         }
    3753                 :            : 
    3754                 :          0 :         spin_unlock(&root->fs_info->ordered_root_lock);
    3755                 :          0 :         mutex_unlock(&root->fs_info->ordered_operations_mutex);
    3756                 :          0 : }
    3757                 :            : 
    3758                 :          0 : static void btrfs_destroy_ordered_extents(struct btrfs_root *root)
    3759                 :            : {
    3760                 :            :         struct btrfs_ordered_extent *ordered;
    3761                 :            : 
    3762                 :            :         spin_lock(&root->ordered_extent_lock);
    3763                 :            :         /*
    3764                 :            :          * This will just short circuit the ordered completion stuff which will
    3765                 :            :          * make sure the ordered extent gets properly cleaned up.
    3766                 :            :          */
    3767         [ #  # ]:          0 :         list_for_each_entry(ordered, &root->ordered_extents,
    3768                 :            :                             root_extent_list)
    3769                 :          0 :                 set_bit(BTRFS_ORDERED_IOERR, &ordered->flags);
    3770                 :            :         spin_unlock(&root->ordered_extent_lock);
    3771                 :          0 : }
    3772                 :            : 
    3773                 :          0 : static void btrfs_destroy_all_ordered_extents(struct btrfs_fs_info *fs_info)
    3774                 :            : {
    3775                 :            :         struct btrfs_root *root;
    3776                 :            :         struct list_head splice;
    3777                 :            : 
    3778                 :            :         INIT_LIST_HEAD(&splice);
    3779                 :            : 
    3780                 :            :         spin_lock(&fs_info->ordered_root_lock);
    3781                 :          0 :         list_splice_init(&fs_info->ordered_roots, &splice);
    3782         [ #  # ]:          0 :         while (!list_empty(&splice)) {
    3783                 :          0 :                 root = list_first_entry(&splice, struct btrfs_root,
    3784                 :            :                                         ordered_root);
    3785                 :          0 :                 list_move_tail(&root->ordered_root,
    3786                 :            :                                &fs_info->ordered_roots);
    3787                 :            : 
    3788                 :          0 :                 btrfs_destroy_ordered_extents(root);
    3789                 :            : 
    3790                 :          0 :                 cond_resched_lock(&fs_info->ordered_root_lock);
    3791                 :            :         }
    3792                 :            :         spin_unlock(&fs_info->ordered_root_lock);
    3793                 :          0 : }
    3794                 :            : 
    3795                 :          0 : static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
    3796                 :            :                                       struct btrfs_root *root)
    3797                 :            : {
    3798                 :            :         struct rb_node *node;
    3799                 :            :         struct btrfs_delayed_ref_root *delayed_refs;
    3800                 :            :         struct btrfs_delayed_ref_node *ref;
    3801                 :            :         int ret = 0;
    3802                 :            : 
    3803                 :            :         delayed_refs = &trans->delayed_refs;
    3804                 :            : 
    3805                 :            :         spin_lock(&delayed_refs->lock);
    3806         [ #  # ]:          0 :         if (delayed_refs->num_entries == 0) {
    3807                 :            :                 spin_unlock(&delayed_refs->lock);
    3808                 :          0 :                 printk(KERN_INFO "delayed_refs has NO entry\n");
    3809                 :          0 :                 return ret;
    3810                 :            :         }
    3811                 :            : 
    3812         [ #  # ]:          0 :         while ((node = rb_first(&delayed_refs->root)) != NULL) {
    3813                 :            :                 struct btrfs_delayed_ref_head *head = NULL;
    3814                 :            :                 bool pin_bytes = false;
    3815                 :            : 
    3816                 :            :                 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
    3817                 :          0 :                 atomic_set(&ref->refs, 1);
    3818         [ #  # ]:          0 :                 if (btrfs_delayed_ref_is_head(ref)) {
    3819                 :            : 
    3820                 :            :                         head = btrfs_delayed_node_to_head(ref);
    3821         [ #  # ]:          0 :                         if (!mutex_trylock(&head->mutex)) {
    3822                 :          0 :                                 atomic_inc(&ref->refs);
    3823                 :            :                                 spin_unlock(&delayed_refs->lock);
    3824                 :            : 
    3825                 :            :                                 /* Need to wait for the delayed ref to run */
    3826                 :          0 :                                 mutex_lock(&head->mutex);
    3827                 :          0 :                                 mutex_unlock(&head->mutex);
    3828                 :            :                                 btrfs_put_delayed_ref(ref);
    3829                 :            : 
    3830                 :            :                                 spin_lock(&delayed_refs->lock);
    3831                 :          0 :                                 continue;
    3832                 :            :                         }
    3833                 :            : 
    3834         [ #  # ]:          0 :                         if (head->must_insert_reserved)
    3835                 :            :                                 pin_bytes = true;
    3836                 :          0 :                         btrfs_free_delayed_extent_op(head->extent_op);
    3837                 :          0 :                         delayed_refs->num_heads--;
    3838         [ #  # ]:          0 :                         if (list_empty(&head->cluster))
    3839                 :          0 :                                 delayed_refs->num_heads_ready--;
    3840                 :            :                         list_del_init(&head->cluster);
    3841                 :            :                 }
    3842                 :            : 
    3843                 :          0 :                 ref->in_tree = 0;
    3844                 :          0 :                 rb_erase(&ref->rb_node, &delayed_refs->root);
    3845                 :          0 :                 delayed_refs->num_entries--;
    3846                 :            :                 spin_unlock(&delayed_refs->lock);
    3847         [ #  # ]:          0 :                 if (head) {
    3848         [ #  # ]:          0 :                         if (pin_bytes)
    3849                 :          0 :                                 btrfs_pin_extent(root, ref->bytenr,
    3850                 :            :                                                  ref->num_bytes, 1);
    3851                 :          0 :                         mutex_unlock(&head->mutex);
    3852                 :            :                 }
    3853                 :            :                 btrfs_put_delayed_ref(ref);
    3854                 :            : 
    3855                 :          0 :                 cond_resched();
    3856                 :            :                 spin_lock(&delayed_refs->lock);
    3857                 :            :         }
    3858                 :            : 
    3859                 :            :         spin_unlock(&delayed_refs->lock);
    3860                 :            : 
    3861                 :          0 :         return ret;
    3862                 :            : }
    3863                 :            : 
    3864                 :          0 : static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root)
    3865                 :            : {
    3866                 :            :         struct btrfs_inode *btrfs_inode;
    3867                 :            :         struct list_head splice;
    3868                 :            : 
    3869                 :            :         INIT_LIST_HEAD(&splice);
    3870                 :            : 
    3871                 :            :         spin_lock(&root->delalloc_lock);
    3872                 :          0 :         list_splice_init(&root->delalloc_inodes, &splice);
    3873                 :            : 
    3874         [ #  # ]:          0 :         while (!list_empty(&splice)) {
    3875                 :            :                 btrfs_inode = list_first_entry(&splice, struct btrfs_inode,
    3876                 :            :                                                delalloc_inodes);
    3877                 :            : 
    3878                 :          0 :                 list_del_init(&btrfs_inode->delalloc_inodes);
    3879                 :          0 :                 clear_bit(BTRFS_INODE_IN_DELALLOC_LIST,
    3880                 :            :                           &btrfs_inode->runtime_flags);
    3881                 :            :                 spin_unlock(&root->delalloc_lock);
    3882                 :            : 
    3883                 :          0 :                 btrfs_invalidate_inodes(btrfs_inode->root);
    3884                 :            : 
    3885                 :            :                 spin_lock(&root->delalloc_lock);
    3886                 :            :         }
    3887                 :            : 
    3888                 :            :         spin_unlock(&root->delalloc_lock);
    3889                 :          0 : }
    3890                 :            : 
    3891                 :          0 : static void btrfs_destroy_all_delalloc_inodes(struct btrfs_fs_info *fs_info)
    3892                 :            : {
    3893                 :            :         struct btrfs_root *root;
    3894                 :            :         struct list_head splice;
    3895                 :            : 
    3896                 :            :         INIT_LIST_HEAD(&splice);
    3897                 :            : 
    3898                 :            :         spin_lock(&fs_info->delalloc_root_lock);
    3899                 :          0 :         list_splice_init(&fs_info->delalloc_roots, &splice);
    3900         [ #  # ]:          0 :         while (!list_empty(&splice)) {
    3901                 :          0 :                 root = list_first_entry(&splice, struct btrfs_root,
    3902                 :            :                                          delalloc_root);
    3903                 :          0 :                 list_del_init(&root->delalloc_root);
    3904                 :            :                 root = btrfs_grab_fs_root(root);
    3905         [ #  # ]:          0 :                 BUG_ON(!root);
    3906                 :            :                 spin_unlock(&fs_info->delalloc_root_lock);
    3907                 :            : 
    3908                 :          0 :                 btrfs_destroy_delalloc_inodes(root);
    3909                 :            :                 btrfs_put_fs_root(root);
    3910                 :            : 
    3911                 :            :                 spin_lock(&fs_info->delalloc_root_lock);
    3912                 :            :         }
    3913                 :            :         spin_unlock(&fs_info->delalloc_root_lock);
    3914                 :          0 : }
    3915                 :            : 
    3916                 :          0 : static int btrfs_destroy_marked_extents(struct btrfs_root *root,
    3917                 :            :                                         struct extent_io_tree *dirty_pages,
    3918                 :            :                                         int mark)
    3919                 :            : {
    3920                 :            :         int ret;
    3921                 :            :         struct extent_buffer *eb;
    3922                 :          0 :         u64 start = 0;
    3923                 :            :         u64 end;
    3924                 :            : 
    3925                 :            :         while (1) {
    3926                 :          0 :                 ret = find_first_extent_bit(dirty_pages, start, &start, &end,
    3927                 :            :                                             mark, NULL);
    3928         [ #  # ]:          0 :                 if (ret)
    3929                 :            :                         break;
    3930                 :            : 
    3931                 :          0 :                 clear_extent_bits(dirty_pages, start, end, mark, GFP_NOFS);
    3932         [ #  # ]:          0 :                 while (start <= end) {
    3933                 :            :                         eb = btrfs_find_tree_block(root, start,
    3934                 :            :                                                    root->leafsize);
    3935                 :          0 :                         start += root->leafsize;
    3936         [ #  # ]:          0 :                         if (!eb)
    3937                 :          0 :                                 continue;
    3938                 :          0 :                         wait_on_extent_buffer_writeback(eb);
    3939                 :            : 
    3940         [ #  # ]:          0 :                         if (test_and_clear_bit(EXTENT_BUFFER_DIRTY,
    3941                 :            :                                                &eb->bflags))
    3942                 :          0 :                                 clear_extent_buffer_dirty(eb);
    3943                 :          0 :                         free_extent_buffer_stale(eb);
    3944                 :            :                 }
    3945                 :            :         }
    3946                 :            : 
    3947                 :          0 :         return ret;
    3948                 :            : }
    3949                 :            : 
    3950                 :          0 : static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
    3951                 :            :                                        struct extent_io_tree *pinned_extents)
    3952                 :            : {
    3953                 :            :         struct extent_io_tree *unpin;
    3954                 :            :         u64 start;
    3955                 :            :         u64 end;
    3956                 :            :         int ret;
    3957                 :            :         bool loop = true;
    3958                 :            : 
    3959                 :            :         unpin = pinned_extents;
    3960                 :            : again:
    3961                 :            :         while (1) {
    3962                 :          0 :                 ret = find_first_extent_bit(unpin, 0, &start, &end,
    3963                 :            :                                             EXTENT_DIRTY, NULL);
    3964         [ #  # ]:          0 :                 if (ret)
    3965                 :            :                         break;
    3966                 :            : 
    3967                 :            :                 /* opt_discard */
    3968         [ #  # ]:          0 :                 if (btrfs_test_opt(root, DISCARD))
    3969                 :          0 :                         ret = btrfs_error_discard_extent(root, start,
    3970                 :          0 :                                                          end + 1 - start,
    3971                 :            :                                                          NULL);
    3972                 :            : 
    3973                 :          0 :                 clear_extent_dirty(unpin, start, end, GFP_NOFS);
    3974                 :          0 :                 btrfs_error_unpin_extent_range(root, start, end);
    3975                 :          0 :                 cond_resched();
    3976                 :          0 :         }
    3977                 :            : 
    3978         [ #  # ]:          0 :         if (loop) {
    3979         [ #  # ]:          0 :                 if (unpin == &root->fs_info->freed_extents[0])
    3980                 :          0 :                         unpin = &root->fs_info->freed_extents[1];
    3981                 :            :                 else
    3982                 :            :                         unpin = &root->fs_info->freed_extents[0];
    3983                 :            :                 loop = false;
    3984                 :            :                 goto again;
    3985                 :            :         }
    3986                 :            : 
    3987                 :          0 :         return 0;
    3988                 :            : }
    3989                 :            : 
    3990                 :          0 : void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans,
    3991                 :            :                                    struct btrfs_root *root)
    3992                 :            : {
    3993                 :          0 :         btrfs_destroy_ordered_operations(cur_trans, root);
    3994                 :            : 
    3995                 :          0 :         btrfs_destroy_delayed_refs(cur_trans, root);
    3996                 :            : 
    3997                 :          0 :         cur_trans->state = TRANS_STATE_COMMIT_START;
    3998                 :          0 :         wake_up(&root->fs_info->transaction_blocked_wait);
    3999                 :            : 
    4000                 :          0 :         cur_trans->state = TRANS_STATE_UNBLOCKED;
    4001                 :          0 :         wake_up(&root->fs_info->transaction_wait);
    4002                 :            : 
    4003                 :          0 :         btrfs_destroy_delayed_inodes(root);
    4004                 :          0 :         btrfs_assert_delayed_root_empty(root);
    4005                 :            : 
    4006                 :          0 :         btrfs_destroy_marked_extents(root, &cur_trans->dirty_pages,
    4007                 :            :                                      EXTENT_DIRTY);
    4008                 :          0 :         btrfs_destroy_pinned_extent(root,
    4009                 :          0 :                                     root->fs_info->pinned_extents);
    4010                 :            : 
    4011                 :          0 :         cur_trans->state =TRANS_STATE_COMPLETED;
    4012                 :          0 :         wake_up(&cur_trans->commit_wait);
    4013                 :            : 
    4014                 :            :         /*
    4015                 :            :         memset(cur_trans, 0, sizeof(*cur_trans));
    4016                 :            :         kmem_cache_free(btrfs_transaction_cachep, cur_trans);
    4017                 :            :         */
    4018                 :          0 : }
    4019                 :            : 
    4020                 :          0 : static int btrfs_cleanup_transaction(struct btrfs_root *root)
    4021                 :            : {
    4022                 :            :         struct btrfs_transaction *t;
    4023                 :            : 
    4024                 :          0 :         mutex_lock(&root->fs_info->transaction_kthread_mutex);
    4025                 :            : 
    4026                 :          0 :         spin_lock(&root->fs_info->trans_lock);
    4027         [ #  # ]:          0 :         while (!list_empty(&root->fs_info->trans_list)) {
    4028                 :          0 :                 t = list_first_entry(&root->fs_info->trans_list,
    4029                 :            :                                      struct btrfs_transaction, list);
    4030         [ #  # ]:          0 :                 if (t->state >= TRANS_STATE_COMMIT_START) {
    4031                 :          0 :                         atomic_inc(&t->use_count);
    4032                 :          0 :                         spin_unlock(&root->fs_info->trans_lock);
    4033                 :          0 :                         btrfs_wait_for_commit(root, t->transid);
    4034                 :          0 :                         btrfs_put_transaction(t);
    4035                 :          0 :                         spin_lock(&root->fs_info->trans_lock);
    4036                 :          0 :                         continue;
    4037                 :            :                 }
    4038         [ #  # ]:          0 :                 if (t == root->fs_info->running_transaction) {
    4039                 :          0 :                         t->state = TRANS_STATE_COMMIT_DOING;
    4040                 :          0 :                         spin_unlock(&root->fs_info->trans_lock);
    4041                 :            :                         /*
    4042                 :            :                          * We wait for 0 num_writers since we don't hold a trans
    4043                 :            :                          * handle open currently for this transaction.
    4044                 :            :                          */
    4045 [ #  # ][ #  # ]:          0 :                         wait_event(t->writer_wait,
    4046                 :            :                                    atomic_read(&t->num_writers) == 0);
    4047                 :            :                 } else {
    4048                 :            :                         spin_unlock(&root->fs_info->trans_lock);
    4049                 :            :                 }
    4050                 :          0 :                 btrfs_cleanup_one_transaction(t, root);
    4051                 :            : 
    4052                 :          0 :                 spin_lock(&root->fs_info->trans_lock);
    4053         [ #  # ]:          0 :                 if (t == root->fs_info->running_transaction)
    4054                 :          0 :                         root->fs_info->running_transaction = NULL;
    4055                 :          0 :                 list_del_init(&t->list);
    4056                 :          0 :                 spin_unlock(&root->fs_info->trans_lock);
    4057                 :            : 
    4058                 :          0 :                 btrfs_put_transaction(t);
    4059                 :            :                 trace_btrfs_transaction_commit(root);
    4060                 :          0 :                 spin_lock(&root->fs_info->trans_lock);
    4061                 :            :         }
    4062                 :            :         spin_unlock(&root->fs_info->trans_lock);
    4063                 :          0 :         btrfs_destroy_all_ordered_extents(root->fs_info);
    4064                 :          0 :         btrfs_destroy_delayed_inodes(root);
    4065                 :          0 :         btrfs_assert_delayed_root_empty(root);
    4066                 :          0 :         btrfs_destroy_pinned_extent(root, root->fs_info->pinned_extents);
    4067                 :          0 :         btrfs_destroy_all_delalloc_inodes(root->fs_info);
    4068                 :          0 :         mutex_unlock(&root->fs_info->transaction_kthread_mutex);
    4069                 :            : 
    4070                 :          0 :         return 0;
    4071                 :            : }
    4072                 :            : 
    4073                 :            : static struct extent_io_ops btree_extent_io_ops = {
    4074                 :            :         .readpage_end_io_hook = btree_readpage_end_io_hook,
    4075                 :            :         .readpage_io_failed_hook = btree_io_failed_hook,
    4076                 :            :         .submit_bio_hook = btree_submit_bio_hook,
    4077                 :            :         /* note we're sharing with inode.c for the merge bio hook */
    4078                 :            :         .merge_bio_hook = btrfs_merge_bio_hook,
    4079                 :            : };

Generated by: LCOV version 1.9