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 <linux/crc32c.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 offset_in_page;
1206        char *kaddr;
1207        char *dst = (char *)dstv;
1208        size_t start_offset = block_ctx->start & ((u64)PAGE_SIZE - 1);
1209        unsigned long i = (start_offset + offset) >> PAGE_SHIFT;
1210
1211        WARN_ON(offset + len > block_ctx->len);
1212        offset_in_page = (start_offset + offset) & (PAGE_SIZE - 1);
1213
1214        while (len > 0) {
1215                cur = min(len, ((size_t)PAGE_SIZE - offset_in_page));
1216                BUG_ON(i >= DIV_ROUND_UP(block_ctx->len, PAGE_SIZE));
1217                kaddr = block_ctx->datav[i];
1218                memcpy(dst, kaddr + offset_in_page, cur);
1219
1220                dst += cur;
1221                len -= cur;
1222                offset_in_page = 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        block_ctx_out->dev = btrfsic_dev_state_lookup(device->bdev->bd_dev);
1543        block_ctx_out->dev_bytenr = multi->stripes[0].physical;
1544        block_ctx_out->start = bytenr;
1545        block_ctx_out->len = len;
1546        block_ctx_out->datav = NULL;
1547        block_ctx_out->pagev = NULL;
1548        block_ctx_out->mem_to_free = NULL;
1549
1550        kfree(multi);
1551        if (NULL == block_ctx_out->dev) {
1552                ret = -ENXIO;
1553                pr_info("btrfsic: error, cannot lookup dev (#1)!\n");
1554        }
1555
1556        return ret;
1557}
1558
1559static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx)
1560{
1561        if (block_ctx->mem_to_free) {
1562                unsigned int num_pages;
1563
1564                BUG_ON(!block_ctx->datav);
1565                BUG_ON(!block_ctx->pagev);
1566                num_pages = (block_ctx->len + (u64)PAGE_SIZE - 1) >>
1567                            PAGE_SHIFT;
1568                while (num_pages > 0) {
1569                        num_pages--;
1570                        if (block_ctx->datav[num_pages]) {
1571                                kunmap(block_ctx->pagev[num_pages]);
1572                                block_ctx->datav[num_pages] = NULL;
1573                        }
1574                        if (block_ctx->pagev[num_pages]) {
1575                                __free_page(block_ctx->pagev[num_pages]);
1576                                block_ctx->pagev[num_pages] = NULL;
1577                        }
1578                }
1579
1580                kfree(block_ctx->mem_to_free);
1581                block_ctx->mem_to_free = NULL;
1582                block_ctx->pagev = NULL;
1583                block_ctx->datav = NULL;
1584        }
1585}
1586
1587static int btrfsic_read_block(struct btrfsic_state *state,
1588                              struct btrfsic_block_data_ctx *block_ctx)
1589{
1590        unsigned int num_pages;
1591        unsigned int i;
1592        u64 dev_bytenr;
1593        int ret;
1594
1595        BUG_ON(block_ctx->datav);
1596        BUG_ON(block_ctx->pagev);
1597        BUG_ON(block_ctx->mem_to_free);
1598        if (block_ctx->dev_bytenr & ((u64)PAGE_SIZE - 1)) {
1599                pr_info("btrfsic: read_block() with unaligned bytenr %llu\n",
1600                       block_ctx->dev_bytenr);
1601                return -1;
1602        }
1603
1604        num_pages = (block_ctx->len + (u64)PAGE_SIZE - 1) >>
1605                    PAGE_SHIFT;
1606        block_ctx->mem_to_free = kcalloc(sizeof(*block_ctx->datav) +
1607                                                sizeof(*block_ctx->pagev),
1608                                         num_pages, GFP_NOFS);
1609        if (!block_ctx->mem_to_free)
1610                return -ENOMEM;
1611        block_ctx->datav = block_ctx->mem_to_free;
1612        block_ctx->pagev = (struct page **)(block_ctx->datav + num_pages);
1613        for (i = 0; i < num_pages; i++) {
1614                block_ctx->pagev[i] = alloc_page(GFP_NOFS);
1615                if (!block_ctx->pagev[i])
1616                        return -1;
1617        }
1618
1619        dev_bytenr = block_ctx->dev_bytenr;
1620        for (i = 0; i < num_pages;) {
1621                struct bio *bio;
1622                unsigned int j;
1623
1624                bio = btrfs_io_bio_alloc(num_pages - i);
1625                bio_set_dev(bio, block_ctx->dev->bdev);
1626                bio->bi_iter.bi_sector = dev_bytenr >> 9;
1627                bio_set_op_attrs(bio, REQ_OP_READ, 0);
1628
1629                for (j = i; j < num_pages; j++) {
1630                        ret = bio_add_page(bio, block_ctx->pagev[j],
1631                                           PAGE_SIZE, 0);
1632                        if (PAGE_SIZE != ret)
1633                                break;
1634                }
1635                if (j == i) {
1636                        pr_info("btrfsic: error, failed to add a single page!\n");
1637                        return -1;
1638                }
1639                if (submit_bio_wait(bio)) {
1640                        pr_info("btrfsic: read error at logical %llu dev %s!\n",
1641                               block_ctx->start, block_ctx->dev->name);
1642                        bio_put(bio);
1643                        return -1;
1644                }
1645                bio_put(bio);
1646                dev_bytenr += (j - i) * PAGE_SIZE;
1647                i = j;
1648        }
1649        for (i = 0; i < num_pages; i++)
1650                block_ctx->datav[i] = kmap(block_ctx->pagev[i]);
1651
1652        return block_ctx->len;
1653}
1654
1655static void btrfsic_dump_database(struct btrfsic_state *state)
1656{
1657        const struct btrfsic_block *b_all;
1658
1659        BUG_ON(NULL == state);
1660
1661        pr_info("all_blocks_list:\n");
1662        list_for_each_entry(b_all, &state->all_blocks_list, all_blocks_node) {
1663                const struct btrfsic_block_link *l;
1664
1665                pr_info("%c-block @%llu (%s/%llu/%d)\n",
1666                       btrfsic_get_block_type(state, b_all),
1667                       b_all->logical_bytenr, b_all->dev_state->name,
1668                       b_all->dev_bytenr, b_all->mirror_num);
1669
1670                list_for_each_entry(l, &b_all->ref_to_list, node_ref_to) {
1671                        pr_info(" %c @%llu (%s/%llu/%d) refers %u* to %c @%llu (%s/%llu/%d)\n",
1672                               btrfsic_get_block_type(state, b_all),
1673                               b_all->logical_bytenr, b_all->dev_state->name,
1674                               b_all->dev_bytenr, b_all->mirror_num,
1675                               l->ref_cnt,
1676                               btrfsic_get_block_type(state, l->block_ref_to),
1677                               l->block_ref_to->logical_bytenr,
1678                               l->block_ref_to->dev_state->name,
1679                               l->block_ref_to->dev_bytenr,
1680                               l->block_ref_to->mirror_num);
1681                }
1682
1683                list_for_each_entry(l, &b_all->ref_from_list, node_ref_from) {
1684                        pr_info(" %c @%llu (%s/%llu/%d) is ref %u* from %c @%llu (%s/%llu/%d)\n",
1685                               btrfsic_get_block_type(state, b_all),
1686                               b_all->logical_bytenr, b_all->dev_state->name,
1687                               b_all->dev_bytenr, b_all->mirror_num,
1688                               l->ref_cnt,
1689                               btrfsic_get_block_type(state, l->block_ref_from),
1690                               l->block_ref_from->logical_bytenr,
1691                               l->block_ref_from->dev_state->name,
1692                               l->block_ref_from->dev_bytenr,
1693                               l->block_ref_from->mirror_num);
1694                }
1695
1696                pr_info("\n");
1697        }
1698}
1699
1700/*
1701 * Test whether the disk block contains a tree block (leaf or node)
1702 * (note that this test fails for the super block)
1703 */
1704static int btrfsic_test_for_metadata(struct btrfsic_state *state,
1705                                     char **datav, unsigned int num_pages)
1706{
1707        struct btrfs_fs_info *fs_info = state->fs_info;
1708        struct btrfs_header *h;
1709        u8 csum[BTRFS_CSUM_SIZE];
1710        u32 crc = ~(u32)0;
1711        unsigned int i;
1712
1713        if (num_pages * PAGE_SIZE < state->metablock_size)
1714                return 1; /* not metadata */
1715        num_pages = state->metablock_size >> PAGE_SHIFT;
1716        h = (struct btrfs_header *)datav[0];
1717
1718        if (memcmp(h->fsid, fs_info->fsid, BTRFS_FSID_SIZE))
1719                return 1;
1720
1721        for (i = 0; i < num_pages; i++) {
1722                u8 *data = i ? datav[i] : (datav[i] + BTRFS_CSUM_SIZE);
1723                size_t sublen = i ? PAGE_SIZE :
1724                                    (PAGE_SIZE - BTRFS_CSUM_SIZE);
1725
1726                crc = crc32c(crc, data, sublen);
1727        }
1728        btrfs_csum_final(crc, csum);
1729        if (memcmp(csum, h->csum, state->csum_size))
1730                return 1;
1731
1732        return 0; /* is metadata */
1733}
1734
1735static void btrfsic_process_written_block(struct btrfsic_dev_state *dev_state,
1736                                          u64 dev_bytenr, char **mapped_datav,
1737                                          unsigned int num_pages,
1738                                          struct bio *bio, int *bio_is_patched,
1739                                          struct buffer_head *bh,
1740                                          int submit_bio_bh_rw)
1741{
1742        int is_metadata;
1743        struct btrfsic_block *block;
1744        struct btrfsic_block_data_ctx block_ctx;
1745        int ret;
1746        struct btrfsic_state *state = dev_state->state;
1747        struct block_device *bdev = dev_state->bdev;
1748        unsigned int processed_len;
1749
1750        if (NULL != bio_is_patched)
1751                *bio_is_patched = 0;
1752
1753again:
1754        if (num_pages == 0)
1755                return;
1756
1757        processed_len = 0;
1758        is_metadata = (0 == btrfsic_test_for_metadata(state, mapped_datav,
1759                                                      num_pages));
1760
1761        block = btrfsic_block_hashtable_lookup(bdev, dev_bytenr,
1762                                               &state->block_hashtable);
1763        if (NULL != block) {
1764                u64 bytenr = 0;
1765                struct btrfsic_block_link *l, *tmp;
1766
1767                if (block->is_superblock) {
1768                        bytenr = btrfs_super_bytenr((struct btrfs_super_block *)
1769                                                    mapped_datav[0]);
1770                        if (num_pages * PAGE_SIZE <
1771                            BTRFS_SUPER_INFO_SIZE) {
1772                                pr_info("btrfsic: cannot work with too short bios!\n");
1773                                return;
1774                        }
1775                        is_metadata = 1;
1776                        BUG_ON(BTRFS_SUPER_INFO_SIZE & (PAGE_SIZE - 1));
1777                        processed_len = BTRFS_SUPER_INFO_SIZE;
1778                        if (state->print_mask &
1779                            BTRFSIC_PRINT_MASK_TREE_BEFORE_SB_WRITE) {
1780                                pr_info("[before new superblock is written]:\n");
1781                                btrfsic_dump_tree_sub(state, block, 0);
1782                        }
1783                }
1784                if (is_metadata) {
1785                        if (!block->is_superblock) {
1786                                if (num_pages * PAGE_SIZE <
1787                                    state->metablock_size) {
1788                                        pr_info("btrfsic: cannot work with too short bios!\n");
1789                                        return;
1790                                }
1791                                processed_len = state->metablock_size;
1792                                bytenr = btrfs_stack_header_bytenr(
1793                                                (struct btrfs_header *)
1794                                                mapped_datav[0]);
1795                                btrfsic_cmp_log_and_dev_bytenr(state, bytenr,
1796                                                               dev_state,
1797                                                               dev_bytenr);
1798                        }
1799                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
1800                                if (block->logical_bytenr != bytenr &&
1801                                    !(!block->is_metadata &&
1802                                      block->logical_bytenr == 0))
1803                                        pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c, bytenr mismatch (!= stored %llu).\n",
1804                                               bytenr, dev_state->name,
1805                                               dev_bytenr,
1806                                               block->mirror_num,
1807                                               btrfsic_get_block_type(state,
1808                                                                      block),
1809                                               block->logical_bytenr);
1810                                else
1811                                        pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c.\n",
1812                                               bytenr, dev_state->name,
1813                                               dev_bytenr, block->mirror_num,
1814                                               btrfsic_get_block_type(state,
1815                                                                      block));
1816                        }
1817                        block->logical_bytenr = bytenr;
1818                } else {
1819                        if (num_pages * PAGE_SIZE <
1820                            state->datablock_size) {
1821                                pr_info("btrfsic: cannot work with too short bios!\n");
1822                                return;
1823                        }
1824                        processed_len = state->datablock_size;
1825                        bytenr = block->logical_bytenr;
1826                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1827                                pr_info("Written block @%llu (%s/%llu/%d) found in hash table, %c.\n",
1828                                       bytenr, dev_state->name, dev_bytenr,
1829                                       block->mirror_num,
1830                                       btrfsic_get_block_type(state, block));
1831                }
1832
1833                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1834                        pr_info("ref_to_list: %cE, ref_from_list: %cE\n",
1835                               list_empty(&block->ref_to_list) ? ' ' : '!',
1836                               list_empty(&block->ref_from_list) ? ' ' : '!');
1837                if (btrfsic_is_block_ref_by_superblock(state, block, 0)) {
1838                        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",
1839                               btrfsic_get_block_type(state, block), bytenr,
1840                               dev_state->name, dev_bytenr, block->mirror_num,
1841                               block->generation,
1842                               btrfs_disk_key_objectid(&block->disk_key),
1843                               block->disk_key.type,
1844                               btrfs_disk_key_offset(&block->disk_key),
1845                               btrfs_stack_header_generation(
1846                                       (struct btrfs_header *) mapped_datav[0]),
1847                               state->max_superblock_generation);
1848                        btrfsic_dump_tree(state);
1849                }
1850
1851                if (!block->is_iodone && !block->never_written) {
1852                        pr_info("btrfs: attempt to overwrite %c-block @%llu (%s/%llu/%d), oldgen=%llu, newgen=%llu, which is not yet iodone!\n",
1853                               btrfsic_get_block_type(state, block), bytenr,
1854                               dev_state->name, dev_bytenr, block->mirror_num,
1855                               block->generation,
1856                               btrfs_stack_header_generation(
1857                                       (struct btrfs_header *)
1858                                       mapped_datav[0]));
1859                        /* it would not be safe to go on */
1860                        btrfsic_dump_tree(state);
1861                        goto continue_loop;
1862                }
1863
1864                /*
1865                 * Clear all references of this block. Do not free
1866                 * the block itself even if is not referenced anymore
1867                 * because it still carries valuable information
1868                 * like whether it was ever written and IO completed.
1869                 */
1870                list_for_each_entry_safe(l, tmp, &block->ref_to_list,
1871                                         node_ref_to) {
1872                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1873                                btrfsic_print_rem_link(state, l);
1874                        l->ref_cnt--;
1875                        if (0 == l->ref_cnt) {
1876                                list_del(&l->node_ref_to);
1877                                list_del(&l->node_ref_from);
1878                                btrfsic_block_link_hashtable_remove(l);
1879                                btrfsic_block_link_free(l);
1880                        }
1881                }
1882
1883                block_ctx.dev = dev_state;
1884                block_ctx.dev_bytenr = dev_bytenr;
1885                block_ctx.start = bytenr;
1886                block_ctx.len = processed_len;
1887                block_ctx.pagev = NULL;
1888                block_ctx.mem_to_free = NULL;
1889                block_ctx.datav = mapped_datav;
1890
1891                if (is_metadata || state->include_extent_data) {
1892                        block->never_written = 0;
1893                        block->iodone_w_error = 0;
1894                        if (NULL != bio) {
1895                                block->is_iodone = 0;
1896                                BUG_ON(NULL == bio_is_patched);
1897                                if (!*bio_is_patched) {
1898                                        block->orig_bio_bh_private =
1899                                            bio->bi_private;
1900                                        block->orig_bio_bh_end_io.bio =
1901                                            bio->bi_end_io;
1902                                        block->next_in_same_bio = NULL;
1903                                        bio->bi_private = block;
1904                                        bio->bi_end_io = btrfsic_bio_end_io;
1905                                        *bio_is_patched = 1;
1906                                } else {
1907                                        struct btrfsic_block *chained_block =
1908                                            (struct btrfsic_block *)
1909                                            bio->bi_private;
1910
1911                                        BUG_ON(NULL == chained_block);
1912                                        block->orig_bio_bh_private =
1913                                            chained_block->orig_bio_bh_private;
1914                                        block->orig_bio_bh_end_io.bio =
1915                                            chained_block->orig_bio_bh_end_io.
1916                                            bio;
1917                                        block->next_in_same_bio = chained_block;
1918                                        bio->bi_private = block;
1919                                }
1920                        } else if (NULL != bh) {
1921                                block->is_iodone = 0;
1922                                block->orig_bio_bh_private = bh->b_private;
1923                                block->orig_bio_bh_end_io.bh = bh->b_end_io;
1924                                block->next_in_same_bio = NULL;
1925                                bh->b_private = block;
1926                                bh->b_end_io = btrfsic_bh_end_io;
1927                        } else {
1928                                block->is_iodone = 1;
1929                                block->orig_bio_bh_private = NULL;
1930                                block->orig_bio_bh_end_io.bio = NULL;
1931                                block->next_in_same_bio = NULL;
1932                        }
1933                }
1934
1935                block->flush_gen = dev_state->last_flush_gen + 1;
1936                block->submit_bio_bh_rw = submit_bio_bh_rw;
1937                if (is_metadata) {
1938                        block->logical_bytenr = bytenr;
1939                        block->is_metadata = 1;
1940                        if (block->is_superblock) {
1941                                BUG_ON(PAGE_SIZE !=
1942                                       BTRFS_SUPER_INFO_SIZE);
1943                                ret = btrfsic_process_written_superblock(
1944                                                state,
1945                                                block,
1946                                                (struct btrfs_super_block *)
1947                                                mapped_datav[0]);
1948                                if (state->print_mask &
1949                                    BTRFSIC_PRINT_MASK_TREE_AFTER_SB_WRITE) {
1950                                        pr_info("[after new superblock is written]:\n");
1951                                        btrfsic_dump_tree_sub(state, block, 0);
1952                                }
1953                        } else {
1954                                block->mirror_num = 0;  /* unknown */
1955                                ret = btrfsic_process_metablock(
1956                                                state,
1957                                                block,
1958                                                &block_ctx,
1959                                                0, 0);
1960                        }
1961                        if (ret)
1962                                pr_info("btrfsic: btrfsic_process_metablock(root @%llu) failed!\n",
1963                                       dev_bytenr);
1964                } else {
1965                        block->is_metadata = 0;
1966                        block->mirror_num = 0;  /* unknown */
1967                        block->generation = BTRFSIC_GENERATION_UNKNOWN;
1968                        if (!state->include_extent_data
1969                            && list_empty(&block->ref_from_list)) {
1970                                /*
1971                                 * disk block is overwritten with extent
1972                                 * data (not meta data) and we are configured
1973                                 * to not include extent data: take the
1974                                 * chance and free the block's memory
1975                                 */
1976                                btrfsic_block_hashtable_remove(block);
1977                                list_del(&block->all_blocks_node);
1978                                btrfsic_block_free(block);
1979                        }
1980                }
1981                btrfsic_release_block_ctx(&block_ctx);
1982        } else {
1983                /* block has not been found in hash table */
1984                u64 bytenr;
1985
1986                if (!is_metadata) {
1987                        processed_len = state->datablock_size;
1988                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
1989                                pr_info("Written block (%s/%llu/?) !found in hash table, D.\n",
1990                                       dev_state->name, dev_bytenr);
1991                        if (!state->include_extent_data) {
1992                                /* ignore that written D block */
1993                                goto continue_loop;
1994                        }
1995
1996                        /* this is getting ugly for the
1997                         * include_extent_data case... */
1998                        bytenr = 0;     /* unknown */
1999                } else {
2000                        processed_len = state->metablock_size;
2001                        bytenr = btrfs_stack_header_bytenr(
2002                                        (struct btrfs_header *)
2003                                        mapped_datav[0]);
2004                        btrfsic_cmp_log_and_dev_bytenr(state, bytenr, dev_state,
2005                                                       dev_bytenr);
2006                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2007                                pr_info("Written block @%llu (%s/%llu/?) !found in hash table, M.\n",
2008                                       bytenr, dev_state->name, dev_bytenr);
2009                }
2010
2011                block_ctx.dev = dev_state;
2012                block_ctx.dev_bytenr = dev_bytenr;
2013                block_ctx.start = bytenr;
2014                block_ctx.len = processed_len;
2015                block_ctx.pagev = NULL;
2016                block_ctx.mem_to_free = NULL;
2017                block_ctx.datav = mapped_datav;
2018
2019                block = btrfsic_block_alloc();
2020                if (NULL == block) {
2021                        pr_info("btrfsic: error, kmalloc failed!\n");
2022                        btrfsic_release_block_ctx(&block_ctx);
2023                        goto continue_loop;
2024                }
2025                block->dev_state = dev_state;
2026                block->dev_bytenr = dev_bytenr;
2027                block->logical_bytenr = bytenr;
2028                block->is_metadata = is_metadata;
2029                block->never_written = 0;
2030                block->iodone_w_error = 0;
2031                block->mirror_num = 0;  /* unknown */
2032                block->flush_gen = dev_state->last_flush_gen + 1;
2033                block->submit_bio_bh_rw = submit_bio_bh_rw;
2034                if (NULL != bio) {
2035                        block->is_iodone = 0;
2036                        BUG_ON(NULL == bio_is_patched);
2037                        if (!*bio_is_patched) {
2038                                block->orig_bio_bh_private = bio->bi_private;
2039                                block->orig_bio_bh_end_io.bio = bio->bi_end_io;
2040                                block->next_in_same_bio = NULL;
2041                                bio->bi_private = block;
2042                                bio->bi_end_io = btrfsic_bio_end_io;
2043                                *bio_is_patched = 1;
2044                        } else {
2045                                struct btrfsic_block *chained_block =
2046                                    (struct btrfsic_block *)
2047                                    bio->bi_private;
2048
2049                                BUG_ON(NULL == chained_block);
2050                                block->orig_bio_bh_private =
2051                                    chained_block->orig_bio_bh_private;
2052                                block->orig_bio_bh_end_io.bio =
2053                                    chained_block->orig_bio_bh_end_io.bio;
2054                                block->next_in_same_bio = chained_block;
2055                                bio->bi_private = block;
2056                        }
2057                } else if (NULL != bh) {
2058                        block->is_iodone = 0;
2059                        block->orig_bio_bh_private = bh->b_private;
2060                        block->orig_bio_bh_end_io.bh = bh->b_end_io;
2061                        block->next_in_same_bio = NULL;
2062                        bh->b_private = block;
2063                        bh->b_end_io = btrfsic_bh_end_io;
2064                } else {
2065                        block->is_iodone = 1;
2066                        block->orig_bio_bh_private = NULL;
2067                        block->orig_bio_bh_end_io.bio = NULL;
2068                        block->next_in_same_bio = NULL;
2069                }
2070                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2071                        pr_info("New written %c-block @%llu (%s/%llu/%d)\n",
2072                               is_metadata ? 'M' : 'D',
2073                               block->logical_bytenr, block->dev_state->name,
2074                               block->dev_bytenr, block->mirror_num);
2075                list_add(&block->all_blocks_node, &state->all_blocks_list);
2076                btrfsic_block_hashtable_add(block, &state->block_hashtable);
2077
2078                if (is_metadata) {
2079                        ret = btrfsic_process_metablock(state, block,
2080                                                        &block_ctx, 0, 0);
2081                        if (ret)
2082                                pr_info("btrfsic: process_metablock(root @%llu) failed!\n",
2083                                       dev_bytenr);
2084                }
2085                btrfsic_release_block_ctx(&block_ctx);
2086        }
2087
2088continue_loop:
2089        BUG_ON(!processed_len);
2090        dev_bytenr += processed_len;
2091        mapped_datav += processed_len >> PAGE_SHIFT;
2092        num_pages -= processed_len >> PAGE_SHIFT;
2093        goto again;
2094}
2095
2096static void btrfsic_bio_end_io(struct bio *bp)
2097{
2098        struct btrfsic_block *block = (struct btrfsic_block *)bp->bi_private;
2099        int iodone_w_error;
2100
2101        /* mutex is not held! This is not save if IO is not yet completed
2102         * on umount */
2103        iodone_w_error = 0;
2104        if (bp->bi_status)
2105                iodone_w_error = 1;
2106
2107        BUG_ON(NULL == block);
2108        bp->bi_private = block->orig_bio_bh_private;
2109        bp->bi_end_io = block->orig_bio_bh_end_io.bio;
2110
2111        do {
2112                struct btrfsic_block *next_block;
2113                struct btrfsic_dev_state *const dev_state = block->dev_state;
2114
2115                if ((dev_state->state->print_mask &
2116                     BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2117                        pr_info("bio_end_io(err=%d) for %c @%llu (%s/%llu/%d)\n",
2118                               bp->bi_status,
2119                               btrfsic_get_block_type(dev_state->state, block),
2120                               block->logical_bytenr, dev_state->name,
2121                               block->dev_bytenr, block->mirror_num);
2122                next_block = block->next_in_same_bio;
2123                block->iodone_w_error = iodone_w_error;
2124                if (block->submit_bio_bh_rw & REQ_PREFLUSH) {
2125                        dev_state->last_flush_gen++;
2126                        if ((dev_state->state->print_mask &
2127                             BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2128                                pr_info("bio_end_io() new %s flush_gen=%llu\n",
2129                                       dev_state->name,
2130                                       dev_state->last_flush_gen);
2131                }
2132                if (block->submit_bio_bh_rw & REQ_FUA)
2133                        block->flush_gen = 0; /* FUA completed means block is
2134                                               * on disk */
2135                block->is_iodone = 1; /* for FLUSH, this releases the block */
2136                block = next_block;
2137        } while (NULL != block);
2138
2139        bp->bi_end_io(bp);
2140}
2141
2142static void btrfsic_bh_end_io(struct buffer_head *bh, int uptodate)
2143{
2144        struct btrfsic_block *block = (struct btrfsic_block *)bh->b_private;
2145        int iodone_w_error = !uptodate;
2146        struct btrfsic_dev_state *dev_state;
2147
2148        BUG_ON(NULL == block);
2149        dev_state = block->dev_state;
2150        if ((dev_state->state->print_mask & BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2151                pr_info("bh_end_io(error=%d) for %c @%llu (%s/%llu/%d)\n",
2152                       iodone_w_error,
2153                       btrfsic_get_block_type(dev_state->state, block),
2154                       block->logical_bytenr, block->dev_state->name,
2155                       block->dev_bytenr, block->mirror_num);
2156
2157        block->iodone_w_error = iodone_w_error;
2158        if (block->submit_bio_bh_rw & REQ_PREFLUSH) {
2159                dev_state->last_flush_gen++;
2160                if ((dev_state->state->print_mask &
2161                     BTRFSIC_PRINT_MASK_END_IO_BIO_BH))
2162                        pr_info("bh_end_io() new %s flush_gen=%llu\n",
2163                               dev_state->name, dev_state->last_flush_gen);
2164        }
2165        if (block->submit_bio_bh_rw & REQ_FUA)
2166                block->flush_gen = 0; /* FUA completed means block is on disk */
2167
2168        bh->b_private = block->orig_bio_bh_private;
2169        bh->b_end_io = block->orig_bio_bh_end_io.bh;
2170        block->is_iodone = 1; /* for FLUSH, this releases the block */
2171        bh->b_end_io(bh, uptodate);
2172}
2173
2174static int btrfsic_process_written_superblock(
2175                struct btrfsic_state *state,
2176                struct btrfsic_block *const superblock,
2177                struct btrfs_super_block *const super_hdr)
2178{
2179        struct btrfs_fs_info *fs_info = state->fs_info;
2180        int pass;
2181
2182        superblock->generation = btrfs_super_generation(super_hdr);
2183        if (!(superblock->generation > state->max_superblock_generation ||
2184              0 == state->max_superblock_generation)) {
2185                if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
2186                        pr_info("btrfsic: superblock @%llu (%s/%llu/%d) with old gen %llu <= %llu\n",
2187                               superblock->logical_bytenr,
2188                               superblock->dev_state->name,
2189                               superblock->dev_bytenr, superblock->mirror_num,
2190                               btrfs_super_generation(super_hdr),
2191                               state->max_superblock_generation);
2192        } else {
2193                if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
2194                        pr_info("btrfsic: got new superblock @%llu (%s/%llu/%d) with new 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
2201                state->max_superblock_generation =
2202                    btrfs_super_generation(super_hdr);
2203                state->latest_superblock = superblock;
2204        }
2205
2206        for (pass = 0; pass < 3; pass++) {
2207                int ret;
2208                u64 next_bytenr;
2209                struct btrfsic_block *next_block;
2210                struct btrfsic_block_data_ctx tmp_next_block_ctx;
2211                struct btrfsic_block_link *l;
2212                int num_copies;
2213                int mirror_num;
2214                const char *additional_string = NULL;
2215                struct btrfs_disk_key tmp_disk_key = {0};
2216
2217                btrfs_set_disk_key_objectid(&tmp_disk_key,
2218                                            BTRFS_ROOT_ITEM_KEY);
2219                btrfs_set_disk_key_objectid(&tmp_disk_key, 0);
2220
2221                switch (pass) {
2222                case 0:
2223                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2224                                                    BTRFS_ROOT_TREE_OBJECTID);
2225                        additional_string = "root ";
2226                        next_bytenr = btrfs_super_root(super_hdr);
2227                        if (state->print_mask &
2228                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2229                                pr_info("root@%llu\n", next_bytenr);
2230                        break;
2231                case 1:
2232                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2233                                                    BTRFS_CHUNK_TREE_OBJECTID);
2234                        additional_string = "chunk ";
2235                        next_bytenr = btrfs_super_chunk_root(super_hdr);
2236                        if (state->print_mask &
2237                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2238                                pr_info("chunk@%llu\n", next_bytenr);
2239                        break;
2240                case 2:
2241                        btrfs_set_disk_key_objectid(&tmp_disk_key,
2242                                                    BTRFS_TREE_LOG_OBJECTID);
2243                        additional_string = "log ";
2244                        next_bytenr = btrfs_super_log_root(super_hdr);
2245                        if (0 == next_bytenr)
2246                                continue;
2247                        if (state->print_mask &
2248                            BTRFSIC_PRINT_MASK_ROOT_CHUNK_LOG_TREE_LOCATION)
2249                                pr_info("log@%llu\n", next_bytenr);
2250                        break;
2251                }
2252
2253                num_copies = btrfs_num_copies(fs_info, next_bytenr,
2254                                              BTRFS_SUPER_INFO_SIZE);
2255                if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
2256                        pr_info("num_copies(log_bytenr=%llu) = %d\n",
2257                               next_bytenr, num_copies);
2258                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2259                        int was_created;
2260
2261                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2262                                pr_info("btrfsic_process_written_superblock(mirror_num=%d)\n", mirror_num);
2263                        ret = btrfsic_map_block(state, next_bytenr,
2264                                                BTRFS_SUPER_INFO_SIZE,
2265                                                &tmp_next_block_ctx,
2266                                                mirror_num);
2267                        if (ret) {
2268                                pr_info("btrfsic: btrfsic_map_block(@%llu, mirror=%d) failed!\n",
2269                                       next_bytenr, mirror_num);
2270                                return -1;
2271                        }
2272
2273                        next_block = btrfsic_block_lookup_or_add(
2274                                        state,
2275                                        &tmp_next_block_ctx,
2276                                        additional_string,
2277                                        1, 0, 1,
2278                                        mirror_num,
2279                                        &was_created);
2280                        if (NULL == next_block) {
2281                                pr_info("btrfsic: error, kmalloc failed!\n");
2282                                btrfsic_release_block_ctx(&tmp_next_block_ctx);
2283                                return -1;
2284                        }
2285
2286                        next_block->disk_key = tmp_disk_key;
2287                        if (was_created)
2288                                next_block->generation =
2289                                    BTRFSIC_GENERATION_UNKNOWN;
2290                        l = btrfsic_block_link_lookup_or_add(
2291                                        state,
2292                                        &tmp_next_block_ctx,
2293                                        next_block,
2294                                        superblock,
2295                                        BTRFSIC_GENERATION_UNKNOWN);
2296                        btrfsic_release_block_ctx(&tmp_next_block_ctx);
2297                        if (NULL == l)
2298                                return -1;
2299                }
2300        }
2301
2302        if (WARN_ON(-1 == btrfsic_check_all_ref_blocks(state, superblock, 0)))
2303                btrfsic_dump_tree(state);
2304
2305        return 0;
2306}
2307
2308static int btrfsic_check_all_ref_blocks(struct btrfsic_state *state,
2309                                        struct btrfsic_block *const block,
2310                                        int recursion_level)
2311{
2312        const struct btrfsic_block_link *l;
2313        int ret = 0;
2314
2315        if (recursion_level >= 3 + BTRFS_MAX_LEVEL) {
2316                /*
2317                 * Note that this situation can happen and does not
2318                 * indicate an error in regular cases. It happens
2319                 * when disk blocks are freed and later reused.
2320                 * The check-integrity module is not aware of any
2321                 * block free operations, it just recognizes block
2322                 * write operations. Therefore it keeps the linkage
2323                 * information for a block until a block is
2324                 * rewritten. This can temporarily cause incorrect
2325                 * and even circular linkage informations. This
2326                 * causes no harm unless such blocks are referenced
2327                 * by the most recent super block.
2328                 */
2329                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2330                        pr_info("btrfsic: abort cyclic linkage (case 1).\n");
2331
2332                return ret;
2333        }
2334
2335        /*
2336         * This algorithm is recursive because the amount of used stack
2337         * space is very small and the max recursion depth is limited.
2338         */
2339        list_for_each_entry(l, &block->ref_to_list, node_ref_to) {
2340                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2341                        pr_info("rl=%d, %c @%llu (%s/%llu/%d) %u* refers to %c @%llu (%s/%llu/%d)\n",
2342                               recursion_level,
2343                               btrfsic_get_block_type(state, block),
2344                               block->logical_bytenr, block->dev_state->name,
2345                               block->dev_bytenr, block->mirror_num,
2346                               l->ref_cnt,
2347                               btrfsic_get_block_type(state, l->block_ref_to),
2348                               l->block_ref_to->logical_bytenr,
2349                               l->block_ref_to->dev_state->name,
2350                               l->block_ref_to->dev_bytenr,
2351                               l->block_ref_to->mirror_num);
2352                if (l->block_ref_to->never_written) {
2353                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which is never written!\n",
2354                               btrfsic_get_block_type(state, l->block_ref_to),
2355                               l->block_ref_to->logical_bytenr,
2356                               l->block_ref_to->dev_state->name,
2357                               l->block_ref_to->dev_bytenr,
2358                               l->block_ref_to->mirror_num);
2359                        ret = -1;
2360                } else if (!l->block_ref_to->is_iodone) {
2361                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which is not yet iodone!\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->iodone_w_error) {
2369                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) which has write error!\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->parent_generation !=
2377                           l->block_ref_to->generation &&
2378                           BTRFSIC_GENERATION_UNKNOWN !=
2379                           l->parent_generation &&
2380                           BTRFSIC_GENERATION_UNKNOWN !=
2381                           l->block_ref_to->generation) {
2382                        pr_info("btrfs: attempt to write superblock which references block %c @%llu (%s/%llu/%d) with generation %llu != parent generation %llu!\n",
2383                               btrfsic_get_block_type(state, l->block_ref_to),
2384                               l->block_ref_to->logical_bytenr,
2385                               l->block_ref_to->dev_state->name,
2386                               l->block_ref_to->dev_bytenr,
2387                               l->block_ref_to->mirror_num,
2388                               l->block_ref_to->generation,
2389                               l->parent_generation);
2390                        ret = -1;
2391                } else if (l->block_ref_to->flush_gen >
2392                           l->block_ref_to->dev_state->last_flush_gen) {
2393                        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",
2394                               btrfsic_get_block_type(state, l->block_ref_to),
2395                               l->block_ref_to->logical_bytenr,
2396                               l->block_ref_to->dev_state->name,
2397                               l->block_ref_to->dev_bytenr,
2398                               l->block_ref_to->mirror_num, block->flush_gen,
2399                               l->block_ref_to->dev_state->last_flush_gen);
2400                        ret = -1;
2401                } else if (-1 == btrfsic_check_all_ref_blocks(state,
2402                                                              l->block_ref_to,
2403                                                              recursion_level +
2404                                                              1)) {
2405                        ret = -1;
2406                }
2407        }
2408
2409        return ret;
2410}
2411
2412static int btrfsic_is_block_ref_by_superblock(
2413                const struct btrfsic_state *state,
2414                const struct btrfsic_block *block,
2415                int recursion_level)
2416{
2417        const struct btrfsic_block_link *l;
2418
2419        if (recursion_level >= 3 + BTRFS_MAX_LEVEL) {
2420                /* refer to comment at "abort cyclic linkage (case 1)" */
2421                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2422                        pr_info("btrfsic: abort cyclic linkage (case 2).\n");
2423
2424                return 0;
2425        }
2426
2427        /*
2428         * This algorithm is recursive because the amount of used stack space
2429         * is very small and the max recursion depth is limited.
2430         */
2431        list_for_each_entry(l, &block->ref_from_list, node_ref_from) {
2432                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2433                        pr_info("rl=%d, %c @%llu (%s/%llu/%d) is ref %u* from %c @%llu (%s/%llu/%d)\n",
2434                               recursion_level,
2435                               btrfsic_get_block_type(state, block),
2436                               block->logical_bytenr, block->dev_state->name,
2437                               block->dev_bytenr, block->mirror_num,
2438                               l->ref_cnt,
2439                               btrfsic_get_block_type(state, l->block_ref_from),
2440                               l->block_ref_from->logical_bytenr,
2441                               l->block_ref_from->dev_state->name,
2442                               l->block_ref_from->dev_bytenr,
2443                               l->block_ref_from->mirror_num);
2444                if (l->block_ref_from->is_superblock &&
2445                    state->latest_superblock->dev_bytenr ==
2446                    l->block_ref_from->dev_bytenr &&
2447                    state->latest_superblock->dev_state->bdev ==
2448                    l->block_ref_from->dev_state->bdev)
2449                        return 1;
2450                else if (btrfsic_is_block_ref_by_superblock(state,
2451                                                            l->block_ref_from,
2452                                                            recursion_level +
2453                                                            1))
2454                        return 1;
2455        }
2456
2457        return 0;
2458}
2459
2460static void btrfsic_print_add_link(const struct btrfsic_state *state,
2461                                   const struct btrfsic_block_link *l)
2462{
2463        pr_info("Add %u* link from %c @%llu (%s/%llu/%d) to %c @%llu (%s/%llu/%d).\n",
2464               l->ref_cnt,
2465               btrfsic_get_block_type(state, l->block_ref_from),
2466               l->block_ref_from->logical_bytenr,
2467               l->block_ref_from->dev_state->name,
2468               l->block_ref_from->dev_bytenr, l->block_ref_from->mirror_num,
2469               btrfsic_get_block_type(state, l->block_ref_to),
2470               l->block_ref_to->logical_bytenr,
2471               l->block_ref_to->dev_state->name, l->block_ref_to->dev_bytenr,
2472               l->block_ref_to->mirror_num);
2473}
2474
2475static void btrfsic_print_rem_link(const struct btrfsic_state *state,
2476                                   const struct btrfsic_block_link *l)
2477{
2478        pr_info("Rem %u* link from %c @%llu (%s/%llu/%d) to %c @%llu (%s/%llu/%d).\n",
2479               l->ref_cnt,
2480               btrfsic_get_block_type(state, l->block_ref_from),
2481               l->block_ref_from->logical_bytenr,
2482               l->block_ref_from->dev_state->name,
2483               l->block_ref_from->dev_bytenr, l->block_ref_from->mirror_num,
2484               btrfsic_get_block_type(state, l->block_ref_to),
2485               l->block_ref_to->logical_bytenr,
2486               l->block_ref_to->dev_state->name, l->block_ref_to->dev_bytenr,
2487               l->block_ref_to->mirror_num);
2488}
2489
2490static char btrfsic_get_block_type(const struct btrfsic_state *state,
2491                                   const struct btrfsic_block *block)
2492{
2493        if (block->is_superblock &&
2494            state->latest_superblock->dev_bytenr == block->dev_bytenr &&
2495            state->latest_superblock->dev_state->bdev == block->dev_state->bdev)
2496                return 'S';
2497        else if (block->is_superblock)
2498                return 's';
2499        else if (block->is_metadata)
2500                return 'M';
2501        else
2502                return 'D';
2503}
2504
2505static void btrfsic_dump_tree(const struct btrfsic_state *state)
2506{
2507        btrfsic_dump_tree_sub(state, state->latest_superblock, 0);
2508}
2509
2510static void btrfsic_dump_tree_sub(const struct btrfsic_state *state,
2511                                  const struct btrfsic_block *block,
2512                                  int indent_level)
2513{
2514        const struct btrfsic_block_link *l;
2515        int indent_add;
2516        static char buf[80];
2517        int cursor_position;
2518
2519        /*
2520         * Should better fill an on-stack buffer with a complete line and
2521         * dump it at once when it is time to print a newline character.
2522         */
2523
2524        /*
2525         * This algorithm is recursive because the amount of used stack space
2526         * is very small and the max recursion depth is limited.
2527         */
2528        indent_add = sprintf(buf, "%c-%llu(%s/%llu/%u)",
2529                             btrfsic_get_block_type(state, block),
2530                             block->logical_bytenr, block->dev_state->name,
2531                             block->dev_bytenr, block->mirror_num);
2532        if (indent_level + indent_add > BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL) {
2533                printk("[...]\n");
2534                return;
2535        }
2536        printk(buf);
2537        indent_level += indent_add;
2538        if (list_empty(&block->ref_to_list)) {
2539                printk("\n");
2540                return;
2541        }
2542        if (block->mirror_num > 1 &&
2543            !(state->print_mask & BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS)) {
2544                printk(" [...]\n");
2545                return;
2546        }
2547
2548        cursor_position = indent_level;
2549        list_for_each_entry(l, &block->ref_to_list, node_ref_to) {
2550                while (cursor_position < indent_level) {
2551                        printk(" ");
2552                        cursor_position++;
2553                }
2554                if (l->ref_cnt > 1)
2555                        indent_add = sprintf(buf, " %d*--> ", l->ref_cnt);
2556                else
2557                        indent_add = sprintf(buf, " --> ");
2558                if (indent_level + indent_add >
2559                    BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL) {
2560                        printk("[...]\n");
2561                        cursor_position = 0;
2562                        continue;
2563                }
2564
2565                printk(buf);
2566
2567                btrfsic_dump_tree_sub(state, l->block_ref_to,
2568                                      indent_level + indent_add);
2569                cursor_position = 0;
2570        }
2571}
2572
2573static struct btrfsic_block_link *btrfsic_block_link_lookup_or_add(
2574                struct btrfsic_state *state,
2575                struct btrfsic_block_data_ctx *next_block_ctx,
2576                struct btrfsic_block *next_block,
2577                struct btrfsic_block *from_block,
2578                u64 parent_generation)
2579{
2580        struct btrfsic_block_link *l;
2581
2582        l = btrfsic_block_link_hashtable_lookup(next_block_ctx->dev->bdev,
2583                                                next_block_ctx->dev_bytenr,
2584                                                from_block->dev_state->bdev,
2585                                                from_block->dev_bytenr,
2586                                                &state->block_link_hashtable);
2587        if (NULL == l) {
2588                l = btrfsic_block_link_alloc();
2589                if (NULL == l) {
2590                        pr_info("btrfsic: error, kmalloc failed!\n");
2591                        return NULL;
2592                }
2593
2594                l->block_ref_to = next_block;
2595                l->block_ref_from = from_block;
2596                l->ref_cnt = 1;
2597                l->parent_generation = parent_generation;
2598
2599                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2600                        btrfsic_print_add_link(state, l);
2601
2602                list_add(&l->node_ref_to, &from_block->ref_to_list);
2603                list_add(&l->node_ref_from, &next_block->ref_from_list);
2604
2605                btrfsic_block_link_hashtable_add(l,
2606                                                 &state->block_link_hashtable);
2607        } else {
2608                l->ref_cnt++;
2609                l->parent_generation = parent_generation;
2610                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2611                        btrfsic_print_add_link(state, l);
2612        }
2613
2614        return l;
2615}
2616
2617static struct btrfsic_block *btrfsic_block_lookup_or_add(
2618                struct btrfsic_state *state,
2619                struct btrfsic_block_data_ctx *block_ctx,
2620                const char *additional_string,
2621                int is_metadata,
2622                int is_iodone,
2623                int never_written,
2624                int mirror_num,
2625                int *was_created)
2626{
2627        struct btrfsic_block *block;
2628
2629        block = btrfsic_block_hashtable_lookup(block_ctx->dev->bdev,
2630                                               block_ctx->dev_bytenr,
2631                                               &state->block_hashtable);
2632        if (NULL == block) {
2633                struct btrfsic_dev_state *dev_state;
2634
2635                block = btrfsic_block_alloc();
2636                if (NULL == block) {
2637                        pr_info("btrfsic: error, kmalloc failed!\n");
2638                        return NULL;
2639                }
2640                dev_state = btrfsic_dev_state_lookup(block_ctx->dev->bdev->bd_dev);
2641                if (NULL == dev_state) {
2642                        pr_info("btrfsic: error, lookup dev_state failed!\n");
2643                        btrfsic_block_free(block);
2644                        return NULL;
2645                }
2646                block->dev_state = dev_state;
2647                block->dev_bytenr = block_ctx->dev_bytenr;
2648                block->logical_bytenr = block_ctx->start;
2649                block->is_metadata = is_metadata;
2650                block->is_iodone = is_iodone;
2651                block->never_written = never_written;
2652                block->mirror_num = mirror_num;
2653                if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
2654                        pr_info("New %s%c-block @%llu (%s/%llu/%d)\n",
2655                               additional_string,
2656                               btrfsic_get_block_type(state, block),
2657                               block->logical_bytenr, dev_state->name,
2658                               block->dev_bytenr, mirror_num);
2659                list_add(&block->all_blocks_node, &state->all_blocks_list);
2660                btrfsic_block_hashtable_add(block, &state->block_hashtable);
2661                if (NULL != was_created)
2662                        *was_created = 1;
2663        } else {
2664                if (NULL != was_created)
2665                        *was_created = 0;
2666        }
2667
2668        return block;
2669}
2670
2671static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state,
2672                                           u64 bytenr,
2673                                           struct btrfsic_dev_state *dev_state,
2674                                           u64 dev_bytenr)
2675{
2676        struct btrfs_fs_info *fs_info = state->fs_info;
2677        struct btrfsic_block_data_ctx block_ctx;
2678        int num_copies;
2679        int mirror_num;
2680        int match = 0;
2681        int ret;
2682
2683        num_copies = btrfs_num_copies(fs_info, bytenr, state->metablock_size);
2684
2685        for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2686                ret = btrfsic_map_block(state, bytenr, state->metablock_size,
2687                                        &block_ctx, mirror_num);
2688                if (ret) {
2689                        pr_info("btrfsic: btrfsic_map_block(logical @%llu, mirror %d) failed!\n",
2690                               bytenr, mirror_num);
2691                        continue;
2692                }
2693
2694                if (dev_state->bdev == block_ctx.dev->bdev &&
2695                    dev_bytenr == block_ctx.dev_bytenr) {
2696                        match++;
2697                        btrfsic_release_block_ctx(&block_ctx);
2698                        break;
2699                }
2700                btrfsic_release_block_ctx(&block_ctx);
2701        }
2702
2703        if (WARN_ON(!match)) {
2704                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",
2705                       bytenr, dev_state->name, dev_bytenr);
2706                for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
2707                        ret = btrfsic_map_block(state, bytenr,
2708                                                state->metablock_size,
2709                                                &block_ctx, mirror_num);
2710                        if (ret)
2711                                continue;
2712
2713                        pr_info("Read logical bytenr @%llu maps to (%s/%llu/%d)\n",
2714                               bytenr, block_ctx.dev->name,
2715                               block_ctx.dev_bytenr, mirror_num);
2716                }
2717        }
2718}
2719
2720static struct btrfsic_dev_state *btrfsic_dev_state_lookup(dev_t dev)
2721{
2722        return btrfsic_dev_state_hashtable_lookup(dev,
2723                                                  &btrfsic_dev_state_hashtable);
2724}
2725
2726int btrfsic_submit_bh(int op, int op_flags, struct buffer_head *bh)
2727{
2728        struct btrfsic_dev_state *dev_state;
2729
2730        if (!btrfsic_is_initialized)
2731                return submit_bh(op, op_flags, bh);
2732
2733        mutex_lock(&btrfsic_mutex);
2734        /* since btrfsic_submit_bh() might also be called before
2735         * btrfsic_mount(), this might return NULL */
2736        dev_state = btrfsic_dev_state_lookup(bh->b_bdev->bd_dev);
2737
2738        /* Only called to write the superblock (incl. FLUSH/FUA) */
2739        if (NULL != dev_state &&
2740            (op == REQ_OP_WRITE) && bh->b_size > 0) {
2741                u64 dev_bytenr;
2742
2743                dev_bytenr = BTRFS_BDEV_BLOCKSIZE * bh->b_blocknr;
2744                if (dev_state->state->print_mask &
2745                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2746                        pr_info("submit_bh(op=0x%x,0x%x, blocknr=%llu (bytenr %llu), size=%zu, data=%p, bdev=%p)\n",
2747                               op, op_flags, (unsigned long long)bh->b_blocknr,
2748                               dev_bytenr, bh->b_size, bh->b_data, bh->b_bdev);
2749                btrfsic_process_written_block(dev_state, dev_bytenr,
2750                                              &bh->b_data, 1, NULL,
2751                                              NULL, bh, op_flags);
2752        } else if (NULL != dev_state && (op_flags & REQ_PREFLUSH)) {
2753                if (dev_state->state->print_mask &
2754                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2755                        pr_info("submit_bh(op=0x%x,0x%x FLUSH, bdev=%p)\n",
2756                               op, op_flags, bh->b_bdev);
2757                if (!dev_state->dummy_block_for_bio_bh_flush.is_iodone) {
2758                        if ((dev_state->state->print_mask &
2759                             (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH |
2760                              BTRFSIC_PRINT_MASK_VERBOSE)))
2761                                pr_info("btrfsic_submit_bh(%s) with FLUSH but dummy block already in use (ignored)!\n",
2762                                       dev_state->name);
2763                } else {
2764                        struct btrfsic_block *const block =
2765                                &dev_state->dummy_block_for_bio_bh_flush;
2766
2767                        block->is_iodone = 0;
2768                        block->never_written = 0;
2769                        block->iodone_w_error = 0;
2770                        block->flush_gen = dev_state->last_flush_gen + 1;
2771                        block->submit_bio_bh_rw = op_flags;
2772                        block->orig_bio_bh_private = bh->b_private;
2773                        block->orig_bio_bh_end_io.bh = bh->b_end_io;
2774                        block->next_in_same_bio = NULL;
2775                        bh->b_private = block;
2776                        bh->b_end_io = btrfsic_bh_end_io;
2777                }
2778        }
2779        mutex_unlock(&btrfsic_mutex);
2780        return submit_bh(op, op_flags, bh);
2781}
2782
2783static void __btrfsic_submit_bio(struct bio *bio)
2784{
2785        struct btrfsic_dev_state *dev_state;
2786
2787        if (!btrfsic_is_initialized)
2788                return;
2789
2790        mutex_lock(&btrfsic_mutex);
2791        /* since btrfsic_submit_bio() is also called before
2792         * btrfsic_mount(), this might return NULL */
2793        dev_state = btrfsic_dev_state_lookup(bio_dev(bio) + bio->bi_partno);
2794        if (NULL != dev_state &&
2795            (bio_op(bio) == REQ_OP_WRITE) && bio_has_data(bio)) {
2796                unsigned int i = 0;
2797                u64 dev_bytenr;
2798                u64 cur_bytenr;
2799                struct bio_vec bvec;
2800                struct bvec_iter iter;
2801                int bio_is_patched;
2802                char **mapped_datav;
2803                unsigned int segs = bio_segments(bio);
2804
2805                dev_bytenr = 512 * bio->bi_iter.bi_sector;
2806                bio_is_patched = 0;
2807                if (dev_state->state->print_mask &
2808                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2809                        pr_info("submit_bio(rw=%d,0x%x, bi_vcnt=%u, bi_sector=%llu (bytenr %llu), bi_disk=%p)\n",
2810                               bio_op(bio), bio->bi_opf, segs,
2811                               (unsigned long long)bio->bi_iter.bi_sector,
2812                               dev_bytenr, bio->bi_disk);
2813
2814                mapped_datav = kmalloc_array(segs,
2815                                             sizeof(*mapped_datav), GFP_NOFS);
2816                if (!mapped_datav)
2817                        goto leave;
2818                cur_bytenr = dev_bytenr;
2819
2820                bio_for_each_segment(bvec, bio, iter) {
2821                        BUG_ON(bvec.bv_len != PAGE_SIZE);
2822                        mapped_datav[i] = kmap(bvec.bv_page);
2823                        i++;
2824
2825                        if (dev_state->state->print_mask &
2826                            BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH_VERBOSE)
2827                                pr_info("#%u: bytenr=%llu, len=%u, offset=%u\n",
2828                                       i, cur_bytenr, bvec.bv_len, bvec.bv_offset);
2829                        cur_bytenr += bvec.bv_len;
2830                }
2831                btrfsic_process_written_block(dev_state, dev_bytenr,
2832                                              mapped_datav, segs,
2833                                              bio, &bio_is_patched,
2834                                              NULL, bio->bi_opf);
2835                bio_for_each_segment(bvec, bio, iter)
2836                        kunmap(bvec.bv_page);
2837                kfree(mapped_datav);
2838        } else if (NULL != dev_state && (bio->bi_opf & REQ_PREFLUSH)) {
2839                if (dev_state->state->print_mask &
2840                    BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH)
2841                        pr_info("submit_bio(rw=%d,0x%x FLUSH, disk=%p)\n",
2842                               bio_op(bio), bio->bi_opf, bio->bi_disk);
2843                if (!dev_state->dummy_block_for_bio_bh_flush.is_iodone) {
2844                        if ((dev_state->state->print_mask &
2845                             (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH |
2846                              BTRFSIC_PRINT_MASK_VERBOSE)))
2847                                pr_info("btrfsic_submit_bio(%s) with FLUSH but dummy block already in use (ignored)!\n",
2848                                       dev_state->name);
2849                } else {
2850                        struct btrfsic_block *const block =
2851                                &dev_state->dummy_block_for_bio_bh_flush;
2852
2853                        block->is_iodone = 0;
2854                        block->never_written = 0;
2855                        block->iodone_w_error = 0;
2856                        block->flush_gen = dev_state->last_flush_gen + 1;
2857                        block->submit_bio_bh_rw = bio->bi_opf;
2858                        block->orig_bio_bh_private = bio->bi_private;
2859                        block->orig_bio_bh_end_io.bio = bio->bi_end_io;
2860                        block->next_in_same_bio = NULL;
2861                        bio->bi_private = block;
2862                        bio->bi_end_io = btrfsic_bio_end_io;
2863                }
2864        }
2865leave:
2866        mutex_unlock(&btrfsic_mutex);
2867}
2868
2869void btrfsic_submit_bio(struct bio *bio)
2870{
2871        __btrfsic_submit_bio(bio);
2872        submit_bio(bio);
2873}
2874
2875int btrfsic_submit_bio_wait(struct bio *bio)
2876{
2877        __btrfsic_submit_bio(bio);
2878        return submit_bio_wait(bio);
2879}
2880
2881int btrfsic_mount(struct btrfs_fs_info *fs_info,
2882                  struct btrfs_fs_devices *fs_devices,
2883                  int including_extent_data, u32 print_mask)
2884{
2885        int ret;
2886        struct btrfsic_state *state;
2887        struct list_head *dev_head = &fs_devices->devices;
2888        struct btrfs_device *device;
2889
2890        if (fs_info->nodesize & ((u64)PAGE_SIZE - 1)) {
2891                pr_info("btrfsic: cannot handle nodesize %d not being a multiple of PAGE_SIZE %ld!\n",
2892                       fs_info->nodesize, PAGE_SIZE);
2893                return -1;
2894        }
2895        if (fs_info->sectorsize & ((u64)PAGE_SIZE - 1)) {
2896                pr_info("btrfsic: cannot handle sectorsize %d not being a multiple of PAGE_SIZE %ld!\n",
2897                       fs_info->sectorsize, PAGE_SIZE);
2898                return -1;
2899        }
2900        state = kvzalloc(sizeof(*state), GFP_KERNEL);
2901        if (!state) {
2902                pr_info("btrfs check-integrity: allocation failed!\n");
2903                return -ENOMEM;
2904        }
2905
2906        if (!btrfsic_is_initialized) {
2907                mutex_init(&btrfsic_mutex);
2908                btrfsic_dev_state_hashtable_init(&btrfsic_dev_state_hashtable);
2909                btrfsic_is_initialized = 1;
2910        }
2911        mutex_lock(&btrfsic_mutex);
2912        state->fs_info = fs_info;
2913        state->print_mask = print_mask;
2914        state->include_extent_data = including_extent_data;
2915        state->csum_size = 0;
2916        state->metablock_size = fs_info->nodesize;
2917        state->datablock_size = fs_info->sectorsize;
2918        INIT_LIST_HEAD(&state->all_blocks_list);
2919        btrfsic_block_hashtable_init(&state->block_hashtable);
2920        btrfsic_block_link_hashtable_init(&state->block_link_hashtable);
2921        state->max_superblock_generation = 0;
2922        state->latest_superblock = NULL;
2923
2924        list_for_each_entry(device, dev_head, dev_list) {
2925                struct btrfsic_dev_state *ds;
2926                const char *p;
2927
2928                if (!device->bdev || !device->name)
2929                        continue;
2930
2931                ds = btrfsic_dev_state_alloc();
2932                if (NULL == ds) {
2933                        pr_info("btrfs check-integrity: kmalloc() failed!\n");
2934                        mutex_unlock(&btrfsic_mutex);
2935                        return -ENOMEM;
2936                }
2937                ds->bdev = device->bdev;
2938                ds->state = state;
2939                bdevname(ds->bdev, ds->name);
2940                ds->name[BDEVNAME_SIZE - 1] = '\0';
2941                p = kbasename(ds->name);
2942                strlcpy(ds->name, p, sizeof(ds->name));
2943                btrfsic_dev_state_hashtable_add(ds,
2944                                                &btrfsic_dev_state_hashtable);
2945        }
2946
2947        ret = btrfsic_process_superblock(state, fs_devices);
2948        if (0 != ret) {
2949                mutex_unlock(&btrfsic_mutex);
2950                btrfsic_unmount(fs_devices);
2951                return ret;
2952        }
2953
2954        if (state->print_mask & BTRFSIC_PRINT_MASK_INITIAL_DATABASE)
2955                btrfsic_dump_database(state);
2956        if (state->print_mask & BTRFSIC_PRINT_MASK_INITIAL_TREE)
2957                btrfsic_dump_tree(state);
2958
2959        mutex_unlock(&btrfsic_mutex);
2960        return 0;
2961}
2962
2963void btrfsic_unmount(struct btrfs_fs_devices *fs_devices)
2964{
2965        struct btrfsic_block *b_all, *tmp_all;
2966        struct btrfsic_state *state;
2967        struct list_head *dev_head = &fs_devices->devices;
2968        struct btrfs_device *device;
2969
2970        if (!btrfsic_is_initialized)
2971                return;
2972
2973        mutex_lock(&btrfsic_mutex);
2974
2975        state = NULL;
2976        list_for_each_entry(device, dev_head, dev_list) {
2977                struct btrfsic_dev_state *ds;
2978
2979                if (!device->bdev || !device->name)
2980                        continue;
2981
2982                ds = btrfsic_dev_state_hashtable_lookup(
2983                                device->bdev->bd_dev,
2984                                &btrfsic_dev_state_hashtable);
2985                if (NULL != ds) {
2986                        state = ds->state;
2987                        btrfsic_dev_state_hashtable_remove(ds);
2988                        btrfsic_dev_state_free(ds);
2989                }
2990        }
2991
2992        if (NULL == state) {
2993                pr_info("btrfsic: error, cannot find state information on umount!\n");
2994                mutex_unlock(&btrfsic_mutex);
2995                return;
2996        }
2997
2998        /*
2999         * Don't care about keeping the lists' state up to date,
3000         * just free all memory that was allocated dynamically.
3001         * Free the blocks and the block_links.
3002         */
3003        list_for_each_entry_safe(b_all, tmp_all, &state->all_blocks_list,
3004                                 all_blocks_node) {
3005                struct btrfsic_block_link *l, *tmp;
3006
3007                list_for_each_entry_safe(l, tmp, &b_all->ref_to_list,
3008                                         node_ref_to) {
3009                        if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
3010                                btrfsic_print_rem_link(state, l);
3011
3012                        l->ref_cnt--;
3013                        if (0 == l->ref_cnt)
3014                                btrfsic_block_link_free(l);
3015                }
3016
3017                if (b_all->is_iodone || b_all->never_written)
3018                        btrfsic_block_free(b_all);
3019                else
3020                        pr_info("btrfs: attempt to free %c-block @%llu (%s/%llu/%d) on umount which is not yet iodone!\n",
3021                               btrfsic_get_block_type(state, b_all),
3022                               b_all->logical_bytenr, b_all->dev_state->name,
3023                               b_all->dev_bytenr, b_all->mirror_num);
3024        }
3025
3026        mutex_unlock(&btrfsic_mutex);
3027
3028        kvfree(state);
3029}
3030