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