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