linux/fs/btrfs/check-integrity.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) STRATO AG 2011.  All rights reserved.
   4 */
   5
   6/*
   7 * This module can be used to catch cases when the btrfs kernel
   8 * code executes write requests to the disk that bring the file
   9 * system in an inconsistent state. In such a state, a power-loss
  10 * or kernel panic event would cause that the data on disk is
  11 * lost or at least damaged.
  12 *
  13 * Code is added that examines all block write requests during
  14 * runtime (including writes of the super block). Three rules
  15 * are verified and an error is printed on violation of the
  16 * rules:
  17 * 1. It is not allowed to write a disk block which is
  18 *    currently referenced by the super block (either directly
  19 *    or indirectly).
  20 * 2. When a super block is written, it is verified that all
  21 *    referenced (directly or indirectly) blocks fulfill the
  22 *    following requirements:
  23 *    2a. All referenced blocks have either been present when
  24 *        the file system was mounted, (i.e., they have been
  25 *        referenced by the super block) or they have been
  26 *        written since then and the write completion callback
  27 *        was called and no write error was indicated and a
  28 *        FLUSH request to the device where these blocks are
  29 *        located was received and completed.
  30 *    2b. All referenced blocks need to have a generation
  31 *        number which is equal to the parent's number.
  32 *
  33 * One issue that was found using this module was that the log
  34 * tree on disk became temporarily corrupted because disk blocks
  35 * that had been in use for the log tree had been freed and
  36 * reused too early, while being referenced by the written super
  37 * block.
  38 *
  39 * The search term in the kernel log that can be used to filter
  40 * on the existence of detected integrity issues is
  41 * "btrfs: attempt".
  42 *
  43 * The integrity check is enabled via mount options. These
  44 * mount options are only supported if the integrity check
  45 * tool is compiled by defining BTRFS_FS_CHECK_INTEGRITY.
  46 *
  47 * Example #1, apply integrity checks to all metadata:
  48 * mount /dev/sdb1 /mnt -o check_int
  49 *
  50 * Example #2, apply integrity checks to all metadata and
  51 * to data extents:
  52 * mount /dev/sdb1 /mnt -o check_int_data
  53 *
  54 * Example #3, apply integrity checks to all metadata and dump
  55 * the tree that the super block references to kernel messages
  56 * each time after a super block was written:
  57 * mount /dev/sdb1 /mnt -o check_int,check_int_print_mask=263
  58 *
  59 * If the integrity check tool is included and activated in
  60 * the mount options, plenty of kernel memory is used, and
  61 * plenty of additional CPU cycles are spent. Enabling this
  62 * functionality is not intended for normal use. In most
  63 * cases, unless you are a btrfs developer who needs to verify
  64 * the integrity of (super)-block write requests, do not
  65 * enable the config option BTRFS_FS_CHECK_INTEGRITY to
  66 * include and compile the integrity check tool.
  67 *
  68 * Expect millions of lines of information in the kernel log with an
  69 * enabled check_int_print_mask. Therefore set LOG_BUF_SHIFT in the
  70 * kernel config to at least 26 (which is 64MB). Usually the value is
  71 * limited to 21 (which is 2MB) in init/Kconfig. The file needs to be
  72 * changed like this before LOG_BUF_SHIFT can be set to a high value:
  73 * config LOG_BUF_SHIFT
  74 *       int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
  75 *       range 12 30
  76 */
  77
  78#include <linux/sched.h>
  79#include <linux/slab.h>
  80#include <linux/buffer_head.h>
  81#include <linux/mutex.h>
  82#include <linux/genhd.h>
  83#include <linux/blkdev.h>
  84#include <linux/mm.h>
  85#include <linux/string.h>
  86#include <crypto/hash.h>
  87#include "ctree.h"
  88#include "disk-io.h"
  89#include "transaction.h"
  90#include "extent_io.h"
  91#include "volumes.h"
  92#include "print-tree.h"
  93#include "locking.h"
  94#include "check-integrity.h"
  95#include "rcu-string.h"
  96#include "compression.h"
  97
  98#define BTRFSIC_BLOCK_HASHTABLE_SIZE 0x10000
  99#define BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE 0x10000
 100#define BTRFSIC_DEV2STATE_HASHTABLE_SIZE 0x100
 101#define BTRFSIC_BLOCK_MAGIC_NUMBER 0x14491051
 102#define BTRFSIC_BLOCK_LINK_MAGIC_NUMBER 0x11070807
 103#define BTRFSIC_DEV2STATE_MAGIC_NUMBER 0x20111530
 104#define BTRFSIC_BLOCK_STACK_FRAME_MAGIC_NUMBER 20111300
 105#define BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL (200 - 6)    /* in characters,
 106                                                         * excluding " [...]" */
 107#define BTRFSIC_GENERATION_UNKNOWN ((u64)-1)
 108
 109/*
 110 * The definition of the bitmask fields for the print_mask.
 111 * They are specified with the mount option check_integrity_print_mask.
 112 */
 113#define BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE                     0x00000001
 114#define BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION         0x00000002
 115#define BTRFSIC_PRINT_MASK_TREE_AFTER_SB_WRITE                  0x00000004
 116#define BTRFSIC_PRINT_MASK_TREE_BEFORE_SB_WRITE                 0x00000008
 117#define BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH                        0x00000010
 118#define BTRFSIC_PRINT_MASK_END_IO_BIO_BH                        0x00000020
 119#define BTRFSIC_PRINT_MASK_VERBOSE                              0x00000040
 120#define BTRFSIC_PRINT_MASK_VERY_VERBOSE                         0x00000080
 121#define BTRFSIC_PRINT_MASK_INITIAL_TREE                         0x00000100
 122#define BTRFSIC_PRINT_MASK_INITIAL_ALL_TREES                    0x00000200
 123#define BTRFSIC_PRINT_MASK_INITIAL_DATABASE                     0x00000400
 124#define BTRFSIC_PRINT_MASK_NUM_COPIES                           0x00000800
 125#define BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS                0x00001000
 126#define BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH_VERBOSE                0x00002000
 127
 128struct btrfsic_dev_state;
 129struct btrfsic_state;
 130
 131struct btrfsic_block {
 132        u32 magic_num;          /* only used for debug purposes */
 133        unsigned int is_metadata:1;     /* if it is meta-data, not data-data */
 134        unsigned int is_superblock:1;   /* if it is one of the superblocks */
 135        unsigned int is_iodone:1;       /* if is done by lower subsystem */
 136        unsigned int iodone_w_error:1;  /* error was indicated to endio */
 137        unsigned int never_written:1;   /* block was added because it was
 138                                         * referenced, not because it was
 139                                         * written */
 140        unsigned int mirror_num;        /* large enough to hold
 141                                         * BTRFS_SUPER_MIRROR_MAX */
 142        struct btrfsic_dev_state *dev_state;
 143        u64 dev_bytenr;         /* key, physical byte num on disk */
 144        u64 logical_bytenr;     /* logical byte num on disk */
 145        u64 generation;
 146        struct btrfs_disk_key disk_key; /* extra info to print in case of
 147                                         * issues, will not always be correct */
 148        struct list_head collision_resolving_node;      /* list node */
 149        struct list_head all_blocks_node;       /* list node */
 150
 151        /* the following two lists contain block_link items */
 152        struct list_head ref_to_list;   /* list */
 153        struct list_head ref_from_list; /* list */
 154        struct btrfsic_block *next_in_same_bio;
 155        void *orig_bio_bh_private;
 156        union {
 157                bio_end_io_t *bio;
 158                bh_end_io_t *bh;
 159        } orig_bio_bh_end_io;
 160        int submit_bio_bh_rw;
 161        u64 flush_gen; /* only valid if !never_written */
 162};
 163
 164/*
 165 * Elements of this type are allocated dynamically and required because
 166 * each block object can refer to and can be ref from multiple blocks.
 167 * The key to lookup them in the hashtable is the dev_bytenr of
 168 * the block ref to plus the one from the block referred from.
 169 * The fact that they are searchable via a hashtable and that a
 170 * ref_cnt is maintained is not required for the btrfs integrity
 171 * check algorithm itself, it is only used to make the output more
 172 * beautiful in case that an error is detected (an error is defined
 173 * as a write operation to a block while that block is still referenced).
 174 */
 175struct btrfsic_block_link {
 176        u32 magic_num;          /* only used for debug purposes */
 177        u32 ref_cnt;
 178        struct list_head node_ref_to;   /* list node */
 179        struct list_head node_ref_from; /* list node */
 180        struct list_head collision_resolving_node;      /* list node */
 181        struct btrfsic_block *block_ref_to;
 182        struct btrfsic_block *block_ref_from;
 183        u64 parent_generation;
 184};
 185
 186struct btrfsic_dev_state {
 187        u32 magic_num;          /* only used for debug purposes */
 188        struct block_device *bdev;
 189        struct btrfsic_state *state;
 190        struct list_head collision_resolving_node;      /* list node */
 191        struct btrfsic_block dummy_block_for_bio_bh_flush;
 192        u64 last_flush_gen;
 193        char name[BDEVNAME_SIZE];
 194};
 195
 196struct btrfsic_block_hashtable {
 197        struct list_head table[BTRFSIC_BLOCK_HASHTABLE_SIZE];
 198};
 199
 200struct btrfsic_block_link_hashtable {
 201        struct list_head table[BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE];
 202};
 203
 204struct btrfsic_dev_state_hashtable {
 205        struct list_head table[BTRFSIC_DEV2STATE_HASHTABLE_SIZE];
 206};
 207
 208struct btrfsic_block_data_ctx {
 209        u64 start;              /* virtual bytenr */
 210        u64 dev_bytenr;         /* physical bytenr on device */
 211        u32 len;
 212        struct btrfsic_dev_state *dev;
 213        char **datav;
 214        struct page **pagev;
 215        void *mem_to_free;
 216};
 217
 218/* This structure is used to implement recursion without occupying
 219 * any stack space, refer to btrfsic_process_metablock() */
 220struct btrfsic_stack_frame {
 221        u32 magic;
 222        u32 nr;
 223        int error;
 224        int i;
 225        int limit_nesting;
 226        int num_copies;
 227        int mirror_num;
 228        struct btrfsic_block *block;
 229        struct btrfsic_block_data_ctx *block_ctx;
 230        struct btrfsic_block *next_block;
 231        struct btrfsic_block_data_ctx next_block_ctx;
 232        struct btrfs_header *hdr;
 233        struct btrfsic_stack_frame *prev;
 234};
 235
 236/* Some state per mounted filesystem */
 237struct btrfsic_state {
 238        u32 print_mask;
 239        int include_extent_data;
 240        int csum_size;
 241        struct list_head all_blocks_list;
 242        struct btrfsic_block_hashtable block_hashtable;
 243        struct btrfsic_block_link_hashtable block_link_hashtable;
 244        struct btrfs_fs_info *fs_info;
 245        u64 max_superblock_generation;
 246        struct btrfsic_block *latest_superblock;
 247        u32 metablock_size;
 248        u32 datablock_size;
 249};
 250
 251static void btrfsic_block_init(struct btrfsic_block *b);
 252static struct btrfsic_block *btrfsic_block_alloc(void);
 253static void btrfsic_block_free(struct btrfsic_block *b);
 254static void btrfsic_block_link_init(struct btrfsic_block_link *n);
 255static struct btrfsic_block_link *btrfsic_block_link_alloc(void);
 256static void btrfsic_block_link_free(struct btrfsic_block_link *n);
 257static void btrfsic_dev_state_init(struct btrfsic_dev_state *ds);
 258static struct btrfsic_dev_state *btrfsic_dev_state_alloc(void);
 259static void btrfsic_dev_state_free(struct btrfsic_dev_state *ds);
 260static void btrfsic_block_hashtable_init(struct btrfsic_block_hashtable *h);
 261static void btrfsic_block_hashtable_add(struct btrfsic_block *b,
 262                                        struct btrfsic_block_hashtable *h);
 263static void btrfsic_block_hashtable_remove(struct btrfsic_block *b);
 264static struct btrfsic_block *btrfsic_block_hashtable_lookup(
 265                struct block_device *bdev,
 266                u64 dev_bytenr,
 267                struct btrfsic_block_hashtable *h);
 268static void btrfsic_block_link_hashtable_init(
 269                struct btrfsic_block_link_hashtable *h);
 270static void btrfsic_block_link_hashtable_add(
 271                struct btrfsic_block_link *l,
 272                struct btrfsic_block_link_hashtable *h);
 273static void btrfsic_block_link_hashtable_remove(struct btrfsic_block_link *l);
 274static struct btrfsic_block_link *btrfsic_block_link_hashtable_lookup(
 275                struct block_device *bdev_ref_to,
 276                u64 dev_bytenr_ref_to,
 277                struct block_device *bdev_ref_from,
 278                u64 dev_bytenr_ref_from,
 279                struct btrfsic_block_link_hashtable *h);
 280static void btrfsic_dev_state_hashtable_init(
 281                struct btrfsic_dev_state_hashtable *h);
 282static void btrfsic_dev_state_hashtable_add(
 283                struct btrfsic_dev_state *ds,
 284                struct btrfsic_dev_state_hashtable *h);
 285static void btrfsic_dev_state_hashtable_remove(struct btrfsic_dev_state *ds);
 286static struct btrfsic_dev_state *btrfsic_dev_state_hashtable_lookup(dev_t dev,
 287                struct btrfsic_dev_state_hashtable *h);
 288static struct btrfsic_stack_frame *btrfsic_stack_frame_alloc(void);
 289static void btrfsic_stack_frame_free(struct btrfsic_stack_frame *sf);
 290static int btrfsic_process_superblock(struct btrfsic_state *state,
 291                                      struct btrfs_fs_devices *fs_devices);
 292static int btrfsic_process_metablock(struct btrfsic_state *state,
 293                                     struct btrfsic_block *block,
 294                                     struct btrfsic_block_data_ctx *block_ctx,
 295                                     int limit_nesting, int force_iodone_flag);
 296static void btrfsic_read_from_block_data(
 297        struct btrfsic_block_data_ctx *block_ctx,
 298        void *dst, u32 offset, size_t len);
 299static int btrfsic_create_link_to_next_block(
 300                struct btrfsic_state *state,
 301                struct btrfsic_block *block,
 302                struct btrfsic_block_data_ctx
 303                *block_ctx, u64 next_bytenr,
 304                int limit_nesting,
 305                struct btrfsic_block_data_ctx *next_block_ctx,
 306                struct btrfsic_block **next_blockp,
 307                int force_iodone_flag,
 308                int *num_copiesp, int *mirror_nump,
 309                struct btrfs_disk_key *disk_key,
 310                u64 parent_generation);
 311static int btrfsic_handle_extent_data(struct btrfsic_state *state,
 312                                      struct btrfsic_block *block,
 313                                      struct btrfsic_block_data_ctx *block_ctx,
 314                                      u32 item_offset, int force_iodone_flag);
 315static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
 316                             struct btrfsic_block_data_ctx *block_ctx_out,
 317                             int mirror_num);
 318static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx);
 319static int btrfsic_read_block(struct btrfsic_state *state,
 320                              struct btrfsic_block_data_ctx *block_ctx);
 321static void btrfsic_dump_database(struct btrfsic_state *state);
 322static int btrfsic_test_for_metadata(struct btrfsic_state *state,
 323                                     char **datav, unsigned int num_pages);
 324static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
 325                                          u64 dev_bytenr, char **mapped_datav,
 326                                          unsigned int num_pages,
 327                                          struct bio *bio, int *bio_is_patched,
 328                                          struct buffer_head *bh,
 329                                          int submit_bio_bh_rw);
 330static int btrfsic_process_written_superblock(
 331                struct btrfsic_state *state,
 332                struct btrfsic_block *const block,
 333                struct btrfs_super_block *const super_hdr);
 334static void btrfsic_bio_end_io(struct bio *bp);
 335static void btrfsic_bh_end_io(struct buffer_head *bh, int uptodate);
 336static int btrfsic_is_block_ref_by_superblock(const struct btrfsic_state *state,
 337                                              const struct btrfsic_block *block,
 338                                              int recursion_level);
 339static int btrfsic_check_all_ref_blocks(struct btrfsic_state *state,
 340                                        struct btrfsic_block *const block,
 341                                        int recursion_level);
 342static void btrfsic_print_add_link(const struct btrfsic_state *state,
 343                                   const struct btrfsic_block_link *l);
 344static void btrfsic_print_rem_link(const struct btrfsic_state *state,
 345                                   const struct btrfsic_block_link *l);
 346static char btrfsic_get_block_type(const struct btrfsic_state *state,
 347                                   const struct btrfsic_block *block);
 348static void btrfsic_dump_tree(const struct btrfsic_state *state);
 349static void btrfsic_dump_tree_sub(const struct btrfsic_state *state,
 350                                  const struct btrfsic_block *block,
 351                                  int indent_level);
 352static struct btrfsic_block_link *btrfsic_block_link_lookup_or_add(
 353                struct btrfsic_state *state,
 354                struct btrfsic_block_data_ctx *next_block_ctx,
 355                struct btrfsic_block *next_block,
 356                struct btrfsic_block *from_block,
 357                u64 parent_generation);
 358static struct btrfsic_block *btrfsic_block_lookup_or_add(
 359                struct btrfsic_state *state,
 360                struct btrfsic_block_data_ctx *block_ctx,
 361                const char *additional_string,
 362                int is_metadata,
 363                int is_iodone,
 364                int never_written,
 365                int mirror_num,
 366                int *was_created);
 367static int btrfsic_process_superblock_dev_mirror(
 368                struct btrfsic_state *state,
 369                struct btrfsic_dev_state *dev_state,
 370                struct btrfs_device *device,
 371                int superblock_mirror_num,
 372                struct btrfsic_dev_state **selected_dev_state,
 373                struct btrfs_super_block *selected_super);
 374static struct btrfsic_dev_state *btrfsic_dev_state_lookup(dev_t dev);
 375static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state,
 376                                           u64 bytenr,
 377                                           struct btrfsic_dev_state *dev_state,
 378                                           u64 dev_bytenr);
 379
 380static struct mutex btrfsic_mutex;
 381static int btrfsic_is_initialized;
 382static struct btrfsic_dev_state_hashtable btrfsic_dev_state_hashtable;
 383
 384
 385static void btrfsic_block_init(struct btrfsic_block *b)
 386{
 387        b->magic_num = BTRFSIC_BLOCK_MAGIC_NUMBER;
 388        b->dev_state = NULL;
 389        b->dev_bytenr = 0;
 390        b->logical_bytenr = 0;
 391        b->generation = BTRFSIC_GENERATION_UNKNOWN;
 392        b->disk_key.objectid = 0;
 393        b->disk_key.type = 0;
 394        b->disk_key.offset = 0;
 395        b->is_metadata = 0;
 396        b->is_superblock = 0;
 397        b->is_iodone = 0;
 398        b->iodone_w_error = 0;
 399        b->never_written = 0;
 400        b->mirror_num = 0;
 401        b->next_in_same_bio = NULL;
 402        b->orig_bio_bh_private = NULL;
 403        b->orig_bio_bh_end_io.bio = NULL;
 404        INIT_LIST_HEAD(&b->collision_resolving_node);
 405        INIT_LIST_HEAD(&b->all_blocks_node);
 406        INIT_LIST_HEAD(&b->ref_to_list);
 407        INIT_LIST_HEAD(&b->ref_from_list);
 408        b->submit_bio_bh_rw = 0;
 409        b->flush_gen = 0;
 410}
 411
 412static struct btrfsic_block *btrfsic_block_alloc(void)
 413{
 414        struct btrfsic_block *b;
 415
 416        b = kzalloc(sizeof(*b), GFP_NOFS);
 417        if (NULL != b)
 418                btrfsic_block_init(b);
 419
 420        return b;
 421}
 422
 423static void btrfsic_block_free(struct btrfsic_block *b)
 424{
 425        BUG_ON(!(NULL == b || BTRFSIC_BLOCK_MAGIC_NUMBER == b->magic_num));
 426        kfree(b);
 427}
 428
 429static void btrfsic_block_link_init(struct btrfsic_block_link *l)
 430{
 431        l->magic_num = BTRFSIC_BLOCK_LINK_MAGIC_NUMBER;
 432        l->ref_cnt = 1;
 433        INIT_LIST_HEAD(&l->node_ref_to);
 434        INIT_LIST_HEAD(&l->node_ref_from);
 435        INIT_LIST_HEAD(&l->collision_resolving_node);
 436        l->block_ref_to = NULL;
 437        l->block_ref_from = NULL;
 438}
 439
 440static struct btrfsic_block_link *btrfsic_block_link_alloc(void)
 441{
 442        struct btrfsic_block_link *l;
 443
 444        l = kzalloc(sizeof(*l), GFP_NOFS);
 445        if (NULL != l)
 446                btrfsic_block_link_init(l);
 447
 448        return l;
 449}
 450
 451static void btrfsic_block_link_free(struct btrfsic_block_link *l)
 452{
 453        BUG_ON(!(NULL == l || BTRFSIC_BLOCK_LINK_MAGIC_NUMBER == l->magic_num));
 454        kfree(l);
 455}
 456
 457static void btrfsic_dev_state_init(struct btrfsic_dev_state *ds)
 458{
 459        ds->magic_num = BTRFSIC_DEV2STATE_MAGIC_NUMBER;
 460        ds->bdev = NULL;
 461        ds->state = NULL;
 462        ds->name[0] = '\0';
 463        INIT_LIST_HEAD(&ds->collision_resolving_node);
 464        ds->last_flush_gen = 0;
 465        btrfsic_block_init(&ds->dummy_block_for_bio_bh_flush);
 466        ds->dummy_block_for_bio_bh_flush.is_iodone = 1;
 467        ds->dummy_block_for_bio_bh_flush.dev_state = ds;
 468}
 469
 470static struct btrfsic_dev_state *btrfsic_dev_state_alloc(void)
 471{
 472        struct btrfsic_dev_state *ds;
 473
 474        ds = kzalloc(sizeof(*ds), GFP_NOFS);
 475        if (NULL != ds)
 476                btrfsic_dev_state_init(ds);
 477
 478        return ds;
 479}
 480
 481static void btrfsic_dev_state_free(struct btrfsic_dev_state *ds)
 482{
 483        BUG_ON(!(NULL == ds ||
 484                 BTRFSIC_DEV2STATE_MAGIC_NUMBER == ds->magic_num));
 485        kfree(ds);
 486}
 487
 488static void btrfsic_block_hashtable_init(struct btrfsic_block_hashtable *h)
 489{
 490        int i;
 491
 492        for (i = 0; i < BTRFSIC_BLOCK_HASHTABLE_SIZE; i++)
 493                INIT_LIST_HEAD(h->table + i);
 494}
 495
 496static void btrfsic_block_hashtable_add(struct btrfsic_block *b,
 497                                        struct btrfsic_block_hashtable *h)
 498{
 499        const unsigned int hashval =
 500            (((unsigned int)(b->dev_bytenr >> 16)) ^
 501             ((unsigned int)((uintptr_t)b->dev_state->bdev))) &
 502             (BTRFSIC_BLOCK_HASHTABLE_SIZE - 1);
 503
 504        list_add(&b->collision_resolving_node, h->table + hashval);
 505}
 506
 507static void btrfsic_block_hashtable_remove(struct btrfsic_block *b)
 508{
 509        list_del(&b->collision_resolving_node);
 510}
 511
 512static struct btrfsic_block *btrfsic_block_hashtable_lookup(
 513                struct block_device *bdev,
 514                u64 dev_bytenr,
 515                struct btrfsic_block_hashtable *h)
 516{
 517        const unsigned int hashval =
 518            (((unsigned int)(dev_bytenr >> 16)) ^
 519             ((unsigned int)((uintptr_t)bdev))) &
 520             (BTRFSIC_BLOCK_HASHTABLE_SIZE - 1);
 521        struct btrfsic_block *b;
 522
 523        list_for_each_entry(b, h->table + hashval, collision_resolving_node) {
 524                if (b->dev_state->bdev == bdev && b->dev_bytenr == dev_bytenr)
 525                        return b;
 526        }
 527
 528        return NULL;
 529}
 530
 531static void btrfsic_block_link_hashtable_init(
 532                struct btrfsic_block_link_hashtable *h)
 533{
 534        int i;
 535
 536        for (i = 0; i < BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE; i++)
 537                INIT_LIST_HEAD(h->table + i);
 538}
 539
 540static void btrfsic_block_link_hashtable_add(
 541                struct btrfsic_block_link *l,
 542                struct btrfsic_block_link_hashtable *h)
 543{
 544        const unsigned int hashval =
 545            (((unsigned int)(l->block_ref_to->dev_bytenr >> 16)) ^
 546             ((unsigned int)(l->block_ref_from->dev_bytenr >> 16)) ^
 547             ((unsigned int)((uintptr_t)l->block_ref_to->dev_state->bdev)) ^
 548             ((unsigned int)((uintptr_t)l->block_ref_from->dev_state->bdev)))
 549             & (BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE - 1);
 550
 551        BUG_ON(NULL == l->block_ref_to);
 552        BUG_ON(NULL == l->block_ref_from);
 553        list_add(&l->collision_resolving_node, h->table + hashval);
 554}
 555
 556static void btrfsic_block_link_hashtable_remove(struct btrfsic_block_link *l)
 557{
 558        list_del(&l->collision_resolving_node);
 559}
 560
 561static struct btrfsic_block_link *btrfsic_block_link_hashtable_lookup(
 562                struct block_device *bdev_ref_to,
 563                u64 dev_bytenr_ref_to,
 564                struct block_device *bdev_ref_from,
 565                u64 dev_bytenr_ref_from,
 566                struct btrfsic_block_link_hashtable *h)
 567{
 568        const unsigned int hashval =
 569            (((unsigned int)(dev_bytenr_ref_to >> 16)) ^
 570             ((unsigned int)(dev_bytenr_ref_from >> 16)) ^
 571             ((unsigned int)((uintptr_t)bdev_ref_to)) ^
 572             ((unsigned int)((uintptr_t)bdev_ref_from))) &
 573             (BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE - 1);
 574        struct btrfsic_block_link *l;
 575
 576        list_for_each_entry(l, h->table + hashval, collision_resolving_node) {
 577                BUG_ON(NULL == l->block_ref_to);
 578                BUG_ON(NULL == l->block_ref_from);
 579                if (l->block_ref_to->dev_state->bdev == bdev_ref_to &&
 580                    l->block_ref_to->dev_bytenr == dev_bytenr_ref_to &&
 581                    l->block_ref_from->dev_state->bdev == bdev_ref_from &&
 582                    l->block_ref_from->dev_bytenr == dev_bytenr_ref_from)
 583                        return l;
 584        }
 585
 586        return NULL;
 587}
 588
 589static void btrfsic_dev_state_hashtable_init(
 590                struct btrfsic_dev_state_hashtable *h)
 591{
 592        int i;
 593
 594        for (i = 0; i < BTRFSIC_DEV2STATE_HASHTABLE_SIZE; i++)
 595                INIT_LIST_HEAD(h->table + i);
 596}
 597
 598static void btrfsic_dev_state_hashtable_add(
 599                struct btrfsic_dev_state *ds,
 600                struct btrfsic_dev_state_hashtable *h)
 601{
 602        const unsigned int hashval =
 603            (((unsigned int)((uintptr_t)ds->bdev->bd_dev)) &
 604             (BTRFSIC_DEV2STATE_HASHTABLE_SIZE - 1));
 605
 606        list_add(&ds->collision_resolving_node, h->table + hashval);
 607}
 608
 609static void btrfsic_dev_state_hashtable_remove(struct btrfsic_dev_state *ds)
 610{
 611        list_del(&ds->collision_resolving_node);
 612}
 613
 614static struct btrfsic_dev_state *btrfsic_dev_state_hashtable_lookup(dev_t dev,
 615                struct btrfsic_dev_state_hashtable *h)
 616{
 617        const unsigned int hashval =
 618                dev & (BTRFSIC_DEV2STATE_HASHTABLE_SIZE - 1);
 619        struct btrfsic_dev_state *ds;
 620
 621        list_for_each_entry(ds, h->table + hashval, collision_resolving_node) {
 622                if (ds->bdev->bd_dev == dev)
 623                        return ds;
 624        }
 625
 626        return NULL;
 627}
 628
 629static int btrfsic_process_superblock(struct btrfsic_state *state,
 630                                      struct btrfs_fs_devices *fs_devices)
 631{
 632        struct btrfs_fs_info *fs_info = state->fs_info;
 633        struct btrfs_super_block *selected_super;
 634        struct list_head *dev_head = &fs_devices->devices;
 635        struct btrfs_device *device;
 636        struct btrfsic_dev_state *selected_dev_state = NULL;
 637        int ret = 0;
 638        int pass;
 639
 640        BUG_ON(NULL == state);
 641        selected_super = kzalloc(sizeof(*selected_super), GFP_NOFS);
 642        if (NULL == selected_super) {
 643                pr_info("btrfsic: error, kmalloc failed!\n");
 644                return -ENOMEM;
 645        }
 646
 647        list_for_each_entry(device, dev_head, dev_list) {
 648                int i;
 649                struct btrfsic_dev_state *dev_state;
 650
 651                if (!device->bdev || !device->name)
 652                        continue;
 653
 654                dev_state = btrfsic_dev_state_lookup(device->bdev->bd_dev);
 655                BUG_ON(NULL == dev_state);
 656                for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
 657                        ret = btrfsic_process_superblock_dev_mirror(
 658                                        state, dev_state, device, i,
 659                                        &selected_dev_state, selected_super);
 660                        if (0 != ret && 0 == i) {
 661                                kfree(selected_super);
 662                                return ret;
 663                        }
 664                }
 665        }
 666
 667        if (NULL == state->latest_superblock) {
 668                pr_info("btrfsic: no superblock found!\n");
 669                kfree(selected_super);
 670                return -1;
 671        }
 672
 673        state->csum_size = btrfs_super_csum_size(selected_super);
 674
 675        for (pass = 0; pass < 3; pass++) {
 676                int num_copies;
 677                int mirror_num;
 678                u64 next_bytenr;
 679
 680                switch (pass) {
 681                case 0:
 682                        next_bytenr = btrfs_super_root(selected_super);
 683                        if (state->print_mask &
 684                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
 685                                pr_info("root@%llu\n", next_bytenr);
 686                        break;
 687                case 1:
 688                        next_bytenr = btrfs_super_chunk_root(selected_super);
 689                        if (state->print_mask &
 690                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
 691                                pr_info("chunk@%llu\n", next_bytenr);
 692                        break;
 693                case 2:
 694                        next_bytenr = btrfs_super_log_root(selected_super);
 695                        if (0 == next_bytenr)
 696                                continue;
 697                        if (state->print_mask &
 698                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
 699                                pr_info("log@%llu\n", next_bytenr);
 700                        break;
 701                }
 702
 703                num_copies = btrfs_num_copies(fs_info, next_bytenr,
 704                                              state->metablock_size);
 705                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
 706                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
 707                               next_bytenr, num_copies);
 708
 709                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
 710                        struct btrfsic_block *next_block;
 711                        struct btrfsic_block_data_ctx tmp_next_block_ctx;
 712                        struct btrfsic_block_link *l;
 713
 714                        ret = btrfsic_map_block(state, next_bytenr,
 715                                                state->metablock_size,
 716                                                &tmp_next_block_ctx,
 717                                                mirror_num);
 718                        if (ret) {
 719                                pr_info("btrfsic: btrfsic_map_block(root @%llu, mirror %d) failed!\n",
 720                                       next_bytenr, mirror_num);
 721                                kfree(selected_super);
 722                                return -1;
 723                        }
 724
 725                        next_block = btrfsic_block_hashtable_lookup(
 726                                        tmp_next_block_ctx.dev->bdev,
 727                                        tmp_next_block_ctx.dev_bytenr,
 728                                        &state->block_hashtable);
 729                        BUG_ON(NULL == next_block);
 730
 731                        l = btrfsic_block_link_hashtable_lookup(
 732                                        tmp_next_block_ctx.dev->bdev,
 733                                        tmp_next_block_ctx.dev_bytenr,
 734                                        state->latest_superblock->dev_state->
 735                                        bdev,
 736                                        state->latest_superblock->dev_bytenr,
 737                                        &state->block_link_hashtable);
 738                        BUG_ON(NULL == l);
 739
 740                        ret = btrfsic_read_block(state, &tmp_next_block_ctx);
 741                        if (ret < (int)PAGE_SIZE) {
 742                                pr_info("btrfsic: read @logical %llu failed!\n",
 743                                       tmp_next_block_ctx.start);
 744                                btrfsic_release_block_ctx(&tmp_next_block_ctx);
 745                                kfree(selected_super);
 746                                return -1;
 747                        }
 748
 749                        ret = btrfsic_process_metablock(state,
 750                                                        next_block,
 751                                                        &tmp_next_block_ctx,
 752                                                        BTRFS_MAX_LEVEL + 3, 1);
 753                        btrfsic_release_block_ctx(&tmp_next_block_ctx);
 754                }
 755        }
 756
 757        kfree(selected_super);
 758        return ret;
 759}
 760
 761static int btrfsic_process_superblock_dev_mirror(
 762                struct btrfsic_state *state,
 763                struct btrfsic_dev_state *dev_state,
 764                struct btrfs_device *device,
 765                int superblock_mirror_num,
 766                struct btrfsic_dev_state **selected_dev_state,
 767                struct btrfs_super_block *selected_super)
 768{
 769        struct btrfs_fs_info *fs_info = state->fs_info;
 770        struct btrfs_super_block *super_tmp;
 771        u64 dev_bytenr;
 772        struct buffer_head *bh;
 773        struct btrfsic_block *superblock_tmp;
 774        int pass;
 775        struct block_device *const superblock_bdev = device->bdev;
 776
 777        /* super block bytenr is always the unmapped device bytenr */
 778        dev_bytenr = btrfs_sb_offset(superblock_mirror_num);
 779        if (dev_bytenr + BTRFS_SUPER_INFO_SIZE > device->commit_total_bytes)
 780                return -1;
 781        bh = __bread(superblock_bdev, dev_bytenr / BTRFS_BDEV_BLOCKSIZE,
 782                     BTRFS_SUPER_INFO_SIZE);
 783        if (NULL == bh)
 784                return -1;
 785        super_tmp = (struct btrfs_super_block *)
 786            (bh->b_data + (dev_bytenr & (BTRFS_BDEV_BLOCKSIZE - 1)));
 787
 788        if (btrfs_super_bytenr(super_tmp) != dev_bytenr ||
 789            btrfs_super_magic(super_tmp) != BTRFS_MAGIC ||
 790            memcmp(device->uuid, super_tmp->dev_item.uuid, BTRFS_UUID_SIZE) ||
 791            btrfs_super_nodesize(super_tmp) != state->metablock_size ||
 792            btrfs_super_sectorsize(super_tmp) != state->datablock_size) {
 793                brelse(bh);
 794                return 0;
 795        }
 796
 797        superblock_tmp =
 798            btrfsic_block_hashtable_lookup(superblock_bdev,
 799                                           dev_bytenr,
 800                                           &state->block_hashtable);
 801        if (NULL == superblock_tmp) {
 802                superblock_tmp = btrfsic_block_alloc();
 803                if (NULL == superblock_tmp) {
 804                        pr_info("btrfsic: error, kmalloc failed!\n");
 805                        brelse(bh);
 806                        return -1;
 807                }
 808                /* for superblock, only the dev_bytenr makes sense */
 809                superblock_tmp->dev_bytenr = dev_bytenr;
 810                superblock_tmp->dev_state = dev_state;
 811                superblock_tmp->logical_bytenr = dev_bytenr;
 812                superblock_tmp->generation = btrfs_super_generation(super_tmp);
 813                superblock_tmp->is_metadata = 1;
 814                superblock_tmp->is_superblock = 1;
 815                superblock_tmp->is_iodone = 1;
 816                superblock_tmp->never_written = 0;
 817                superblock_tmp->mirror_num = 1 + superblock_mirror_num;
 818                if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
 819                        btrfs_info_in_rcu(fs_info,
 820                                "new initial S-block (bdev %p, %s) @%llu (%s/%llu/%d)",
 821                                     superblock_bdev,
 822                                     rcu_str_deref(device->name), dev_bytenr,
 823                                     dev_state->name, dev_bytenr,
 824                                     superblock_mirror_num);
 825                list_add(&superblock_tmp->all_blocks_node,
 826                         &state->all_blocks_list);
 827                btrfsic_block_hashtable_add(superblock_tmp,
 828                                            &state->block_hashtable);
 829        }
 830
 831        /* select the one with the highest generation field */
 832        if (btrfs_super_generation(super_tmp) >
 833            state->max_superblock_generation ||
 834            0 == state->max_superblock_generation) {
 835                memcpy(selected_super, super_tmp, sizeof(*selected_super));
 836                *selected_dev_state = dev_state;
 837                state->max_superblock_generation =
 838                    btrfs_super_generation(super_tmp);
 839                state->latest_superblock = superblock_tmp;
 840        }
 841
 842        for (pass = 0; pass < 3; pass++) {
 843                u64 next_bytenr;
 844                int num_copies;
 845                int mirror_num;
 846                const char *additional_string = NULL;
 847                struct btrfs_disk_key tmp_disk_key;
 848
 849                tmp_disk_key.type = BTRFS_ROOT_ITEM_KEY;
 850                tmp_disk_key.offset = 0;
 851                switch (pass) {
 852                case 0:
 853                        btrfs_set_disk_key_objectid(&tmp_disk_key,
 854                                                    BTRFS_ROOT_TREE_OBJECTID);
 855                        additional_string = "initial root ";
 856                        next_bytenr = btrfs_super_root(super_tmp);
 857                        break;
 858                case 1:
 859                        btrfs_set_disk_key_objectid(&tmp_disk_key,
 860                                                    BTRFS_CHUNK_TREE_OBJECTID);
 861                        additional_string = "initial chunk ";
 862                        next_bytenr = btrfs_super_chunk_root(super_tmp);
 863                        break;
 864                case 2:
 865                        btrfs_set_disk_key_objectid(&tmp_disk_key,
 866                                                    BTRFS_TREE_LOG_OBJECTID);
 867                        additional_string = "initial log ";
 868                        next_bytenr = btrfs_super_log_root(super_tmp);
 869                        if (0 == next_bytenr)
 870                                continue;
 871                        break;
 872                }
 873
 874                num_copies = btrfs_num_copies(fs_info, next_bytenr,
 875                                              state->metablock_size);
 876                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
 877                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
 878                               next_bytenr, num_copies);
 879                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
 880                        struct btrfsic_block *next_block;
 881                        struct btrfsic_block_data_ctx tmp_next_block_ctx;
 882                        struct btrfsic_block_link *l;
 883
 884                        if (btrfsic_map_block(state, next_bytenr,
 885                                              state->metablock_size,
 886                                              &tmp_next_block_ctx,
 887                                              mirror_num)) {
 888                                pr_info("btrfsic: btrfsic_map_block(bytenr @%llu, mirror %d) failed!\n",
 889                                       next_bytenr, mirror_num);
 890                                brelse(bh);
 891                                return -1;
 892                        }
 893
 894                        next_block = btrfsic_block_lookup_or_add(
 895                                        state, &tmp_next_block_ctx,
 896                                        additional_string, 1, 1, 0,
 897                                        mirror_num, NULL);
 898                        if (NULL == next_block) {
 899                                btrfsic_release_block_ctx(&tmp_next_block_ctx);
 900                                brelse(bh);
 901                                return -1;
 902                        }
 903
 904                        next_block->disk_key = tmp_disk_key;
 905                        next_block->generation = BTRFSIC_GENERATION_UNKNOWN;
 906                        l = btrfsic_block_link_lookup_or_add(
 907                                        state, &tmp_next_block_ctx,
 908                                        next_block, superblock_tmp,
 909                                        BTRFSIC_GENERATION_UNKNOWN);
 910                        btrfsic_release_block_ctx(&tmp_next_block_ctx);
 911                        if (NULL == l) {
 912                                brelse(bh);
 913                                return -1;
 914                        }
 915                }
 916        }
 917        if (state->print_mask & BTRFSIC_PRINT_MASK_INITIAL_ALL_TREES)
 918                btrfsic_dump_tree_sub(state, superblock_tmp, 0);
 919
 920        brelse(bh);
 921        return 0;
 922}
 923
 924static struct btrfsic_stack_frame *btrfsic_stack_frame_alloc(void)
 925{
 926        struct btrfsic_stack_frame *sf;
 927
 928        sf = kzalloc(sizeof(*sf), GFP_NOFS);
 929        if (NULL == sf)
 930                pr_info("btrfsic: alloc memory failed!\n");
 931        else
 932                sf->magic = BTRFSIC_BLOCK_STACK_FRAME_MAGIC_NUMBER;
 933        return sf;
 934}
 935
 936static void btrfsic_stack_frame_free(struct btrfsic_stack_frame *sf)
 937{
 938        BUG_ON(!(NULL == sf ||
 939                 BTRFSIC_BLOCK_STACK_FRAME_MAGIC_NUMBER == sf->magic));
 940        kfree(sf);
 941}
 942
 943static int btrfsic_process_metablock(
 944                struct btrfsic_state *state,
 945                struct btrfsic_block *const first_block,
 946                struct btrfsic_block_data_ctx *const first_block_ctx,
 947                int first_limit_nesting, int force_iodone_flag)
 948{
 949        struct btrfsic_stack_frame initial_stack_frame = { 0 };
 950        struct btrfsic_stack_frame *sf;
 951        struct btrfsic_stack_frame *next_stack;
 952        struct btrfs_header *const first_hdr =
 953                (struct btrfs_header *)first_block_ctx->datav[0];
 954
 955        BUG_ON(!first_hdr);
 956        sf = &initial_stack_frame;
 957        sf->error = 0;
 958        sf->i = -1;
 959        sf->limit_nesting = first_limit_nesting;
 960        sf->block = first_block;
 961        sf->block_ctx = first_block_ctx;
 962        sf->next_block = NULL;
 963        sf->hdr = first_hdr;
 964        sf->prev = NULL;
 965
 966continue_with_new_stack_frame:
 967        sf->block->generation = le64_to_cpu(sf->hdr->generation);
 968        if (0 == sf->hdr->level) {
 969                struct btrfs_leaf *const leafhdr =
 970                    (struct btrfs_leaf *)sf->hdr;
 971
 972                if (-1 == sf->i) {
 973                        sf->nr = btrfs_stack_header_nritems(&leafhdr->header);
 974
 975                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
 976                                pr_info("leaf %llu items %d generation %llu owner %llu\n",
 977                                       sf->block_ctx->start, sf->nr,
 978                                       btrfs_stack_header_generation(
 979                                               &leafhdr->header),
 980                                       btrfs_stack_header_owner(
 981                                               &leafhdr->header));
 982                }
 983
 984continue_with_current_leaf_stack_frame:
 985                if (0 == sf->num_copies || sf->mirror_num > sf->num_copies) {
 986                        sf->i++;
 987                        sf->num_copies = 0;
 988                }
 989
 990                if (sf->i < sf->nr) {
 991                        struct btrfs_item disk_item;
 992                        u32 disk_item_offset =
 993                                (uintptr_t)(leafhdr->items + sf->i) -
 994                                (uintptr_t)leafhdr;
 995                        struct btrfs_disk_key *disk_key;
 996                        u8 type;
 997                        u32 item_offset;
 998                        u32 item_size;
 999
1000                        if (disk_item_offset + sizeof(struct btrfs_item) >
1001                            sf->block_ctx->len) {
1002leaf_item_out_of_bounce_error:
1003                                pr_info("btrfsic: leaf item out of bounce at logical %llu, dev %s\n",
1004                                       sf->block_ctx->start,
1005                                       sf->block_ctx->dev->name);
1006                                goto one_stack_frame_backwards;
1007                        }
1008                        btrfsic_read_from_block_data(sf->block_ctx,
1009                                                     &disk_item,
1010                                                     disk_item_offset,
1011                                                     sizeof(struct btrfs_item));
1012                        item_offset = btrfs_stack_item_offset(&disk_item);
1013                        item_size = btrfs_stack_item_size(&disk_item);
1014                        disk_key = &disk_item.key;
1015                        type = btrfs_disk_key_type(disk_key);
1016
1017                        if (BTRFS_ROOT_ITEM_KEY == type) {
1018                                struct btrfs_root_item root_item;
1019                                u32 root_item_offset;
1020                                u64 next_bytenr;
1021
1022                                root_item_offset = item_offset +
1023                                        offsetof(struct btrfs_leaf, items);
1024                                if (root_item_offset + item_size >
1025                                    sf->block_ctx->len)
1026                                        goto leaf_item_out_of_bounce_error;
1027                                btrfsic_read_from_block_data(
1028                                        sf->block_ctx, &root_item,
1029                                        root_item_offset,
1030                                        item_size);
1031                                next_bytenr = btrfs_root_bytenr(&root_item);
1032
1033                                sf->error =
1034                                    btrfsic_create_link_to_next_block(
1035                                                state,
1036                                                sf->block,
1037                                                sf->block_ctx,
1038                                                next_bytenr,
1039                                                sf->limit_nesting,
1040                                                &sf->next_block_ctx,
1041                                                &sf->next_block,
1042                                                force_iodone_flag,
1043                                                &sf->num_copies,
1044                                                &sf->mirror_num,
1045                                                disk_key,
1046                                                btrfs_root_generation(
1047                                                &root_item));
1048                                if (sf->error)
1049                                        goto one_stack_frame_backwards;
1050
1051                                if (NULL != sf->next_block) {
1052                                        struct btrfs_header *const next_hdr =
1053                                            (struct btrfs_header *)
1054                                            sf->next_block_ctx.datav[0];
1055
1056                                        next_stack =
1057                                            btrfsic_stack_frame_alloc();
1058                                        if (NULL == next_stack) {
1059                                                sf->error = -1;
1060                                                btrfsic_release_block_ctx(
1061                                                                &sf->
1062                                                                next_block_ctx);
1063                                                goto one_stack_frame_backwards;
1064                                        }
1065
1066                                        next_stack->i = -1;
1067                                        next_stack->block = sf->next_block;
1068                                        next_stack->block_ctx =
1069                                            &sf->next_block_ctx;
1070                                        next_stack->next_block = NULL;
1071                                        next_stack->hdr = next_hdr;
1072                                        next_stack->limit_nesting =
1073                                            sf->limit_nesting - 1;
1074                                        next_stack->prev = sf;
1075                                        sf = next_stack;
1076                                        goto continue_with_new_stack_frame;
1077                                }
1078                        } else if (BTRFS_EXTENT_DATA_KEY == type &&
1079                                   state->include_extent_data) {
1080                                sf->error = btrfsic_handle_extent_data(
1081                                                state,
1082                                                sf->block,
1083                                                sf->block_ctx,
1084                                                item_offset,
1085                                                force_iodone_flag);
1086                                if (sf->error)
1087                                        goto one_stack_frame_backwards;
1088                        }
1089
1090                        goto continue_with_current_leaf_stack_frame;
1091                }
1092        } else {
1093                struct btrfs_node *const nodehdr = (struct btrfs_node *)sf->hdr;
1094
1095                if (-1 == sf->i) {
1096                        sf->nr = btrfs_stack_header_nritems(&nodehdr->header);
1097
1098                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1099                                pr_info("node %llu level %d items %d generation %llu owner %llu\n",
1100                                       sf->block_ctx->start,
1101                                       nodehdr->header.level, sf->nr,
1102                                       btrfs_stack_header_generation(
1103                                       &nodehdr->header),
1104                                       btrfs_stack_header_owner(
1105                                       &nodehdr->header));
1106                }
1107
1108continue_with_current_node_stack_frame:
1109                if (0 == sf->num_copies || sf->mirror_num > sf->num_copies) {
1110                        sf->i++;
1111                        sf->num_copies = 0;
1112                }
1113
1114                if (sf->i < sf->nr) {
1115                        struct btrfs_key_ptr key_ptr;
1116                        u32 key_ptr_offset;
1117                        u64 next_bytenr;
1118
1119                        key_ptr_offset = (uintptr_t)(nodehdr->ptrs + sf->i) -
1120                                          (uintptr_t)nodehdr;
1121                        if (key_ptr_offset + sizeof(struct btrfs_key_ptr) >
1122                            sf->block_ctx->len) {
1123                                pr_info("btrfsic: node item out of bounce at logical %llu, dev %s\n",
1124                                       sf->block_ctx->start,
1125                                       sf->block_ctx->dev->name);
1126                                goto one_stack_frame_backwards;
1127                        }
1128                        btrfsic_read_from_block_data(
1129                                sf->block_ctx, &key_ptr, key_ptr_offset,
1130                                sizeof(struct btrfs_key_ptr));
1131                        next_bytenr = btrfs_stack_key_blockptr(&key_ptr);
1132
1133                        sf->error = btrfsic_create_link_to_next_block(
1134                                        state,
1135                                        sf->block,
1136                                        sf->block_ctx,
1137                                        next_bytenr,
1138                                        sf->limit_nesting,
1139                                        &sf->next_block_ctx,
1140                                        &sf->next_block,
1141                                        force_iodone_flag,
1142                                        &sf->num_copies,
1143                                        &sf->mirror_num,
1144                                        &key_ptr.key,
1145                                        btrfs_stack_key_generation(&key_ptr));
1146                        if (sf->error)
1147                                goto one_stack_frame_backwards;
1148
1149                        if (NULL != sf->next_block) {
1150                                struct btrfs_header *const next_hdr =
1151                                    (struct btrfs_header *)
1152                                    sf->next_block_ctx.datav[0];
1153
1154                                next_stack = btrfsic_stack_frame_alloc();
1155                                if (NULL == next_stack) {
1156                                        sf->error = -1;
1157                                        goto one_stack_frame_backwards;
1158                                }
1159
1160                                next_stack->i = -1;
1161                                next_stack->block = sf->next_block;
1162                                next_stack->block_ctx = &sf->next_block_ctx;
1163                                next_stack->next_block = NULL;
1164                                next_stack->hdr = next_hdr;
1165                                next_stack->limit_nesting =
1166                                    sf->limit_nesting - 1;
1167                                next_stack->prev = sf;
1168                                sf = next_stack;
1169                                goto continue_with_new_stack_frame;
1170                        }
1171
1172                        goto continue_with_current_node_stack_frame;
1173                }
1174        }
1175
1176one_stack_frame_backwards:
1177        if (NULL != sf->prev) {
1178                struct btrfsic_stack_frame *const prev = sf->prev;
1179
1180                /* the one for the initial block is freed in the caller */
1181                btrfsic_release_block_ctx(sf->block_ctx);
1182
1183                if (sf->error) {
1184                        prev->error = sf->error;
1185                        btrfsic_stack_frame_free(sf);
1186                        sf = prev;
1187                        goto one_stack_frame_backwards;
1188                }
1189
1190                btrfsic_stack_frame_free(sf);
1191                sf = prev;
1192                goto continue_with_new_stack_frame;
1193        } else {
1194                BUG_ON(&initial_stack_frame != sf);
1195        }
1196
1197        return sf->error;
1198}
1199
1200static void btrfsic_read_from_block_data(
1201        struct btrfsic_block_data_ctx *block_ctx,
1202        void *dstv, u32 offset, size_t len)
1203{
1204        size_t cur;
1205        size_t pgoff;
1206        char *kaddr;
1207        char *dst = (char *)dstv;
1208        size_t start_offset = offset_in_page(block_ctx->start);
1209        unsigned long i = (start_offset + offset) >> PAGE_SHIFT;
1210
1211        WARN_ON(offset + len > block_ctx->len);
1212        pgoff = offset_in_page(start_offset + offset);
1213
1214        while (len > 0) {
1215                cur = min(len, ((size_t)PAGE_SIZE - pgoff));
1216                BUG_ON(i >= DIV_ROUND_UP(block_ctx->len, PAGE_SIZE));
1217                kaddr = block_ctx->datav[i];
1218                memcpy(dst, kaddr + pgoff, cur);
1219
1220                dst += cur;
1221                len -= cur;
1222                pgoff = 0;
1223                i++;
1224        }
1225}
1226
1227static int btrfsic_create_link_to_next_block(
1228                struct btrfsic_state *state,
1229                struct btrfsic_block *block,
1230                struct btrfsic_block_data_ctx *block_ctx,
1231                u64 next_bytenr,
1232                int limit_nesting,
1233                struct btrfsic_block_data_ctx *next_block_ctx,
1234                struct btrfsic_block **next_blockp,
1235                int force_iodone_flag,
1236                int *num_copiesp, int *mirror_nump,
1237                struct btrfs_disk_key *disk_key,
1238                u64 parent_generation)
1239{
1240        struct btrfs_fs_info *fs_info = state->fs_info;
1241        struct btrfsic_block *next_block = NULL;
1242        int ret;
1243        struct btrfsic_block_link *l;
1244        int did_alloc_block_link;
1245        int block_was_created;
1246
1247        *next_blockp = NULL;
1248        if (0 == *num_copiesp) {
1249                *num_copiesp = btrfs_num_copies(fs_info, next_bytenr,
1250                                                state->metablock_size);
1251                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
1252                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
1253                               next_bytenr, *num_copiesp);
1254                *mirror_nump = 1;
1255        }
1256
1257        if (*mirror_nump > *num_copiesp)
1258                return 0;
1259
1260        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1261                pr_info("btrfsic_create_link_to_next_block(mirror_num=%d)\n",
1262                       *mirror_nump);
1263        ret = btrfsic_map_block(state, next_bytenr,
1264                                state->metablock_size,
1265                                next_block_ctx, *mirror_nump);
1266        if (ret) {
1267                pr_info("btrfsic: btrfsic_map_block(@%llu, mirror=%d) failed!\n",
1268                       next_bytenr, *mirror_nump);
1269                btrfsic_release_block_ctx(next_block_ctx);
1270                *next_blockp = NULL;
1271                return -1;
1272        }
1273
1274        next_block = btrfsic_block_lookup_or_add(state,
1275                                                 next_block_ctx, "referenced ",
1276                                                 1, force_iodone_flag,
1277                                                 !force_iodone_flag,
1278                                                 *mirror_nump,
1279                                                 &block_was_created);
1280        if (NULL == next_block) {
1281                btrfsic_release_block_ctx(next_block_ctx);
1282                *next_blockp = NULL;
1283                return -1;
1284        }
1285        if (block_was_created) {
1286                l = NULL;
1287                next_block->generation = BTRFSIC_GENERATION_UNKNOWN;
1288        } else {
1289                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
1290                        if (next_block->logical_bytenr != next_bytenr &&
1291                            !(!next_block->is_metadata &&
1292                              0 == next_block->logical_bytenr))
1293                                pr_info("Referenced block @%llu (%s/%llu/%d) found in hash table, %c, bytenr mismatch (!= stored %llu).\n",
1294                                       next_bytenr, next_block_ctx->dev->name,
1295                                       next_block_ctx->dev_bytenr, *mirror_nump,
1296                                       btrfsic_get_block_type(state,
1297                                                              next_block),
1298                                       next_block->logical_bytenr);
1299                        else
1300                                pr_info("Referenced block @%llu (%s/%llu/%d) found in hash table, %c.\n",
1301                                       next_bytenr, next_block_ctx->dev->name,
1302                                       next_block_ctx->dev_bytenr, *mirror_nump,
1303                                       btrfsic_get_block_type(state,
1304                                                              next_block));
1305                }
1306                next_block->logical_bytenr = next_bytenr;
1307
1308                next_block->mirror_num = *mirror_nump;
1309                l = btrfsic_block_link_hashtable_lookup(
1310                                next_block_ctx->dev->bdev,
1311                                next_block_ctx->dev_bytenr,
1312                                block_ctx->dev->bdev,
1313                                block_ctx->dev_bytenr,
1314                                &state->block_link_hashtable);
1315        }
1316
1317        next_block->disk_key = *disk_key;
1318        if (NULL == l) {
1319                l = btrfsic_block_link_alloc();
1320                if (NULL == l) {
1321                        pr_info("btrfsic: error, kmalloc failed!\n");
1322                        btrfsic_release_block_ctx(next_block_ctx);
1323                        *next_blockp = NULL;
1324                        return -1;
1325                }
1326
1327                did_alloc_block_link = 1;
1328                l->block_ref_to = next_block;
1329                l->block_ref_from = block;
1330                l->ref_cnt = 1;
1331                l->parent_generation = parent_generation;
1332
1333                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1334                        btrfsic_print_add_link(state, l);
1335
1336                list_add(&l->node_ref_to, &block->ref_to_list);
1337                list_add(&l->node_ref_from, &next_block->ref_from_list);
1338
1339                btrfsic_block_link_hashtable_add(l,
1340                                                 &state->block_link_hashtable);
1341        } else {
1342                did_alloc_block_link = 0;
1343                if (0 == limit_nesting) {
1344                        l->ref_cnt++;
1345                        l->parent_generation = parent_generation;
1346                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1347                                btrfsic_print_add_link(state, l);
1348                }
1349        }
1350
1351        if (limit_nesting > 0 && did_alloc_block_link) {
1352                ret = btrfsic_read_block(state, next_block_ctx);
1353                if (ret < (int)next_block_ctx->len) {
1354                        pr_info("btrfsic: read block @logical %llu failed!\n",
1355                               next_bytenr);
1356                        btrfsic_release_block_ctx(next_block_ctx);
1357                        *next_blockp = NULL;
1358                        return -1;
1359                }
1360
1361                *next_blockp = next_block;
1362        } else {
1363                *next_blockp = NULL;
1364        }
1365        (*mirror_nump)++;
1366
1367        return 0;
1368}
1369
1370static int btrfsic_handle_extent_data(
1371                struct btrfsic_state *state,
1372                struct btrfsic_block *block,
1373                struct btrfsic_block_data_ctx *block_ctx,
1374                u32 item_offset, int force_iodone_flag)
1375{
1376        struct btrfs_fs_info *fs_info = state->fs_info;
1377        struct btrfs_file_extent_item file_extent_item;
1378        u64 file_extent_item_offset;
1379        u64 next_bytenr;
1380        u64 num_bytes;
1381        u64 generation;
1382        struct btrfsic_block_link *l;
1383        int ret;
1384
1385        file_extent_item_offset = offsetof(struct btrfs_leaf, items) +
1386                                  item_offset;
1387        if (file_extent_item_offset +
1388            offsetof(struct btrfs_file_extent_item, disk_num_bytes) >
1389            block_ctx->len) {
1390                pr_info("btrfsic: file item out of bounce at logical %llu, dev %s\n",
1391                       block_ctx->start, block_ctx->dev->name);
1392                return -1;
1393        }
1394
1395        btrfsic_read_from_block_data(block_ctx, &file_extent_item,
1396                file_extent_item_offset,
1397                offsetof(struct btrfs_file_extent_item, disk_num_bytes));
1398        if (BTRFS_FILE_EXTENT_REG != file_extent_item.type ||
1399            btrfs_stack_file_extent_disk_bytenr(&file_extent_item) == 0) {
1400                if (state->print_mask & BTRFSIC_PRINT_MASK_VERY_VERBOSE)
1401                        pr_info("extent_data: type %u, disk_bytenr = %llu\n",
1402                               file_extent_item.type,
1403                               btrfs_stack_file_extent_disk_bytenr(
1404                               &file_extent_item));
1405                return 0;
1406        }
1407
1408        if (file_extent_item_offset + sizeof(struct btrfs_file_extent_item) >
1409            block_ctx->len) {
1410                pr_info("btrfsic: file item out of bounce at logical %llu, dev %s\n",
1411                       block_ctx->start, block_ctx->dev->name);
1412                return -1;
1413        }
1414        btrfsic_read_from_block_data(block_ctx, &file_extent_item,
1415                                     file_extent_item_offset,
1416                                     sizeof(struct btrfs_file_extent_item));
1417        next_bytenr = btrfs_stack_file_extent_disk_bytenr(&file_extent_item);
1418        if (btrfs_stack_file_extent_compression(&file_extent_item) ==
1419            BTRFS_COMPRESS_NONE) {
1420                next_bytenr += btrfs_stack_file_extent_offset(&file_extent_item);
1421                num_bytes = btrfs_stack_file_extent_num_bytes(&file_extent_item);
1422        } else {
1423                num_bytes = btrfs_stack_file_extent_disk_num_bytes(&file_extent_item);
1424        }
1425        generation = btrfs_stack_file_extent_generation(&file_extent_item);
1426
1427        if (state->print_mask & BTRFSIC_PRINT_MASK_VERY_VERBOSE)
1428                pr_info("extent_data: type %u, disk_bytenr = %llu, offset = %llu, num_bytes = %llu\n",
1429                       file_extent_item.type,
1430                       btrfs_stack_file_extent_disk_bytenr(&file_extent_item),
1431                       btrfs_stack_file_extent_offset(&file_extent_item),
1432                       num_bytes);
1433        while (num_bytes > 0) {
1434                u32 chunk_len;
1435                int num_copies;
1436                int mirror_num;
1437
1438                if (num_bytes > state->datablock_size)
1439                        chunk_len = state->datablock_size;
1440                else
1441                        chunk_len = num_bytes;
1442
1443                num_copies = btrfs_num_copies(fs_info, next_bytenr,
1444                                              state->datablock_size);
1445                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
1446                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
1447                               next_bytenr, num_copies);
1448                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
1449                        struct btrfsic_block_data_ctx next_block_ctx;
1450                        struct btrfsic_block *next_block;
1451                        int block_was_created;
1452
1453                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1454                                pr_info("btrfsic_handle_extent_data(mirror_num=%d)\n",
1455                                        mirror_num);
1456                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERY_VERBOSE)
1457                                pr_info("\tdisk_bytenr = %llu, num_bytes %u\n",
1458                                       next_bytenr, chunk_len);
1459                        ret = btrfsic_map_block(state, next_bytenr,
1460                                                chunk_len, &next_block_ctx,
1461                                                mirror_num);
1462                        if (ret) {
1463                                pr_info("btrfsic: btrfsic_map_block(@%llu, mirror=%d) failed!\n",
1464                                       next_bytenr, mirror_num);
1465                                return -1;
1466                        }
1467
1468                        next_block = btrfsic_block_lookup_or_add(
1469                                        state,
1470                                        &next_block_ctx,
1471                                        "referenced ",
1472                                        0,
1473                                        force_iodone_flag,
1474                                        !force_iodone_flag,
1475                                        mirror_num,
1476                                        &block_was_created);
1477                        if (NULL == next_block) {
1478                                pr_info("btrfsic: error, kmalloc failed!\n");
1479                                btrfsic_release_block_ctx(&next_block_ctx);
1480                                return -1;
1481                        }
1482                        if (!block_was_created) {
1483                                if ((state->print_mask &
1484                                     BTRFSIC_PRINT_MASK_VERBOSE) &&
1485                                    next_block->logical_bytenr != next_bytenr &&
1486                                    !(!next_block->is_metadata &&
1487                                      0 == next_block->logical_bytenr)) {
1488                                        pr_info("Referenced block @%llu (%s/%llu/%d) found in hash table, D, bytenr mismatch (!= stored %llu).\n",
1489                                               next_bytenr,
1490                                               next_block_ctx.dev->name,
1491                                               next_block_ctx.dev_bytenr,
1492                                               mirror_num,
1493                                               next_block->logical_bytenr);
1494                                }
1495                                next_block->logical_bytenr = next_bytenr;
1496                                next_block->mirror_num = mirror_num;
1497                        }
1498
1499                        l = btrfsic_block_link_lookup_or_add(state,
1500                                                             &next_block_ctx,
1501                                                             next_block, block,
1502                                                             generation);
1503                        btrfsic_release_block_ctx(&next_block_ctx);
1504                        if (NULL == l)
1505                                return -1;
1506                }
1507
1508                next_bytenr += chunk_len;
1509                num_bytes -= chunk_len;
1510        }
1511
1512        return 0;
1513}
1514
1515static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
1516                             struct btrfsic_block_data_ctx *block_ctx_out,
1517                             int mirror_num)
1518{
1519        struct btrfs_fs_info *fs_info = state->fs_info;
1520        int ret;
1521        u64 length;
1522        struct btrfs_bio *multi = NULL;
1523        struct btrfs_device *device;
1524
1525        length = len;
1526        ret = btrfs_map_block(fs_info, BTRFS_MAP_READ,
1527                              bytenr, &length, &multi, mirror_num);
1528
1529        if (ret) {
1530                block_ctx_out->start = 0;
1531                block_ctx_out->dev_bytenr = 0;
1532                block_ctx_out->len = 0;
1533                block_ctx_out->dev = NULL;
1534                block_ctx_out->datav = NULL;
1535                block_ctx_out->pagev = NULL;
1536                block_ctx_out->mem_to_free = NULL;
1537
1538                return ret;
1539        }
1540
1541        device = multi->stripes[0].dev;
1542        if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state) ||
1543            !device->bdev || !device->name)
1544                block_ctx_out->dev = NULL;
1545        else
1546                block_ctx_out->dev = btrfsic_dev_state_lookup(
1547                                                        device->bdev->bd_dev);
1548        block_ctx_out->dev_bytenr = multi->stripes[0].physical;
1549        block_ctx_out->start = bytenr;
1550        block_ctx_out->len = len;
1551        block_ctx_out->datav = NULL;
1552        block_ctx_out->pagev = NULL;
1553        block_ctx_out->mem_to_free = NULL;
1554
1555        kfree(multi);
1556        if (NULL == block_ctx_out->dev) {
1557                ret = -ENXIO;
1558                pr_info("btrfsic: error, cannot lookup dev (#1)!\n");
1559        }
1560
1561        return ret;
1562}
1563
1564static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx)
1565{
1566        if (block_ctx->mem_to_free) {
1567                unsigned int num_pages;
1568
1569                BUG_ON(!block_ctx->datav);
1570                BUG_ON(!block_ctx->pagev);
1571                num_pages = (block_ctx->len + (u64)PAGE_SIZE - 1) >>
1572                            PAGE_SHIFT;
1573                while (num_pages > 0) {
1574                        num_pages--;
1575                        if (block_ctx->datav[num_pages]) {
1576                                kunmap(block_ctx->pagev[num_pages]);
1577                                block_ctx->datav[num_pages] = NULL;
1578                        }
1579                        if (block_ctx->pagev[num_pages]) {
1580                                __free_page(block_ctx->pagev[num_pages]);
1581                                block_ctx->pagev[num_pages] = NULL;
1582                        }
1583                }
1584
1585                kfree(block_ctx->mem_to_free);
1586                block_ctx->mem_to_free = NULL;
1587                block_ctx->pagev = NULL;
1588                block_ctx->datav = NULL;
1589        }
1590}
1591
1592static int btrfsic_read_block(struct btrfsic_state *state,
1593                              struct btrfsic_block_data_ctx *block_ctx)
1594{
1595        unsigned int num_pages;
1596        unsigned int i;
1597        size_t size;
1598        u64 dev_bytenr;
1599        int ret;
1600
1601        BUG_ON(block_ctx->datav);
1602        BUG_ON(block_ctx->pagev);
1603        BUG_ON(block_ctx->mem_to_free);
1604        if (!PAGE_ALIGNED(block_ctx->dev_bytenr)) {
1605                pr_info("btrfsic: read_block() with unaligned bytenr %llu\n",
1606                       block_ctx->dev_bytenr);
1607                return -1;
1608        }
1609
1610        num_pages = (block_ctx->len + (u64)PAGE_SIZE - 1) >>
1611                    PAGE_SHIFT;
1612        size = sizeof(*block_ctx->datav) + sizeof(*block_ctx->pagev);
1613        block_ctx->mem_to_free = kcalloc(num_pages, size, GFP_NOFS);
1614        if (!block_ctx->mem_to_free)
1615                return -ENOMEM;
1616        block_ctx->datav = block_ctx->mem_to_free;
1617        block_ctx->pagev = (struct page **)(block_ctx->datav + num_pages);
1618        for (i = 0; i < num_pages; i++) {
1619                block_ctx->pagev[i] = alloc_page(GFP_NOFS);
1620                if (!block_ctx->pagev[i])
1621                        return -1;
1622        }
1623
1624        dev_bytenr = block_ctx->dev_bytenr;
1625        for (i = 0; i < num_pages;) {
1626                struct bio *bio;
1627                unsigned int j;
1628
1629                bio = btrfs_io_bio_alloc(num_pages - i);
1630                bio_set_dev(bio, block_ctx->dev->bdev);
1631                bio->bi_iter.bi_sector = dev_bytenr >> 9;
1632                bio->bi_opf = REQ_OP_READ;
1633
1634                for (j = i; j < num_pages; j++) {
1635                        ret = bio_add_page(bio, block_ctx->pagev[j],
1636                                           PAGE_SIZE, 0);
1637                        if (PAGE_SIZE != ret)
1638                                break;
1639                }
1640                if (j == i) {
1641                        pr_info("btrfsic: error, failed to add a single page!\n");
1642                        return -1;
1643                }
1644                if (submit_bio_wait(bio)) {
1645                        pr_info("btrfsic: read error at logical %llu dev %s!\n",
1646                               block_ctx->start, block_ctx->dev->name);
1647                        bio_put(bio);
1648                        return -1;
1649                }
1650                bio_put(bio);
1651                dev_bytenr += (j - i) * PAGE_SIZE;
1652                i = j;
1653        }
1654        for (i = 0; i < num_pages; i++)
1655                block_ctx->datav[i] = kmap(block_ctx->pagev[i]);
1656
1657        return block_ctx->len;
1658}
1659
1660static void btrfsic_dump_database(struct btrfsic_state *state)
1661{
1662        const struct btrfsic_block *b_all;
1663
1664        BUG_ON(NULL == state);
1665
1666        pr_info("all_blocks_list:\n");
1667        list_for_each_entry(b_all, &state->all_blocks_list, all_blocks_node) {
1668                const struct btrfsic_block_link *l;
1669
1670                pr_info("%c-block @%llu (%s/%llu/%d)\n",
1671                       btrfsic_get_block_type(state, b_all),
1672                       b_all->logical_bytenr, b_all->dev_state->name,
1673                       b_all->dev_bytenr, b_all->mirror_num);
1674
1675                list_for_each_entry(l, &b_all->ref_to_list, node_ref_to) {
1676                        pr_info(" %c @%llu (%s/%llu/%d) refers %u* to %c @%llu (%s/%llu/%d)\n",
1677                               btrfsic_get_block_type(state, b_all),
1678                               b_all->logical_bytenr, b_all->dev_state->name,
1679                               b_all->dev_bytenr, b_all->mirror_num,
1680                               l->ref_cnt,
1681                               btrfsic_get_block_type(state, l->block_ref_to),
1682                               l->block_ref_to->logical_bytenr,
1683                               l->block_ref_to->dev_state->name,
1684                               l->block_ref_to->dev_bytenr,
1685                               l->block_ref_to->mirror_num);
1686                }
1687
1688                list_for_each_entry(l, &b_all->ref_from_list, node_ref_from) {
1689                        pr_info(" %c @%llu (%s/%llu/%d) is ref %u* from %c @%llu (%s/%llu/%d)\n",
1690                               btrfsic_get_block_type(state, b_all),
1691                               b_all->logical_bytenr, b_all->dev_state->name,
1692                               b_all->dev_bytenr, b_all->mirror_num,
1693                               l->ref_cnt,
1694                               btrfsic_get_block_type(state, l->block_ref_from),
1695                               l->block_ref_from->logical_bytenr,
1696                               l->block_ref_from->dev_state->name,
1697                               l->block_ref_from->dev_bytenr,
1698                               l->block_ref_from->mirror_num);
1699                }
1700
1701                pr_info("\n");
1702        }
1703}
1704
1705/*
1706 * Test whether the disk block contains a tree block (leaf or node)
1707 * (note that this test fails for the super block)
1708 */
1709static int btrfsic_test_for_metadata(struct btrfsic_state *state,
1710                                     char **datav, unsigned int num_pages)
1711{
1712        struct btrfs_fs_info *fs_info = state->fs_info;
1713        SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);
1714        struct btrfs_header *h;
1715        u8 csum[BTRFS_CSUM_SIZE];
1716        unsigned int i;
1717
1718        if (num_pages * PAGE_SIZE < state->metablock_size)
1719                return 1; /* not metadata */
1720        num_pages = state->metablock_size >> PAGE_SHIFT;
1721        h = (struct btrfs_header *)datav[0];
1722
1723        if (memcmp(h->fsid, fs_info->fs_devices->fsid, BTRFS_FSID_SIZE))
1724                return 1;
1725
1726        shash->tfm = fs_info->csum_shash;
1727        crypto_shash_init(shash);
1728
1729        for (i = 0; i < num_pages; i++) {
1730                u8 *data = i ? datav[i] : (datav[i] + BTRFS_CSUM_SIZE);
1731                size_t sublen = i ? PAGE_SIZE :
1732                                    (PAGE_SIZE - BTRFS_CSUM_SIZE);
1733
1734                crypto_shash_update(shash, data, sublen);
1735        }
1736        crypto_shash_final(shash, csum);
1737        if (memcmp(csum, h->csum, state->csum_size))
1738                return 1;
1739
1740        return 0; /* is metadata */
1741}
1742
1743static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
1744                                          u64 dev_bytenr, char **mapped_datav,
1745                                          unsigned int num_pages,
1746                                          struct bio *bio, int *bio_is_patched,
1747                                          struct buffer_head *bh,
1748                                          int submit_bio_bh_rw)
1749{
1750        int is_metadata;
1751        struct btrfsic_block *block;
1752        struct btrfsic_block_data_ctx block_ctx;
1753        int ret;
1754        struct btrfsic_state *state = dev_state->state;
1755        struct block_device *bdev = dev_state->bdev;
1756        unsigned int processed_len;
1757
1758        if (NULL != bio_is_patched)
1759                *bio_is_patched = 0;
1760
1761again:
1762        if (num_pages == 0)
1763                return;
1764
1765        processed_len = 0;
1766        is_metadata = (0 == btrfsic_test_for_metadata(state, mapped_datav,
1767                                                      num_pages));
1768
1769        block = btrfsic_block_hashtable_lookup(bdev, dev_bytenr,
1770                                               &state->block_hashtable);
1771        if (NULL != block) {
1772                u64 bytenr = 0;
1773                struct btrfsic_block_link *l, *tmp;
1774
1775                if (block->is_superblock) {
1776                        bytenr = btrfs_super_bytenr((struct btrfs_super_block *)
1777                                                    mapped_datav[0]);
1778                        if (num_pages * PAGE_SIZE <
1779                            BTRFS_SUPER_INFO_SIZE) {
1780                                pr_info("btrfsic: cannot work with too short bios!\n");
1781                                return;
1782                        }
1783                        is_metadata = 1;
1784                        BUG_ON(!PAGE_ALIGNED(BTRFS_SUPER_INFO_SIZE));
1785                        processed_len = BTRFS_SUPER_INFO_SIZE;
1786                        if (state->print_mask &
1787                            BTRFSIC_PRINT_MASK_TREE_BEFORE_SB_WRITE) {
1788                                pr_info("[before new superblock is written]:\n");
1789                                btrfsic_dump_tree_sub(state, block, 0);
1790                        }
1791                }
1792                if (is_metadata) {
1793                        if (!block->is_superblock) {
1794                                if (num_pages * PAGE_SIZE <
1795                                    state->metablock_size) {
1796                                        pr_info("btrfsic: cannot work with too short bios!\n");
1797                                        return;
1798                                }
1799                                processed_len = state->metablock_size;
1800                                bytenr = btrfs_stack_header_bytenr(
1801                                                (struct btrfs_header *)
1802                                                mapped_datav[0]);
1803                                btrfsic_cmp_log_and_dev_bytenr(state, bytenr,
1804                                                               dev_state,
1805                                                               dev_bytenr);
1806                        }
1807                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
1808                                if (block->logical_bytenr != bytenr &&
1809                                    !(!block->is_metadata &&
1810                                      block->logical_bytenr == 0))
1811                                        pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c, bytenr mismatch (!= stored %llu).\n",
1812                                               bytenr, dev_state->name,
1813                                               dev_bytenr,
1814                                               block->mirror_num,
1815                                               btrfsic_get_block_type(state,
1816                                                                      block),
1817                                               block->logical_bytenr);
1818                                else
1819                                        pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c.\n",
1820                                               bytenr, dev_state->name,
1821                                               dev_bytenr, block->mirror_num,
1822                                               btrfsic_get_block_type(state,
1823                                                                      block));
1824                        }
1825                        block->logical_bytenr = bytenr;
1826                } else {
1827                        if (num_pages * PAGE_SIZE <
1828                            state->datablock_size) {
1829                                pr_info("btrfsic: cannot work with too short bios!\n");
1830                                return;
1831                        }
1832                        processed_len = state->datablock_size;
1833                        bytenr = block->logical_bytenr;
1834                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1835                                pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c.\n",
1836                                       bytenr, dev_state->name, dev_bytenr,
1837                                       block->mirror_num,
1838                                       btrfsic_get_block_type(state, block));
1839                }
1840
1841                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1842                        pr_info("ref_to_list: %cE, ref_from_list: %cE\n",
1843                               list_empty(&block->ref_to_list) ? ' ' : '!',
1844                               list_empty(&block->ref_from_list) ? ' ' : '!');
1845                if (btrfsic_is_block_ref_by_superblock(state, block, 0)) {
1846                        pr_info("btrfs: attempt to overwrite %c-block @%llu (%s/%llu/%d), old(gen=%llu, objectid=%llu, type=%d, offset=%llu), new(gen=%llu), which is referenced by most recent superblock (superblockgen=%llu)!\n",
1847                               btrfsic_get_block_type(state, block), bytenr,
1848                               dev_state->name, dev_bytenr, block->mirror_num,
1849                               block->generation,
1850                               btrfs_disk_key_objectid(&block->disk_key),
1851                               block->disk_key.type,
1852                               btrfs_disk_key_offset(&block->disk_key),
1853                               btrfs_stack_header_generation(
1854                                       (struct btrfs_header *) mapped_datav[0]),
1855                               state->max_superblock_generation);
1856                        btrfsic_dump_tree(state);
1857                }
1858
1859                if (!block->is_iodone && !block->never_written) {
1860                        pr_info("btrfs: attempt to overwrite %c-block @%llu (%s/%llu/%d), oldgen=%llu, newgen=%llu, which is not yet iodone!\n",
1861                               btrfsic_get_block_type(state, block), bytenr,
1862                               dev_state->name, dev_bytenr, block->mirror_num,
1863                               block->generation,
1864                               btrfs_stack_header_generation(
1865                                       (struct btrfs_header *)
1866                                       mapped_datav[0]));
1867                        /* it would not be safe to go on */
1868                        btrfsic_dump_tree(state);
1869                        goto continue_loop;
1870                }
1871
1872                /*
1873                 * Clear all references of this block. Do not free
1874                 * the block itself even if is not referenced anymore
1875                 * because it still carries valuable information
1876                 * like whether it was ever written and IO completed.
1877                 */
1878                list_for_each_entry_safe(l, tmp, &block->ref_to_list,
1879                                         node_ref_to) {
1880                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1881                                btrfsic_print_rem_link(state, l);
1882                        l->ref_cnt--;
1883                        if (0 == l->ref_cnt) {
1884                                list_del(&l->node_ref_to);
1885                                list_del(&l->node_ref_from);
1886                                btrfsic_block_link_hashtable_remove(l);
1887                                btrfsic_block_link_free(l);
1888                        }
1889                }
1890
1891                block_ctx.dev = dev_state;
1892                block_ctx.dev_bytenr = dev_bytenr;
1893                block_ctx.start = bytenr;
1894                block_ctx.len = processed_len;
1895                block_ctx.pagev = NULL;
1896                block_ctx.mem_to_free = NULL;
1897                block_ctx.datav = mapped_datav;
1898
1899                if (is_metadata || state->include_extent_data) {
1900                        block->never_written = 0;
1901                        block->iodone_w_error = 0;
1902                        if (NULL != bio) {
1903                                block->is_iodone = 0;
1904                                BUG_ON(NULL == bio_is_patched);
1905                                if (!*bio_is_patched) {
1906                                        block->orig_bio_bh_private =
1907                                            bio->bi_private;
1908                                        block->orig_bio_bh_end_io.bio =
1909                                            bio->bi_end_io;
1910                                        block->next_in_same_bio = NULL;
1911                                        bio->bi_private = block;
1912                                        bio->bi_end_io = btrfsic_bio_end_io;
1913                                        *bio_is_patched = 1;
1914                                } else {
1915                                        struct btrfsic_block *chained_block =
1916                                            (struct btrfsic_block *)
1917                                            bio->bi_private;
1918
1919                                        BUG_ON(NULL == chained_block);
1920                                        block->orig_bio_bh_private =
1921                                            chained_block->orig_bio_bh_private;
1922                                        block->orig_bio_bh_end_io.bio =
1923                                            chained_block->orig_bio_bh_end_io.
1924                                            bio;
1925                                        block->next_in_same_bio = chained_block;
1926                                        bio->bi_private = block;
1927                                }
1928                        } else if (NULL != bh) {
1929                                block->is_iodone = 0;
1930                                block->orig_bio_bh_private = bh->b_private;
1931                                block->orig_bio_bh_end_io.bh = bh->b_end_io;
1932                                block->next_in_same_bio = NULL;
1933                                bh->b_private = block;
1934                                bh->b_end_io = btrfsic_bh_end_io;
1935                        } else {
1936                                block->is_iodone = 1;
1937                                block->orig_bio_bh_private = NULL;
1938                                block->orig_bio_bh_end_io.bio = NULL;
1939                                block->next_in_same_bio = NULL;
1940                        }
1941                }
1942
1943                block->flush_gen = dev_state->last_flush_gen + 1;
1944                block->submit_bio_bh_rw = submit_bio_bh_rw;
1945                if (is_metadata) {
1946                        block->logical_bytenr = bytenr;
1947                        block->is_metadata = 1;
1948                        if (block->is_superblock) {
1949                                BUG_ON(PAGE_SIZE !=
1950                                       BTRFS_SUPER_INFO_SIZE);
1951                                ret = btrfsic_process_written_superblock(
1952                                                state,
1953                                                block,
1954                                                (struct btrfs_super_block *)
1955                                                mapped_datav[0]);
1956                                if (state->print_mask &
1957                                    BTRFSIC_PRINT_MASK_TREE_AFTER_SB_WRITE) {
1958                                        pr_info("[after new superblock is written]:\n");
1959                                        btrfsic_dump_tree_sub(state, block, 0);
1960                                }
1961                        } else {
1962                                block->mirror_num = 0;  /* unknown */
1963                                ret = btrfsic_process_metablock(
1964                                                state,
1965                                                block,
1966                                                &block_ctx,
1967                                                0, 0);
1968                        }
1969                        if (ret)
1970                                pr_info("btrfsic: btrfsic_process_metablock(root @%llu) failed!\n",
1971                                       dev_bytenr);
1972                } else {
1973                        block->is_metadata = 0;
1974                        block->mirror_num = 0;  /* unknown */
1975                        block->generation = BTRFSIC_GENERATION_UNKNOWN;
1976                        if (!state->include_extent_data
1977                            && list_empty(&block->ref_from_list)) {
1978                                /*
1979                                 * disk block is overwritten with extent
1980                                 * data (not meta data) and we are configured
1981                                 * to not include extent data: take the
1982                                 * chance and free the block's memory
1983                                 */
1984                                btrfsic_block_hashtable_remove(block);
1985                                list_del(&block->all_blocks_node);
1986                                btrfsic_block_free(block);
1987                        }
1988                }
1989                btrfsic_release_block_ctx(&block_ctx);
1990        } else {
1991                /* block has not been found in hash table */
1992                u64 bytenr;
1993
1994                if (!is_metadata) {
1995                        processed_len = state->datablock_size;
1996                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1997                                pr_info("Written block (%s/%llu/?) !found in hash table, D.\n",
1998                                       dev_state->name, dev_bytenr);
1999                        if (!state->include_extent_data) {
2000                                /* ignore that written D block */
2001                                goto continue_loop;
2002                        }
2003
2004                        /* this is getting ugly for the
2005                         * include_extent_data case... */
2006                        bytenr = 0;     /* unknown */
2007                } else {
2008                        processed_len = state->metablock_size;
2009                        bytenr = btrfs_stack_header_bytenr(
2010                                        (struct btrfs_header *)
2011                                        mapped_datav[0]);
2012                        btrfsic_cmp_log_and_dev_bytenr(state, bytenr, dev_state,
2013                                                       dev_bytenr);
2014                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2015                                pr_info("Written block @%llu (%s/%llu/?) !found in hash table, M.\n",
2016                                       bytenr, dev_state->name, dev_bytenr);
2017                }
2018
2019                block_ctx.dev = dev_state;
2020                block_ctx.dev_bytenr = dev_bytenr;
2021                block_ctx.start = bytenr;
2022                block_ctx.len = processed_len;
2023                block_ctx.pagev = NULL;
2024                block_ctx.mem_to_free = NULL;
2025                block_ctx.datav = mapped_datav;
2026
2027                block = btrfsic_block_alloc();
2028                if (NULL == block) {
2029                        pr_info("btrfsic: error, kmalloc failed!\n");
2030                        btrfsic_release_block_ctx(&block_ctx);
2031                        goto continue_loop;
2032                }
2033                block->dev_state = dev_state;
2034                block->dev_bytenr = dev_bytenr;
2035                block->logical_bytenr = bytenr;
2036                block->is_metadata = is_metadata;
2037                block->never_written = 0;
2038                block->iodone_w_error = 0;
2039                block->mirror_num = 0;  /* unknown */
2040                block->flush_gen = dev_state->last_flush_gen + 1;
2041                block->submit_bio_bh_rw = submit_bio_bh_rw;
2042                if (NULL != bio) {
2043                        block->is_iodone = 0;
2044                        BUG_ON(NULL == bio_is_patched);
2045                        if (!*bio_is_patched) {
2046                                block->orig_bio_bh_private = bio->bi_private;
2047                                block->orig_bio_bh_end_io.bio = bio->bi_end_io;
2048                                block->next_in_same_bio = NULL;
2049                                bio->bi_private = block;
2050                                bio->bi_end_io = btrfsic_bio_end_io;
2051                                *bio_is_patched = 1;
2052                        } else {
2053                                struct btrfsic_block *chained_block =
2054                                    (struct btrfsic_block *)
2055                                    bio->bi_private;
2056
2057                                BUG_ON(NULL == chained_block);
2058                                block->orig_bio_bh_private =
2059                                    chained_block->orig_bio_bh_private;
2060                                block->orig_bio_bh_end_io.bio =
2061                                    chained_block->orig_bio_bh_end_io.bio;
2062                                block->next_in_same_bio = chained_block;
2063                                bio->bi_private = block;
2064                        }
2065                } else if (NULL != bh) {
2066                        block->is_iodone = 0;
2067                        block->orig_bio_bh_private = bh->b_private;
2068                        block->orig_bio_bh_end_io.bh = bh->b_end_io;
2069                        block->next_in_same_bio = NULL;
2070                        bh->b_private = block;
2071                        bh->b_end_io = btrfsic_bh_end_io;
2072                } else {
2073                        block->is_iodone = 1;
2074                        block->orig_bio_bh_private = NULL;
2075                        block->orig_bio_bh_end_io.bio = NULL;
2076                        block->next_in_same_bio = NULL;
2077                }
2078                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2079                        pr_info("New written %c-block @%llu (%s/%llu/%d)\n",
2080                               is_metadata ? 'M' : 'D',
2081                               block->logical_bytenr, block->dev_state->name,
2082                               block->dev_bytenr, block->mirror_num);
2083                list_add(&block->all_blocks_node, &state->all_blocks_list);
2084                btrfsic_block_hashtable_add(block, &state->block_hashtable);
2085
2086                if (is_metadata) {
2087                        ret = btrfsic_process_metablock(state, block,
2088                                                        &block_ctx, 0, 0);
2089                        if (ret)
2090                                pr_info("btrfsic: process_metablock(root @%llu) failed!\n",
2091                                       dev_bytenr);
2092                }
2093                btrfsic_release_block_ctx(&block_ctx);
2094        }
2095
2096continue_loop:
2097        BUG_ON(!processed_len);
2098        dev_bytenr += processed_len;
2099        mapped_datav += processed_len >> PAGE_SHIFT;
2100        num_pages -= processed_len >> PAGE_SHIFT;
2101        goto again;
2102}
2103
2104static void btrfsic_bio_end_io(struct bio *bp)
2105{
2106        struct btrfsic_block *block = (struct btrfsic_block *)bp->bi_private;
2107        int iodone_w_error;
2108
2109        /* mutex is not held! This is not save if IO is not yet completed
2110         * on umount */
2111        iodone_w_error = 0;
2112        if (bp->bi_status)
2113                iodone_w_error = 1;
2114
2115        BUG_ON(NULL == block);
2116        bp->bi_private = block->orig_bio_bh_private;
2117        bp->bi_end_io = block->orig_bio_bh_end_io.bio;
2118
2119        do {
2120                struct btrfsic_block *next_block;
2121                struct btrfsic_dev_state *const dev_state = block->dev_state;
2122
2123                if ((dev_state->state->print_mask &
2124                     BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2125                        pr_info("bio_end_io(err=%d) for %c @%llu (%s/%llu/%d)\n",
2126                               bp->bi_status,
2127                               btrfsic_get_block_type(dev_state->state, block),
2128                               block->logical_bytenr, dev_state->name,
2129                               block->dev_bytenr, block->mirror_num);
2130                next_block = block->next_in_same_bio;
2131                block->iodone_w_error = iodone_w_error;
2132                if (block->submit_bio_bh_rw & REQ_PREFLUSH) {
2133                        dev_state->last_flush_gen++;
2134                        if ((dev_state->state->print_mask &
2135                             BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2136                                pr_info("bio_end_io() new %s flush_gen=%llu\n",
2137                                       dev_state->name,
2138                                       dev_state->last_flush_gen);
2139                }
2140                if (block->submit_bio_bh_rw & REQ_FUA)
2141                        block->flush_gen = 0; /* FUA completed means block is
2142                                               * on disk */
2143                block->is_iodone = 1; /* for FLUSH, this releases the block */
2144                block = next_block;
2145        } while (NULL != block);
2146
2147        bp->bi_end_io(bp);
2148}
2149
2150static void btrfsic_bh_end_io(struct buffer_head *bh, int uptodate)
2151{
2152        struct btrfsic_block *block = (struct btrfsic_block *)bh->b_private;
2153        int iodone_w_error = !uptodate;
2154        struct btrfsic_dev_state *dev_state;
2155
2156        BUG_ON(NULL == block);
2157        dev_state = block->dev_state;
2158        if ((dev_state->state->print_mask & BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2159                pr_info("bh_end_io(error=%d) for %c @%llu (%s/%llu/%d)\n",
2160                       iodone_w_error,
2161                       btrfsic_get_block_type(dev_state->state, block),
2162                       block->logical_bytenr, block->dev_state->name,
2163                       block->dev_bytenr, block->mirror_num);
2164
2165        block->iodone_w_error = iodone_w_error;
2166        if (block->submit_bio_bh_rw & REQ_PREFLUSH) {
2167                dev_state->last_flush_gen++;
2168                if ((dev_state->state->print_mask &
2169                     BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2170                        pr_info("bh_end_io() new %s flush_gen=%llu\n",
2171                               dev_state->name, dev_state->last_flush_gen);
2172        }
2173        if (block->submit_bio_bh_rw & REQ_FUA)
2174                block->flush_gen = 0; /* FUA completed means block is on disk */
2175
2176        bh->b_private = block->orig_bio_bh_private;
2177        bh->b_end_io = block->orig_bio_bh_end_io.bh;
2178        block->is_iodone = 1; /* for FLUSH, this releases the block */
2179        bh->b_end_io(bh, uptodate);
2180}
2181
2182static int btrfsic_process_written_superblock(
2183                struct btrfsic_state *state,
2184                struct btrfsic_block *const superblock,
2185                struct btrfs_super_block *const super_hdr)
2186{
2187        struct btrfs_fs_info *fs_info = state->fs_info;
2188        int pass;
2189
2190        superblock->generation = btrfs_super_generation(super_hdr);
2191        if (!(superblock->generation > state->max_superblock_generation ||
2192              0 == state->max_superblock_generation)) {
2193                if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
2194                        pr_info("btrfsic: superblock @%llu (%s/%llu/%d) with old gen %llu <= %llu\n",
2195                               superblock->logical_bytenr,
2196                               superblock->dev_state->name,
2197                               superblock->dev_bytenr, superblock->mirror_num,
2198                               btrfs_super_generation(super_hdr),
2199                               state->max_superblock_generation);
2200        } else {
2201                if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
2202                        pr_info("btrfsic: got new superblock @%llu (%s/%llu/%d) with new gen %llu > %llu\n",
2203                               superblock->logical_bytenr,
2204                               superblock->dev_state->name,
2205                               superblock->dev_bytenr, superblock->mirror_num,
2206                               btrfs_super_generation(super_hdr),
2207                               state->max_superblock_generation);
2208
2209                state->max_superblock_generation =
2210                    btrfs_super_generation(super_hdr);
2211                state->latest_superblock = superblock;
2212        }
2213
2214        for (pass = 0; pass < 3; pass++) {
2215                int ret;
2216                u64 next_bytenr;
2217                struct btrfsic_block *next_block;
2218                struct btrfsic_block_data_ctx tmp_next_block_ctx;
2219                struct btrfsic_block_link *l;
2220                int num_copies;
2221                int mirror_num;
2222                const char *additional_string = NULL;
2223                struct btrfs_disk_key tmp_disk_key = {0};
2224
2225                btrfs_set_disk_key_objectid(&tmp_disk_key,
2226                                            BTRFS_ROOT_ITEM_KEY);
2227                btrfs_set_disk_key_objectid(&tmp_disk_key, 0);
2228
2229                switch (pass) {
2230                case 0:
2231                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2232                                                    BTRFS_ROOT_TREE_OBJECTID);
2233                        additional_string = "root ";
2234                        next_bytenr = btrfs_super_root(super_hdr);
2235                        if (state->print_mask &
2236                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2237                                pr_info("root@%llu\n", next_bytenr);
2238                        break;
2239                case 1:
2240                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2241                                                    BTRFS_CHUNK_TREE_OBJECTID);
2242                        additional_string = "chunk ";
2243                        next_bytenr = btrfs_super_chunk_root(super_hdr);
2244                        if (state->print_mask &
2245                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2246                                pr_info("chunk@%llu\n", next_bytenr);
2247                        break;
2248                case 2:
2249                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2250                                                    BTRFS_TREE_LOG_OBJECTID);
2251                        additional_string = "log ";
2252                        next_bytenr = btrfs_super_log_root(super_hdr);
2253                        if (0 == next_bytenr)
2254                                continue;
2255                        if (state->print_mask &
2256                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2257                                pr_info("log@%llu\n", next_bytenr);
2258                        break;
2259                }
2260
2261                num_copies = btrfs_num_copies(fs_info, next_bytenr,
2262                                              BTRFS_SUPER_INFO_SIZE);
2263                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
2264                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
2265                               next_bytenr, num_copies);
2266                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2267                        int was_created;
2268
2269                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2270                                pr_info("btrfsic_process_written_superblock(mirror_num=%d)\n", mirror_num);
2271                        ret = btrfsic_map_block(state, next_bytenr,
2272                                                BTRFS_SUPER_INFO_SIZE,
2273                                                &tmp_next_block_ctx,
2274                                                mirror_num);
2275                        if (ret) {
2276                                pr_info("btrfsic: btrfsic_map_block(@%llu, mirror=%d) failed!\n",
2277                                       next_bytenr, mirror_num);
2278                                return -1;
2279                        }
2280
2281                        next_block = btrfsic_block_lookup_or_add(
2282                                        state,
2283                                        &tmp_next_block_ctx,
2284                                        additional_string,
2285                                        1, 0, 1,
2286                                        mirror_num,
2287                                        &was_created);
2288                        if (NULL == next_block) {
2289                                pr_info("btrfsic: error, kmalloc failed!\n");
2290                                btrfsic_release_block_ctx(&tmp_next_block_ctx);
2291                                return -1;
2292                        }
2293
2294                        next_block->disk_key = tmp_disk_key;
2295                        if (was_created)
2296                                next_block->generation =
2297                                    BTRFSIC_GENERATION_UNKNOWN;
2298                        l = btrfsic_block_link_lookup_or_add(
2299                                        state,
2300                                        &tmp_next_block_ctx,
2301                                        next_block,
2302                                        superblock,
2303                                        BTRFSIC_GENERATION_UNKNOWN);
2304                        btrfsic_release_block_ctx(&tmp_next_block_ctx);
2305                        if (NULL == l)
2306                                return -1;
2307                }
2308        }
2309
2310        if (WARN_ON(-1 == btrfsic_check_all_ref_blocks(state, superblock, 0)))
2311                btrfsic_dump_tree(state);
2312
2313        return 0;
2314}
2315
2316static int btrfsic_check_all_ref_blocks(struct btrfsic_state *state,
2317                                        struct btrfsic_block *const block,
2318                                        int recursion_level)
2319{
2320        const struct btrfsic_block_link *l;
2321        int ret = 0;
2322
2323        if (recursion_level >= 3 + BTRFS_MAX_LEVEL) {
2324                /*
2325                 * Note that this situation can happen and does not
2326                 * indicate an error in regular cases. It happens
2327                 * when disk blocks are freed and later reused.
2328                 * The check-integrity module is not aware of any
2329                 * block free operations, it just recognizes block
2330                 * write operations. Therefore it keeps the linkage
2331                 * information for a block until a block is
2332                 * rewritten. This can temporarily cause incorrect
2333                 * and even circular linkage information. This
2334                 * causes no harm unless such blocks are referenced
2335                 * by the most recent super block.
2336                 */
2337                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2338                        pr_info("btrfsic: abort cyclic linkage (case 1).\n");
2339
2340                return ret;
2341        }
2342
2343        /*
2344         * This algorithm is recursive because the amount of used stack
2345         * space is very small and the max recursion depth is limited.
2346         */
2347        list_for_each_entry(l, &block->ref_to_list, node_ref_to) {
2348                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2349                        pr_info("rl=%d, %c @%llu (%s/%llu/%d) %u* refers to %c @%llu (%s/%llu/%d)\n",
2350                               recursion_level,
2351                               btrfsic_get_block_type(state, block),
2352                               block->logical_bytenr, block->dev_state->name,
2353                               block->dev_bytenr, block->mirror_num,
2354                               l->ref_cnt,
2355                               btrfsic_get_block_type(state, l->block_ref_to),
2356                               l->block_ref_to->logical_bytenr,
2357                               l->block_ref_to->dev_state->name,
2358                               l->block_ref_to->dev_bytenr,
2359                               l->block_ref_to->mirror_num);
2360                if (l->block_ref_to->never_written) {
2361                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which is never written!\n",
2362                               btrfsic_get_block_type(state, l->block_ref_to),
2363                               l->block_ref_to->logical_bytenr,
2364                               l->block_ref_to->dev_state->name,
2365                               l->block_ref_to->dev_bytenr,
2366                               l->block_ref_to->mirror_num);
2367                        ret = -1;
2368                } else if (!l->block_ref_to->is_iodone) {
2369                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which is not yet iodone!\n",
2370                               btrfsic_get_block_type(state, l->block_ref_to),
2371                               l->block_ref_to->logical_bytenr,
2372                               l->block_ref_to->dev_state->name,
2373                               l->block_ref_to->dev_bytenr,
2374                               l->block_ref_to->mirror_num);
2375                        ret = -1;
2376                } else if (l->block_ref_to->iodone_w_error) {
2377                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which has write error!\n",
2378                               btrfsic_get_block_type(state, l->block_ref_to),
2379                               l->block_ref_to->logical_bytenr,
2380                               l->block_ref_to->dev_state->name,
2381                               l->block_ref_to->dev_bytenr,
2382                               l->block_ref_to->mirror_num);
2383                        ret = -1;
2384                } else if (l->parent_generation !=
2385                           l->block_ref_to->generation &&
2386                           BTRFSIC_GENERATION_UNKNOWN !=
2387                           l->parent_generation &&
2388                           BTRFSIC_GENERATION_UNKNOWN !=
2389                           l->block_ref_to->generation) {
2390                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) with generation %llu != parent generation %llu!\n",
2391                               btrfsic_get_block_type(state, l->block_ref_to),
2392                               l->block_ref_to->logical_bytenr,
2393                               l->block_ref_to->dev_state->name,
2394                               l->block_ref_to->dev_bytenr,
2395                               l->block_ref_to->mirror_num,
2396                               l->block_ref_to->generation,
2397                               l->parent_generation);
2398                        ret = -1;
2399                } else if (l->block_ref_to->flush_gen >
2400                           l->block_ref_to->dev_state->last_flush_gen) {
2401                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which is not flushed out of disk's write cache (block flush_gen=%llu, dev->flush_gen=%llu)!\n",
2402                               btrfsic_get_block_type(state, l->block_ref_to),
2403                               l->block_ref_to->logical_bytenr,
2404                               l->block_ref_to->dev_state->name,
2405                               l->block_ref_to->dev_bytenr,
2406                               l->block_ref_to->mirror_num, block->flush_gen,
2407                               l->block_ref_to->dev_state->last_flush_gen);
2408                        ret = -1;
2409                } else if (-1 == btrfsic_check_all_ref_blocks(state,
2410                                                              l->block_ref_to,
2411                                                              recursion_level +
2412                                                              1)) {
2413                        ret = -1;
2414                }
2415        }
2416
2417        return ret;
2418}
2419
2420static int btrfsic_is_block_ref_by_superblock(
2421                const struct btrfsic_state *state,
2422                const struct btrfsic_block *block,
2423                int recursion_level)
2424{
2425        const struct btrfsic_block_link *l;
2426
2427        if (recursion_level >= 3 + BTRFS_MAX_LEVEL) {
2428                /* refer to comment at "abort cyclic linkage (case 1)" */
2429                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2430                        pr_info("btrfsic: abort cyclic linkage (case 2).\n");
2431
2432                return 0;
2433        }
2434
2435        /*
2436         * This algorithm is recursive because the amount of used stack space
2437         * is very small and the max recursion depth is limited.
2438         */
2439        list_for_each_entry(l, &block->ref_from_list, node_ref_from) {
2440                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2441                        pr_info("rl=%d, %c @%llu (%s/%llu/%d) is ref %u* from %c @%llu (%s/%llu/%d)\n",
2442                               recursion_level,
2443                               btrfsic_get_block_type(state, block),
2444                               block->logical_bytenr, block->dev_state->name,
2445                               block->dev_bytenr, block->mirror_num,
2446                               l->ref_cnt,
2447                               btrfsic_get_block_type(state, l->block_ref_from),
2448                               l->block_ref_from->logical_bytenr,
2449                               l->block_ref_from->dev_state->name,
2450                               l->block_ref_from->dev_bytenr,
2451                               l->block_ref_from->mirror_num);
2452                if (l->block_ref_from->is_superblock &&
2453                    state->latest_superblock->dev_bytenr ==
2454                    l->block_ref_from->dev_bytenr &&
2455                    state->latest_superblock->dev_state->bdev ==
2456                    l->block_ref_from->dev_state->bdev)
2457                        return 1;
2458                else if (btrfsic_is_block_ref_by_superblock(state,
2459                                                            l->block_ref_from,
2460                                                            recursion_level +
2461                                                            1))
2462                        return 1;
2463        }
2464
2465        return 0;
2466}
2467
2468static void btrfsic_print_add_link(const struct btrfsic_state *state,
2469                                   const struct btrfsic_block_link *l)
2470{
2471        pr_info("Add %u* link from %c @%llu (%s/%llu/%d) to %c @%llu (%s/%llu/%d).\n",
2472               l->ref_cnt,
2473               btrfsic_get_block_type(state, l->block_ref_from),
2474               l->block_ref_from->logical_bytenr,
2475               l->block_ref_from->dev_state->name,
2476               l->block_ref_from->dev_bytenr, l->block_ref_from->mirror_num,
2477               btrfsic_get_block_type(state, l->block_ref_to),
2478               l->block_ref_to->logical_bytenr,
2479               l->block_ref_to->dev_state->name, l->block_ref_to->dev_bytenr,
2480               l->block_ref_to->mirror_num);
2481}
2482
2483static void btrfsic_print_rem_link(const struct btrfsic_state *state,
2484                                   const struct btrfsic_block_link *l)
2485{
2486        pr_info("Rem %u* link from %c @%llu (%s/%llu/%d) to %c @%llu (%s/%llu/%d).\n",
2487               l->ref_cnt,
2488               btrfsic_get_block_type(state, l->block_ref_from),
2489               l->block_ref_from->logical_bytenr,
2490               l->block_ref_from->dev_state->name,
2491               l->block_ref_from->dev_bytenr, l->block_ref_from->mirror_num,
2492               btrfsic_get_block_type(state, l->block_ref_to),
2493               l->block_ref_to->logical_bytenr,
2494               l->block_ref_to->dev_state->name, l->block_ref_to->dev_bytenr,
2495               l->block_ref_to->mirror_num);
2496}
2497
2498static char btrfsic_get_block_type(const struct btrfsic_state *state,
2499                                   const struct btrfsic_block *block)
2500{
2501        if (block->is_superblock &&
2502            state->latest_superblock->dev_bytenr == block->dev_bytenr &&
2503            state->latest_superblock->dev_state->bdev == block->dev_state->bdev)
2504                return 'S';
2505        else if (block->is_superblock)
2506                return 's';
2507        else if (block->is_metadata)
2508                return 'M';
2509        else
2510                return 'D';
2511}
2512
2513static void btrfsic_dump_tree(const struct btrfsic_state *state)
2514{
2515        btrfsic_dump_tree_sub(state, state->latest_superblock, 0);
2516}
2517
2518static void btrfsic_dump_tree_sub(const struct btrfsic_state *state,
2519                                  const struct btrfsic_block *block,
2520                                  int indent_level)
2521{
2522        const struct btrfsic_block_link *l;
2523        int indent_add;
2524        static char buf[80];
2525        int cursor_position;
2526
2527        /*
2528         * Should better fill an on-stack buffer with a complete line and
2529         * dump it at once when it is time to print a newline character.
2530         */
2531
2532        /*
2533         * This algorithm is recursive because the amount of used stack space
2534         * is very small and the max recursion depth is limited.
2535         */
2536        indent_add = sprintf(buf, "%c-%llu(%s/%llu/%u)",
2537                             btrfsic_get_block_type(state, block),
2538                             block->logical_bytenr, block->dev_state->name,
2539                             block->dev_bytenr, block->mirror_num);
2540        if (indent_level + indent_add > BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL) {
2541                printk("[...]\n");
2542                return;
2543        }
2544        printk(buf);
2545        indent_level += indent_add;
2546        if (list_empty(&block->ref_to_list)) {
2547                printk("\n");
2548                return;
2549        }
2550        if (block->mirror_num > 1 &&
2551            !(state->print_mask & BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS)) {
2552                printk(" [...]\n");
2553                return;
2554        }
2555
2556        cursor_position = indent_level;
2557        list_for_each_entry(l, &block->ref_to_list, node_ref_to) {
2558                while (cursor_position < indent_level) {
2559                        printk(" ");
2560                        cursor_position++;
2561                }
2562                if (l->ref_cnt > 1)
2563                        indent_add = sprintf(buf, " %d*--> ", l->ref_cnt);
2564                else
2565                        indent_add = sprintf(buf, " --> ");
2566                if (indent_level + indent_add >
2567                    BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL) {
2568                        printk("[...]\n");
2569                        cursor_position = 0;
2570                        continue;
2571                }
2572
2573                printk(buf);
2574
2575                btrfsic_dump_tree_sub(state, l->block_ref_to,
2576                                      indent_level + indent_add);
2577                cursor_position = 0;
2578        }
2579}
2580
2581static struct btrfsic_block_link *btrfsic_block_link_lookup_or_add(
2582                struct btrfsic_state *state,
2583                struct btrfsic_block_data_ctx *next_block_ctx,
2584                struct btrfsic_block *next_block,
2585                struct btrfsic_block *from_block,
2586                u64 parent_generation)
2587{
2588        struct btrfsic_block_link *l;
2589
2590        l = btrfsic_block_link_hashtable_lookup(next_block_ctx->dev->bdev,
2591                                                next_block_ctx->dev_bytenr,
2592                                                from_block->dev_state->bdev,
2593                                                from_block->dev_bytenr,
2594                                                &state->block_link_hashtable);
2595        if (NULL == l) {
2596                l = btrfsic_block_link_alloc();
2597                if (NULL == l) {
2598                        pr_info("btrfsic: error, kmalloc failed!\n");
2599                        return NULL;
2600                }
2601
2602                l->block_ref_to = next_block;
2603                l->block_ref_from = from_block;
2604                l->ref_cnt = 1;
2605                l->parent_generation = parent_generation;
2606
2607                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2608                        btrfsic_print_add_link(state, l);
2609
2610                list_add(&l->node_ref_to, &from_block->ref_to_list);
2611                list_add(&l->node_ref_from, &next_block->ref_from_list);
2612
2613                btrfsic_block_link_hashtable_add(l,
2614                                                 &state->block_link_hashtable);
2615        } else {
2616                l->ref_cnt++;
2617                l->parent_generation = parent_generation;
2618                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2619                        btrfsic_print_add_link(state, l);
2620        }
2621
2622        return l;
2623}
2624
2625static struct btrfsic_block *btrfsic_block_lookup_or_add(
2626                struct btrfsic_state *state,
2627                struct btrfsic_block_data_ctx *block_ctx,
2628                const char *additional_string,
2629                int is_metadata,
2630                int is_iodone,
2631                int never_written,
2632                int mirror_num,
2633                int *was_created)
2634{
2635        struct btrfsic_block *block;
2636
2637        block = btrfsic_block_hashtable_lookup(block_ctx->dev->bdev,
2638                                               block_ctx->dev_bytenr,
2639                                               &state->block_hashtable);
2640        if (NULL == block) {
2641                struct btrfsic_dev_state *dev_state;
2642
2643                block = btrfsic_block_alloc();
2644                if (NULL == block) {
2645                        pr_info("btrfsic: error, kmalloc failed!\n");
2646                        return NULL;
2647                }
2648                dev_state = btrfsic_dev_state_lookup(block_ctx->dev->bdev->bd_dev);
2649                if (NULL == dev_state) {
2650                        pr_info("btrfsic: error, lookup dev_state failed!\n");
2651                        btrfsic_block_free(block);
2652                        return NULL;
2653                }
2654                block->dev_state = dev_state;
2655                block->dev_bytenr = block_ctx->dev_bytenr;
2656                block->logical_bytenr = block_ctx->start;
2657                block->is_metadata = is_metadata;
2658                block->is_iodone = is_iodone;
2659                block->never_written = never_written;
2660                block->mirror_num = mirror_num;
2661                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2662                        pr_info("New %s%c-block @%llu (%s/%llu/%d)\n",
2663                               additional_string,
2664                               btrfsic_get_block_type(state, block),
2665                               block->logical_bytenr, dev_state->name,
2666                               block->dev_bytenr, mirror_num);
2667                list_add(&block->all_blocks_node, &state->all_blocks_list);
2668                btrfsic_block_hashtable_add(block, &state->block_hashtable);
2669                if (NULL != was_created)
2670                        *was_created = 1;
2671        } else {
2672                if (NULL != was_created)
2673                        *was_created = 0;
2674        }
2675
2676        return block;
2677}
2678
2679static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state,
2680                                           u64 bytenr,
2681                                           struct btrfsic_dev_state *dev_state,
2682                                           u64 dev_bytenr)
2683{
2684        struct btrfs_fs_info *fs_info = state->fs_info;
2685        struct btrfsic_block_data_ctx block_ctx;
2686        int num_copies;
2687        int mirror_num;
2688        int match = 0;
2689        int ret;
2690
2691        num_copies = btrfs_num_copies(fs_info, bytenr, state->metablock_size);
2692
2693        for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2694                ret = btrfsic_map_block(state, bytenr, state->metablock_size,
2695                                        &block_ctx, mirror_num);
2696                if (ret) {
2697                        pr_info("btrfsic: btrfsic_map_block(logical @%llu, mirror %d) failed!\n",
2698                               bytenr, mirror_num);
2699                        continue;
2700                }
2701
2702                if (dev_state->bdev == block_ctx.dev->bdev &&
2703                    dev_bytenr == block_ctx.dev_bytenr) {
2704                        match++;
2705                        btrfsic_release_block_ctx(&block_ctx);
2706                        break;
2707                }
2708                btrfsic_release_block_ctx(&block_ctx);
2709        }
2710
2711        if (WARN_ON(!match)) {
2712                pr_info("btrfs: attempt to write M-block which contains logical bytenr that doesn't map to dev+physical bytenr of submit_bio, buffer->log_bytenr=%llu, submit_bio(bdev=%s, phys_bytenr=%llu)!\n",
2713                       bytenr, dev_state->name, dev_bytenr);
2714                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2715                        ret = btrfsic_map_block(state, bytenr,
2716                                                state->metablock_size,
2717                                                &block_ctx, mirror_num);
2718                        if (ret)
2719                                continue;
2720
2721                        pr_info("Read logical bytenr @%llu maps to (%s/%llu/%d)\n",
2722                               bytenr, block_ctx.dev->name,
2723                               block_ctx.dev_bytenr, mirror_num);
2724                }
2725        }
2726}
2727
2728static struct btrfsic_dev_state *btrfsic_dev_state_lookup(dev_t dev)
2729{
2730        return btrfsic_dev_state_hashtable_lookup(dev,
2731                                                  &btrfsic_dev_state_hashtable);
2732}
2733
2734int btrfsic_submit_bh(int op, int op_flags, struct buffer_head *bh)
2735{
2736        struct btrfsic_dev_state *dev_state;
2737
2738        if (!btrfsic_is_initialized)
2739                return submit_bh(op, op_flags, bh);
2740
2741        mutex_lock(&btrfsic_mutex);
2742        /* since btrfsic_submit_bh() might also be called before
2743         * btrfsic_mount(), this might return NULL */
2744        dev_state = btrfsic_dev_state_lookup(bh->b_bdev->bd_dev);
2745
2746        /* Only called to write the superblock (incl. FLUSH/FUA) */
2747        if (NULL != dev_state &&
2748            (op == REQ_OP_WRITE) && bh->b_size > 0) {
2749                u64 dev_bytenr;
2750
2751                dev_bytenr = BTRFS_BDEV_BLOCKSIZE * bh->b_blocknr;
2752                if (dev_state->state->print_mask &
2753                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2754                        pr_info("submit_bh(op=0x%x,0x%x, blocknr=%llu (bytenr %llu), size=%zu, data=%p, bdev=%p)\n",
2755                               op, op_flags, (unsigned long long)bh->b_blocknr,
2756                               dev_bytenr, bh->b_size, bh->b_data, bh->b_bdev);
2757                btrfsic_process_written_block(dev_state, dev_bytenr,
2758                                              &bh->b_data, 1, NULL,
2759                                              NULL, bh, op_flags);
2760        } else if (NULL != dev_state && (op_flags & REQ_PREFLUSH)) {
2761                if (dev_state->state->print_mask &
2762                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2763                        pr_info("submit_bh(op=0x%x,0x%x FLUSH, bdev=%p)\n",
2764                               op, op_flags, bh->b_bdev);
2765                if (!dev_state->dummy_block_for_bio_bh_flush.is_iodone) {
2766                        if ((dev_state->state->print_mask &
2767                             (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH |
2768                              BTRFSIC_PRINT_MASK_VERBOSE)))
2769                                pr_info("btrfsic_submit_bh(%s) with FLUSH but dummy block already in use (ignored)!\n",
2770                                       dev_state->name);
2771                } else {
2772                        struct btrfsic_block *const block =
2773                                &dev_state->dummy_block_for_bio_bh_flush;
2774
2775                        block->is_iodone = 0;
2776                        block->never_written = 0;
2777                        block->iodone_w_error = 0;
2778                        block->flush_gen = dev_state->last_flush_gen + 1;
2779                        block->submit_bio_bh_rw = op_flags;
2780                        block->orig_bio_bh_private = bh->b_private;
2781                        block->orig_bio_bh_end_io.bh = bh->b_end_io;
2782                        block->next_in_same_bio = NULL;
2783                        bh->b_private = block;
2784                        bh->b_end_io = btrfsic_bh_end_io;
2785                }
2786        }
2787        mutex_unlock(&btrfsic_mutex);
2788        return submit_bh(op, op_flags, bh);
2789}
2790
2791static void __btrfsic_submit_bio(struct bio *bio)
2792{
2793        struct btrfsic_dev_state *dev_state;
2794
2795        if (!btrfsic_is_initialized)
2796                return;
2797
2798        mutex_lock(&btrfsic_mutex);
2799        /* since btrfsic_submit_bio() is also called before
2800         * btrfsic_mount(), this might return NULL */
2801        dev_state = btrfsic_dev_state_lookup(bio_dev(bio) + bio->bi_partno);
2802        if (NULL != dev_state &&
2803            (bio_op(bio) == REQ_OP_WRITE) && bio_has_data(bio)) {
2804                unsigned int i = 0;
2805                u64 dev_bytenr;
2806                u64 cur_bytenr;
2807                struct bio_vec bvec;
2808                struct bvec_iter iter;
2809                int bio_is_patched;
2810                char **mapped_datav;
2811                unsigned int segs = bio_segments(bio);
2812
2813                dev_bytenr = 512 * bio->bi_iter.bi_sector;
2814                bio_is_patched = 0;
2815                if (dev_state->state->print_mask &
2816                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2817                        pr_info("submit_bio(rw=%d,0x%x, bi_vcnt=%u, bi_sector=%llu (bytenr %llu), bi_disk=%p)\n",
2818                               bio_op(bio), bio->bi_opf, segs,
2819                               (unsigned long long)bio->bi_iter.bi_sector,
2820                               dev_bytenr, bio->bi_disk);
2821
2822                mapped_datav = kmalloc_array(segs,
2823                                             sizeof(*mapped_datav), GFP_NOFS);
2824                if (!mapped_datav)
2825                        goto leave;
2826                cur_bytenr = dev_bytenr;
2827
2828                bio_for_each_segment(bvec, bio, iter) {
2829                        BUG_ON(bvec.bv_len != PAGE_SIZE);
2830                        mapped_datav[i] = kmap(bvec.bv_page);
2831                        i++;
2832
2833                        if (dev_state->state->print_mask &
2834                            BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH_VERBOSE)
2835                                pr_info("#%u: bytenr=%llu, len=%u, offset=%u\n",
2836                                       i, cur_bytenr, bvec.bv_len, bvec.bv_offset);
2837                        cur_bytenr += bvec.bv_len;
2838                }
2839                btrfsic_process_written_block(dev_state, dev_bytenr,
2840                                              mapped_datav, segs,
2841                                              bio, &bio_is_patched,
2842                                              NULL, bio->bi_opf);
2843                bio_for_each_segment(bvec, bio, iter)
2844                        kunmap(bvec.bv_page);
2845                kfree(mapped_datav);
2846        } else if (NULL != dev_state && (bio->bi_opf & REQ_PREFLUSH)) {
2847                if (dev_state->state->print_mask &
2848                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2849                        pr_info("submit_bio(rw=%d,0x%x FLUSH, disk=%p)\n",
2850                               bio_op(bio), bio->bi_opf, bio->bi_disk);
2851                if (!dev_state->dummy_block_for_bio_bh_flush.is_iodone) {
2852                        if ((dev_state->state->print_mask &
2853                             (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH |
2854                              BTRFSIC_PRINT_MASK_VERBOSE)))
2855                                pr_info("btrfsic_submit_bio(%s) with FLUSH but dummy block already in use (ignored)!\n",
2856                                       dev_state->name);
2857                } else {
2858                        struct btrfsic_block *const block =
2859                                &dev_state->dummy_block_for_bio_bh_flush;
2860
2861                        block->is_iodone = 0;
2862                        block->never_written = 0;
2863                        block->iodone_w_error = 0;
2864                        block->flush_gen = dev_state->last_flush_gen + 1;
2865                        block->submit_bio_bh_rw = bio->bi_opf;
2866                        block->orig_bio_bh_private = bio->bi_private;
2867                        block->orig_bio_bh_end_io.bio = bio->bi_end_io;
2868                        block->next_in_same_bio = NULL;
2869                        bio->bi_private = block;
2870                        bio->bi_end_io = btrfsic_bio_end_io;
2871                }
2872        }
2873leave:
2874        mutex_unlock(&btrfsic_mutex);
2875}
2876
2877void btrfsic_submit_bio(struct bio *bio)
2878{
2879        __btrfsic_submit_bio(bio);
2880        submit_bio(bio);
2881}
2882
2883int btrfsic_submit_bio_wait(struct bio *bio)
2884{
2885        __btrfsic_submit_bio(bio);
2886        return submit_bio_wait(bio);
2887}
2888
2889int btrfsic_mount(struct btrfs_fs_info *fs_info,
2890                  struct btrfs_fs_devices *fs_devices,
2891                  int including_extent_data, u32 print_mask)
2892{
2893        int ret;
2894        struct btrfsic_state *state;
2895        struct list_head *dev_head = &fs_devices->devices;
2896        struct btrfs_device *device;
2897
2898        if (!PAGE_ALIGNED(fs_info->nodesize)) {
2899                pr_info("btrfsic: cannot handle nodesize %d not being a multiple of PAGE_SIZE %ld!\n",
2900                       fs_info->nodesize, PAGE_SIZE);
2901                return -1;
2902        }
2903        if (!PAGE_ALIGNED(fs_info->sectorsize)) {
2904                pr_info("btrfsic: cannot handle sectorsize %d not being a multiple of PAGE_SIZE %ld!\n",
2905                       fs_info->sectorsize, PAGE_SIZE);
2906                return -1;
2907        }
2908        state = kvzalloc(sizeof(*state), GFP_KERNEL);
2909        if (!state) {
2910                pr_info("btrfs check-integrity: allocation failed!\n");
2911                return -ENOMEM;
2912        }
2913
2914        if (!btrfsic_is_initialized) {
2915                mutex_init(&btrfsic_mutex);
2916                btrfsic_dev_state_hashtable_init(&btrfsic_dev_state_hashtable);
2917                btrfsic_is_initialized = 1;
2918        }
2919        mutex_lock(&btrfsic_mutex);
2920        state->fs_info = fs_info;
2921        state->print_mask = print_mask;
2922        state->include_extent_data = including_extent_data;
2923        state->csum_size = 0;
2924        state->metablock_size = fs_info->nodesize;
2925        state->datablock_size = fs_info->sectorsize;
2926        INIT_LIST_HEAD(&state->all_blocks_list);
2927        btrfsic_block_hashtable_init(&state->block_hashtable);
2928        btrfsic_block_link_hashtable_init(&state->block_link_hashtable);
2929        state->max_superblock_generation = 0;
2930        state->latest_superblock = NULL;
2931
2932        list_for_each_entry(device, dev_head, dev_list) {
2933                struct btrfsic_dev_state *ds;
2934                const char *p;
2935
2936                if (!device->bdev || !device->name)
2937                        continue;
2938
2939                ds = btrfsic_dev_state_alloc();
2940                if (NULL == ds) {
2941                        pr_info("btrfs check-integrity: kmalloc() failed!\n");
2942                        mutex_unlock(&btrfsic_mutex);
2943                        return -ENOMEM;
2944                }
2945                ds->bdev = device->bdev;
2946                ds->state = state;
2947                bdevname(ds->bdev, ds->name);
2948                ds->name[BDEVNAME_SIZE - 1] = '\0';
2949                p = kbasename(ds->name);
2950                strlcpy(ds->name, p, sizeof(ds->name));
2951                btrfsic_dev_state_hashtable_add(ds,
2952                                                &btrfsic_dev_state_hashtable);
2953        }
2954
2955        ret = btrfsic_process_superblock(state, fs_devices);
2956        if (0 != ret) {
2957                mutex_unlock(&btrfsic_mutex);
2958                btrfsic_unmount(fs_devices);
2959                return ret;
2960        }
2961
2962        if (state->print_mask & BTRFSIC_PRINT_MASK_INITIAL_DATABASE)
2963                btrfsic_dump_database(state);
2964        if (state->print_mask & BTRFSIC_PRINT_MASK_INITIAL_TREE)
2965                btrfsic_dump_tree(state);
2966
2967        mutex_unlock(&btrfsic_mutex);
2968        return 0;
2969}
2970
2971void btrfsic_unmount(struct btrfs_fs_devices *fs_devices)
2972{
2973        struct btrfsic_block *b_all, *tmp_all;
2974        struct btrfsic_state *state;
2975        struct list_head *dev_head = &fs_devices->devices;
2976        struct btrfs_device *device;
2977
2978        if (!btrfsic_is_initialized)
2979                return;
2980
2981        mutex_lock(&btrfsic_mutex);
2982
2983        state = NULL;
2984        list_for_each_entry(device, dev_head, dev_list) {
2985                struct btrfsic_dev_state *ds;
2986
2987                if (!device->bdev || !device->name)
2988                        continue;
2989
2990                ds = btrfsic_dev_state_hashtable_lookup(
2991                                device->bdev->bd_dev,
2992                                &btrfsic_dev_state_hashtable);
2993                if (NULL != ds) {
2994                        state = ds->state;
2995                        btrfsic_dev_state_hashtable_remove(ds);
2996                        btrfsic_dev_state_free(ds);
2997                }
2998        }
2999
3000        if (NULL == state) {
3001                pr_info("btrfsic: error, cannot find state information on umount!\n");
3002                mutex_unlock(&btrfsic_mutex);
3003                return;
3004        }
3005
3006        /*
3007         * Don't care about keeping the lists' state up to date,
3008         * just free all memory that was allocated dynamically.
3009         * Free the blocks and the block_links.
3010         */
3011        list_for_each_entry_safe(b_all, tmp_all, &state->all_blocks_list,
3012                                 all_blocks_node) {
3013                struct btrfsic_block_link *l, *tmp;
3014
3015                list_for_each_entry_safe(l, tmp, &b_all->ref_to_list,
3016                                         node_ref_to) {
3017                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
3018                                btrfsic_print_rem_link(state, l);
3019
3020                        l->ref_cnt--;
3021                        if (0 == l->ref_cnt)
3022                                btrfsic_block_link_free(l);
3023                }
3024
3025                if (b_all->is_iodone || b_all->never_written)
3026                        btrfsic_block_free(b_all);
3027                else
3028                        pr_info("btrfs: attempt to free %c-block @%llu (%s/%llu/%d) on umount which is not yet iodone!\n",
3029                               btrfsic_get_block_type(state, b_all),
3030                               b_all->logical_bytenr, b_all->dev_state->name,
3031                               b_all->dev_bytenr, b_all->mirror_num);
3032        }
3033
3034        mutex_unlock(&btrfsic_mutex);
3035
3036        kvfree(state);
3037}
3038