2 * Copyright (C) STRATO AG 2011. All rights reserved.
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.
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.
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.
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.
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
30 * 1. It is not allowed to write a disk block which is
31 * currently referenced by the super block (either directly
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.
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
51 * The search term in the kernel log that can be used to filter
52 * on the existence of detected integrity issues is
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.
59 * Example #1, apply integrity checks to all metadata:
60 * mount /dev/sdb1 /mnt -o check_int
62 * Example #2, apply integrity checks to all metadata and
64 * mount /dev/sdb1 /mnt -o check_int_data
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
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.
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>
90 #include "transaction.h"
91 #include "extent_io.h"
94 #include "print-tree.h"
96 #include "check-integrity.h"
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
109 #define BTRFSIC_GENERATION_UNKNOWN ((u64)-1)
112 * The definition of the bitmask fields for the print_mask.
113 * They are specified with the mount option check_integrity_print_mask.
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
129 struct btrfsic_dev_state
;
130 struct btrfsic_state
;
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
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 */
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 */
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
;
160 } orig_bio_bh_end_io
;
161 int submit_bio_bh_rw
;
162 u64 flush_gen
; /* only valid if !never_written */
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).
176 struct btrfsic_block_link
{
177 u32 magic_num
; /* only used for debug purposes */
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
;
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
;
194 char name
[BDEVNAME_SIZE
];
197 struct btrfsic_block_hashtable
{
198 struct list_head table
[BTRFSIC_BLOCK_HASHTABLE_SIZE
];
201 struct btrfsic_block_link_hashtable
{
202 struct list_head table
[BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE
];
205 struct btrfsic_dev_state_hashtable
{
206 struct list_head table
[BTRFSIC_DEV2STATE_HASHTABLE_SIZE
];
209 struct btrfsic_block_data_ctx
{
210 u64 start
; /* virtual bytenr */
211 u64 dev_bytenr
; /* physical bytenr on device */
213 struct btrfsic_dev_state
*dev
;
215 struct buffer_head
*bh
; /* do not use if set to NULL */
218 /* This structure is used to implement recursion without occupying
219 * any stack space, refer to btrfsic_process_metablock() */
220 struct btrfsic_stack_frame
{
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
;
236 /* Some state per mounted filesystem */
237 struct btrfsic_state
{
239 int include_extent_data
;
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
;
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
,
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
,
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
,
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
,
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
,
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
,
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
,
378 struct btrfsic_dev_state
*dev_state
,
379 u64 dev_bytenr
, char *data
);
381 static struct mutex btrfsic_mutex
;
382 static int btrfsic_is_initialized
;
383 static struct btrfsic_dev_state_hashtable btrfsic_dev_state_hashtable
;
386 static void btrfsic_block_init(struct btrfsic_block
*b
)
388 b
->magic_num
= BTRFSIC_BLOCK_MAGIC_NUMBER
;
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;
397 b
->is_superblock
= 0;
399 b
->iodone_w_error
= 0;
400 b
->never_written
= 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;
413 static struct btrfsic_block
*btrfsic_block_alloc(void)
415 struct btrfsic_block
*b
;
417 b
= kzalloc(sizeof(*b
), GFP_NOFS
);
419 btrfsic_block_init(b
);
424 static void btrfsic_block_free(struct btrfsic_block
*b
)
426 BUG_ON(!(NULL
== b
|| BTRFSIC_BLOCK_MAGIC_NUMBER
== b
->magic_num
));
430 static void btrfsic_block_link_init(struct btrfsic_block_link
*l
)
432 l
->magic_num
= BTRFSIC_BLOCK_LINK_MAGIC_NUMBER
;
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
;
441 static struct btrfsic_block_link
*btrfsic_block_link_alloc(void)
443 struct btrfsic_block_link
*l
;
445 l
= kzalloc(sizeof(*l
), GFP_NOFS
);
447 btrfsic_block_link_init(l
);
452 static void btrfsic_block_link_free(struct btrfsic_block_link
*l
)
454 BUG_ON(!(NULL
== l
|| BTRFSIC_BLOCK_LINK_MAGIC_NUMBER
== l
->magic_num
));
458 static void btrfsic_dev_state_init(struct btrfsic_dev_state
*ds
)
460 ds
->magic_num
= BTRFSIC_DEV2STATE_MAGIC_NUMBER
;
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
;
471 static struct btrfsic_dev_state
*btrfsic_dev_state_alloc(void)
473 struct btrfsic_dev_state
*ds
;
475 ds
= kzalloc(sizeof(*ds
), GFP_NOFS
);
477 btrfsic_dev_state_init(ds
);
482 static void btrfsic_dev_state_free(struct btrfsic_dev_state
*ds
)
484 BUG_ON(!(NULL
== ds
||
485 BTRFSIC_DEV2STATE_MAGIC_NUMBER
== ds
->magic_num
));
489 static void btrfsic_block_hashtable_init(struct btrfsic_block_hashtable
*h
)
493 for (i
= 0; i
< BTRFSIC_BLOCK_HASHTABLE_SIZE
; i
++)
494 INIT_LIST_HEAD(h
->table
+ i
);
497 static void btrfsic_block_hashtable_add(struct btrfsic_block
*b
,
498 struct btrfsic_block_hashtable
*h
)
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);
505 list_add(&b
->collision_resolving_node
, h
->table
+ hashval
);
508 static void btrfsic_block_hashtable_remove(struct btrfsic_block
*b
)
510 list_del(&b
->collision_resolving_node
);
513 static struct btrfsic_block
*btrfsic_block_hashtable_lookup(
514 struct block_device
*bdev
,
516 struct btrfsic_block_hashtable
*h
)
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
;
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
);
529 if (b
->dev_state
->bdev
== bdev
&& b
->dev_bytenr
== dev_bytenr
)
536 static void btrfsic_block_link_hashtable_init(
537 struct btrfsic_block_link_hashtable
*h
)
541 for (i
= 0; i
< BTRFSIC_BLOCK_LINK_HASHTABLE_SIZE
; i
++)
542 INIT_LIST_HEAD(h
->table
+ i
);
545 static void btrfsic_block_link_hashtable_add(
546 struct btrfsic_block_link
*l
,
547 struct btrfsic_block_link_hashtable
*h
)
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);
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
);
561 static void btrfsic_block_link_hashtable_remove(struct btrfsic_block_link
*l
)
563 list_del(&l
->collision_resolving_node
);
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
)
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
;
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
);
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
)
598 static void btrfsic_dev_state_hashtable_init(
599 struct btrfsic_dev_state_hashtable
*h
)
603 for (i
= 0; i
< BTRFSIC_DEV2STATE_HASHTABLE_SIZE
; i
++)
604 INIT_LIST_HEAD(h
->table
+ i
);
607 static void btrfsic_dev_state_hashtable_add(
608 struct btrfsic_dev_state
*ds
,
609 struct btrfsic_dev_state_hashtable
*h
)
611 const unsigned int hashval
=
612 (((unsigned int)((uintptr_t)ds
->bdev
)) &
613 (BTRFSIC_DEV2STATE_HASHTABLE_SIZE
- 1));
615 list_add(&ds
->collision_resolving_node
, h
->table
+ hashval
);
618 static void btrfsic_dev_state_hashtable_remove(struct btrfsic_dev_state
*ds
)
620 list_del(&ds
->collision_resolving_node
);
623 static struct btrfsic_dev_state
*btrfsic_dev_state_hashtable_lookup(
624 struct block_device
*bdev
,
625 struct btrfsic_dev_state_hashtable
*h
)
627 const unsigned int hashval
=
628 (((unsigned int)((uintptr_t)bdev
)) &
629 (BTRFSIC_DEV2STATE_HASHTABLE_SIZE
- 1));
630 struct list_head
*elem
;
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
);
637 if (ds
->bdev
== bdev
)
644 static int btrfsic_process_superblock(struct btrfsic_state
*state
,
645 struct btrfs_fs_devices
*fs_devices
)
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
;
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");
661 list_for_each_entry(device
, dev_head
, dev_list
) {
663 struct btrfsic_dev_state
*dev_state
;
665 if (!device
->bdev
|| !device
->name
)
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
);
681 if (NULL
== state
->latest_superblock
) {
682 printk(KERN_INFO
"btrfsic: no superblock found!\n");
683 kfree(selected_super
);
687 state
->csum_size
= btrfs_super_csum_size(selected_super
);
689 for (pass
= 0; pass
< 3; pass
++) {
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
);
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
);
710 next_bytenr
= btrfs_super_log_root(selected_super
);
711 if (0 == next_bytenr
)
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
);
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
);
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
;
733 ret
= btrfsic_map_block(state
, next_bytenr
, PAGE_SIZE
,
737 printk(KERN_INFO
"btrfsic:"
738 " btrfsic_map_block(root @%llu,"
739 " mirror %d) failed!\n",
740 (unsigned long long)next_bytenr
,
742 kfree(selected_super
);
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
);
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
->
757 state
->latest_superblock
->dev_bytenr
,
758 &state
->block_link_hashtable
);
761 ret
= btrfsic_read_block(state
, &tmp_next_block_ctx
);
762 if (ret
< (int)BTRFSIC_BLOCK_SIZE
) {
764 "btrfsic: read @logical %llu failed!\n",
766 tmp_next_block_ctx
.start
);
767 btrfsic_release_block_ctx(&tmp_next_block_ctx
);
768 kfree(selected_super
);
772 hdr
= (struct btrfs_header
*)tmp_next_block_ctx
.data
;
773 ret
= btrfsic_process_metablock(state
,
777 BTRFS_MAX_LEVEL
+ 3, 1);
778 btrfsic_release_block_ctx(&tmp_next_block_ctx
);
782 kfree(selected_super
);
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
)
794 struct btrfs_super_block
*super_tmp
;
796 struct buffer_head
*bh
;
797 struct btrfsic_block
*superblock_tmp
;
799 struct block_device
*const superblock_bdev
= device
->bdev
;
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);
806 super_tmp
= (struct btrfs_super_block
*)
807 (bh
->b_data
+ (dev_bytenr
& 4095));
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
)) {
818 btrfsic_block_hashtable_lookup(superblock_bdev
,
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");
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
,
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
);
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
;
863 for (pass
= 0; pass
< 3; pass
++) {
867 const char *additional_string
= NULL
;
868 struct btrfs_disk_key tmp_disk_key
;
870 tmp_disk_key
.type
= BTRFS_ROOT_ITEM_KEY
;
871 tmp_disk_key
.offset
= 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
);
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
);
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
)
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
;
906 if (btrfsic_map_block(state
, next_bytenr
, PAGE_SIZE
,
909 printk(KERN_INFO
"btrfsic: btrfsic_map_block("
910 "bytenr @%llu, mirror %d) failed!\n",
911 (unsigned long long)next_bytenr
,
917 next_block
= btrfsic_block_lookup_or_add(
918 state
, &tmp_next_block_ctx
,
919 additional_string
, 1, 1, 0,
921 if (NULL
== next_block
) {
922 btrfsic_release_block_ctx(&tmp_next_block_ctx
);
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
);
940 if (state
->print_mask
& BTRFSIC_PRINT_MASK_INITIAL_ALL_TREES
)
941 btrfsic_dump_tree_sub(state
, superblock_tmp
, 0);
947 static struct btrfsic_stack_frame
*btrfsic_stack_frame_alloc(void)
949 struct btrfsic_stack_frame
*sf
;
951 sf
= kzalloc(sizeof(*sf
), GFP_NOFS
);
953 printk(KERN_INFO
"btrfsic: alloc memory failed!\n");
955 sf
->magic
= BTRFSIC_BLOCK_STACK_FRAME_MAGIC_NUMBER
;
959 static void btrfsic_stack_frame_free(struct btrfsic_stack_frame
*sf
)
961 BUG_ON(!(NULL
== sf
||
962 BTRFSIC_BLOCK_STACK_FRAME_MAGIC_NUMBER
== sf
->magic
));
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
)
973 struct btrfsic_stack_frame initial_stack_frame
= { 0 };
974 struct btrfsic_stack_frame
*sf
;
975 struct btrfsic_stack_frame
*next_stack
;
977 sf
= &initial_stack_frame
;
980 sf
->limit_nesting
= first_limit_nesting
;
981 sf
->block
= first_block
;
982 sf
->block_ctx
= first_block_ctx
;
983 sf
->next_block
= NULL
;
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
;
994 sf
->nr
= le32_to_cpu(leafhdr
->header
.nritems
);
996 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
998 "leaf %llu items %d generation %llu"
1000 (unsigned long long)
1001 sf
->block_ctx
->start
,
1003 (unsigned long long)
1004 le64_to_cpu(leafhdr
->header
.generation
),
1005 (unsigned long long)
1006 le64_to_cpu(leafhdr
->header
.owner
));
1009 continue_with_current_leaf_stack_frame
:
1010 if (0 == sf
->num_copies
|| sf
->mirror_num
> sf
->num_copies
) {
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
;
1019 const u32 item_offset
= le32_to_cpu(disk_item
->offset
);
1021 type
= disk_key
->type
;
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
) +
1029 const u64 next_bytenr
=
1030 le64_to_cpu(root_item
->bytenr
);
1033 btrfsic_create_link_to_next_block(
1039 &sf
->next_block_ctx
,
1045 le64_to_cpu(root_item
->
1048 goto one_stack_frame_backwards
;
1050 if (NULL
!= sf
->next_block
) {
1051 struct btrfs_header
*const next_hdr
=
1052 (struct btrfs_header
*)
1053 sf
->next_block_ctx
.data
;
1056 btrfsic_stack_frame_alloc();
1057 if (NULL
== next_stack
) {
1058 btrfsic_release_block_ctx(
1061 goto one_stack_frame_backwards
;
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
;
1074 goto continue_with_new_stack_frame
;
1076 } else if (BTRFS_EXTENT_DATA_KEY
== type
&&
1077 state
->include_extent_data
) {
1078 sf
->error
= btrfsic_handle_extent_data(
1085 goto one_stack_frame_backwards
;
1088 goto continue_with_current_leaf_stack_frame
;
1091 struct btrfs_node
*const nodehdr
= (struct btrfs_node
*)sf
->hdr
;
1094 sf
->nr
= le32_to_cpu(nodehdr
->header
.nritems
);
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
));
1108 continue_with_current_node_stack_frame
:
1109 if (0 == sf
->num_copies
|| sf
->mirror_num
> sf
->num_copies
) {
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
);
1120 sf
->error
= btrfsic_create_link_to_next_block(
1126 &sf
->next_block_ctx
,
1132 le64_to_cpu(disk_key_ptr
->generation
));
1134 goto one_stack_frame_backwards
;
1136 if (NULL
!= sf
->next_block
) {
1137 struct btrfs_header
*const next_hdr
=
1138 (struct btrfs_header
*)
1139 sf
->next_block_ctx
.data
;
1141 next_stack
= btrfsic_stack_frame_alloc();
1142 if (NULL
== next_stack
)
1143 goto one_stack_frame_backwards
;
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
;
1154 goto continue_with_new_stack_frame
;
1157 goto continue_with_current_node_stack_frame
;
1161 one_stack_frame_backwards
:
1162 if (NULL
!= sf
->prev
) {
1163 struct btrfsic_stack_frame
*const prev
= sf
->prev
;
1165 /* the one for the initial block is freed in the caller */
1166 btrfsic_release_block_ctx(sf
->block_ctx
);
1169 prev
->error
= sf
->error
;
1170 btrfsic_stack_frame_free(sf
);
1172 goto one_stack_frame_backwards
;
1175 btrfsic_stack_frame_free(sf
);
1177 goto continue_with_new_stack_frame
;
1179 BUG_ON(&initial_stack_frame
!= sf
);
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
,
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
)
1198 struct btrfsic_block
*next_block
= NULL
;
1200 struct btrfsic_block_link
*l
;
1201 int did_alloc_block_link
;
1202 int block_was_created
;
1204 *next_blockp
= NULL
;
1205 if (0 == *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
);
1215 if (*mirror_nump
> *num_copiesp
)
1218 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1220 "btrfsic_create_link_to_next_block(mirror_num=%d)\n",
1222 ret
= btrfsic_map_block(state
, next_bytenr
,
1224 next_block_ctx
, *mirror_nump
);
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
;
1234 next_block
= btrfsic_block_lookup_or_add(state
,
1235 next_block_ctx
, "referenced ",
1236 1, force_iodone_flag
,
1239 &block_was_created
);
1240 if (NULL
== next_block
) {
1241 btrfsic_release_block_ctx(next_block_ctx
);
1242 *next_blockp
= NULL
;
1245 if (block_was_created
) {
1247 next_block
->generation
= BTRFSIC_GENERATION_UNKNOWN
;
1249 if (next_block
->logical_bytenr
!= next_bytenr
&&
1250 !(!next_block
->is_metadata
&&
1251 0 == next_block
->logical_bytenr
)) {
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
,
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
)
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
,
1270 btrfsic_get_block_type(state
, next_block
));
1271 next_block
->logical_bytenr
= next_bytenr
;
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
);
1282 next_block
->disk_key
= *disk_key
;
1284 l
= btrfsic_block_link_alloc();
1286 printk(KERN_INFO
"btrfsic: error, kmalloc failed!\n");
1287 btrfsic_release_block_ctx(next_block_ctx
);
1288 *next_blockp
= NULL
;
1292 did_alloc_block_link
= 1;
1293 l
->block_ref_to
= next_block
;
1294 l
->block_ref_from
= block
;
1296 l
->parent_generation
= parent_generation
;
1298 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1299 btrfsic_print_add_link(state
, l
);
1301 list_add(&l
->node_ref_to
, &block
->ref_to_list
);
1302 list_add(&l
->node_ref_from
, &next_block
->ref_from_list
);
1304 btrfsic_block_link_hashtable_add(l
,
1305 &state
->block_link_hashtable
);
1307 did_alloc_block_link
= 0;
1308 if (0 == limit_nesting
) {
1310 l
->parent_generation
= parent_generation
;
1311 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1312 btrfsic_print_add_link(state
, l
);
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
) {
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
;
1327 *next_blockp
= next_block
;
1329 *next_blockp
= NULL
;
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
)
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
);
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
;
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
))
1367 while (num_bytes
> 0) {
1372 if (num_bytes
> BTRFSIC_BLOCK_SIZE
)
1373 chunk_len
= BTRFSIC_BLOCK_SIZE
;
1375 chunk_len
= num_bytes
;
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
;
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
)
1393 "\tdisk_bytenr = %llu, num_bytes %u\n",
1394 (unsigned long long)next_bytenr
,
1396 ret
= btrfsic_map_block(state
, next_bytenr
,
1397 chunk_len
, &next_block_ctx
,
1401 "btrfsic: btrfsic_map_block(@%llu,"
1402 " mirror=%d) failed!\n",
1403 (unsigned long long)next_bytenr
,
1408 next_block
= btrfsic_block_lookup_or_add(
1416 &block_was_created
);
1417 if (NULL
== next_block
) {
1419 "btrfsic: error, kmalloc failed!\n");
1420 btrfsic_release_block_ctx(&next_block_ctx
);
1423 if (!block_was_created
) {
1424 if (next_block
->logical_bytenr
!= next_bytenr
&&
1425 !(!next_block
->is_metadata
&&
1426 0 == next_block
->logical_bytenr
)) {
1429 " @%llu (%s/%llu/%d)"
1430 " found in hash table, D,"
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
,
1438 (unsigned long long)
1439 next_block
->logical_bytenr
);
1441 next_block
->logical_bytenr
= next_bytenr
;
1442 next_block
->mirror_num
= mirror_num
;
1445 l
= btrfsic_block_link_lookup_or_add(state
,
1449 btrfsic_release_block_ctx(&next_block_ctx
);
1454 next_bytenr
+= chunk_len
;
1455 num_bytes
-= chunk_len
;
1461 static int btrfsic_map_block(struct btrfsic_state
*state
, u64 bytenr
, u32 len
,
1462 struct btrfsic_block_data_ctx
*block_ctx_out
,
1467 struct btrfs_bio
*multi
= NULL
;
1468 struct btrfs_device
*device
;
1471 ret
= btrfs_map_block(&state
->root
->fs_info
->mapping_tree
, READ
,
1472 bytenr
, &length
, &multi
, mirror_num
);
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
;
1484 if (NULL
== block_ctx_out
->dev
) {
1486 printk(KERN_INFO
"btrfsic: error, cannot lookup dev (#1)!\n");
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
)
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
) {
1505 printk(KERN_INFO
"btrfsic: error, cannot lookup dev (#2)!\n");
1510 static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx
*block_ctx
)
1512 if (NULL
!= block_ctx
->bh
) {
1513 brelse(block_ctx
->bh
);
1514 block_ctx
->bh
= NULL
;
1518 static int btrfsic_read_block(struct btrfsic_state
*state
,
1519 struct btrfsic_block_data_ctx
*block_ctx
)
1521 block_ctx
->bh
= NULL
;
1522 if (block_ctx
->dev_bytenr
& 4095) {
1524 "btrfsic: read_block() with unaligned bytenr %llu\n",
1525 (unsigned long long)block_ctx
->dev_bytenr
);
1528 if (block_ctx
->len
> 4096) {
1530 "btrfsic: read_block() with too huge size %d\n",
1535 block_ctx
->bh
= __bread(block_ctx
->dev
->bdev
,
1536 block_ctx
->dev_bytenr
>> 12, 4096);
1537 if (NULL
== block_ctx
->bh
)
1539 block_ctx
->data
= block_ctx
->bh
->b_data
;
1541 return block_ctx
->len
;
1544 static void btrfsic_dump_database(struct btrfsic_state
*state
)
1546 struct list_head
*elem_all
;
1548 BUG_ON(NULL
== state
);
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
,
1555 struct list_head
*elem_ref_to
;
1556 struct list_head
*elem_ref_from
;
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
,
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
,
1571 printk(KERN_INFO
" %c @%llu (%s/%llu/%d)"
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
,
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
);
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
,
1594 printk(KERN_INFO
" %c @%llu (%s/%llu/%d)"
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
,
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
);
1612 printk(KERN_INFO
"\n");
1617 * Test whether the disk block contains a tree block (leaf or node)
1618 * (note that this test fails for the super block)
1620 static int btrfsic_test_for_metadata(struct btrfsic_state
*state
,
1621 const u8
*data
, unsigned int size
)
1623 struct btrfs_header
*h
;
1624 u8 csum
[BTRFS_CSUM_SIZE
];
1629 h
= (struct btrfs_header
*)data
;
1631 if (memcmp(h
->fsid
, state
->root
->fs_info
->fsid
, BTRFS_UUID_SIZE
))
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
))
1639 return fail
|| crc_fail
;
1642 static void btrfsic_process_written_block(struct btrfsic_dev_state
*dev_state
,
1644 u8
*mapped_data
, unsigned int len
,
1646 int *bio_is_patched
,
1647 struct buffer_head
*bh
,
1648 int submit_bio_bh_rw
)
1651 struct btrfsic_block
*block
;
1652 struct btrfsic_block_data_ctx block_ctx
;
1654 struct btrfsic_state
*state
= dev_state
->state
;
1655 struct block_device
*bdev
= dev_state
->bdev
;
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;
1662 block
= btrfsic_block_hashtable_lookup(bdev
, dev_bytenr
,
1663 &state
->block_hashtable
);
1664 if (NULL
!= block
) {
1666 struct list_head
*elem_ref_to
;
1667 struct list_head
*tmp_ref_to
;
1669 if (block
->is_superblock
) {
1670 bytenr
= le64_to_cpu(((struct btrfs_super_block
*)
1671 mapped_data
)->bytenr
);
1673 if (state
->print_mask
&
1674 BTRFSIC_PRINT_MASK_TREE_BEFORE_SB_WRITE
) {
1676 "[before new superblock is written]:\n");
1677 btrfsic_dump_tree_sub(state
, block
, 0);
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
,
1689 if (block
->logical_bytenr
!= bytenr
) {
1691 "Written block @%llu (%s/%llu/%d)"
1692 " found in hash table, %c,"
1694 " (!= stored %llu).\n",
1695 (unsigned long long)bytenr
,
1697 (unsigned long long)dev_bytenr
,
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
)
1706 "Written block @%llu (%s/%llu/%d)"
1707 " found in hash table, %c.\n",
1708 (unsigned long long)bytenr
,
1710 (unsigned long long)dev_bytenr
,
1712 btrfsic_get_block_type(state
, block
));
1714 bytenr
= block
->logical_bytenr
;
1715 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1717 "Written block @%llu (%s/%llu/%d)"
1718 " found in hash table, %c.\n",
1719 (unsigned long long)bytenr
,
1721 (unsigned long long)dev_bytenr
,
1723 btrfsic_get_block_type(state
, block
));
1726 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
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),"
1736 " which is referenced by most recent superblock"
1737 " (superblockgen=%llu)!\n",
1738 btrfsic_get_block_type(state
, block
),
1739 (unsigned long long)bytenr
,
1741 (unsigned long long)dev_bytenr
,
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
);
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
,
1764 (unsigned long long)dev_bytenr
,
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
);
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.
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
,
1788 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1789 btrfsic_print_rem_link(state
, l
);
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
);
1799 if (block
->is_superblock
)
1800 ret
= btrfsic_map_superblock(state
, bytenr
, len
,
1803 ret
= btrfsic_map_block(state
, bytenr
, len
,
1807 "btrfsic: btrfsic_map_block(root @%llu)"
1808 " failed!\n", (unsigned long long)bytenr
);
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
;
1817 if (is_metadata
|| state
->include_extent_data
) {
1818 block
->never_written
= 0;
1819 block
->iodone_w_error
= 0;
1821 block
->is_iodone
= 0;
1822 BUG_ON(NULL
== bio_is_patched
);
1823 if (!*bio_is_patched
) {
1824 block
->orig_bio_bh_private
=
1826 block
->orig_bio_bh_end_io
.bio
=
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;
1833 struct btrfsic_block
*chained_block
=
1834 (struct btrfsic_block
*)
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
.
1843 block
->next_in_same_bio
= chained_block
;
1844 bio
->bi_private
= block
;
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
;
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
;
1861 block
->flush_gen
= dev_state
->last_flush_gen
+ 1;
1862 block
->submit_bio_bh_rw
= submit_bio_bh_rw
;
1864 block
->logical_bytenr
= bytenr
;
1865 block
->is_metadata
= 1;
1866 if (block
->is_superblock
) {
1867 ret
= btrfsic_process_written_superblock(
1870 (struct btrfs_super_block
*)
1872 if (state
->print_mask
&
1873 BTRFSIC_PRINT_MASK_TREE_AFTER_SB_WRITE
) {
1875 "[after new superblock is written]:\n");
1876 btrfsic_dump_tree_sub(state
, block
, 0);
1879 block
->mirror_num
= 0; /* unknown */
1880 ret
= btrfsic_process_metablock(
1884 (struct btrfs_header
*)
1890 "btrfsic: btrfsic_process_metablock"
1891 "(root @%llu) failed!\n",
1892 (unsigned long long)dev_bytenr
);
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
)) {
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
1905 btrfsic_block_hashtable_remove(block
);
1906 list_del(&block
->all_blocks_node
);
1907 btrfsic_block_free(block
);
1910 btrfsic_release_block_ctx(&block_ctx
);
1912 /* block has not been found in hash table */
1916 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1917 printk(KERN_INFO
"Written block (%s/%llu/?)"
1918 " !found in hash table, D.\n",
1920 (unsigned long long)dev_bytenr
);
1921 if (!state
->include_extent_data
)
1922 return; /* ignore that written D block */
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
;
1931 bytenr
= le64_to_cpu(((struct btrfs_header
*)
1932 mapped_data
)->bytenr
);
1933 btrfsic_cmp_log_and_dev_bytenr(state
, bytenr
, dev_state
,
1936 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
1938 "Written block @%llu (%s/%llu/?)"
1939 " !found in hash table, M.\n",
1940 (unsigned long long)bytenr
,
1942 (unsigned long long)dev_bytenr
);
1944 ret
= btrfsic_map_block(state
, bytenr
, len
, &block_ctx
,
1948 "btrfsic: btrfsic_map_block(root @%llu)"
1950 (unsigned long long)dev_bytenr
);
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
;
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
);
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
;
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;
1986 struct btrfsic_block
*chained_block
=
1987 (struct btrfsic_block
*)
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
;
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
;
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
;
2011 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
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
,
2019 list_add(&block
->all_blocks_node
, &state
->all_blocks_list
);
2020 btrfsic_block_hashtable_add(block
, &state
->block_hashtable
);
2023 ret
= btrfsic_process_metablock(state
, block
,
2025 (struct btrfs_header
*)
2026 block_ctx
.data
, 0, 0);
2029 "btrfsic: process_metablock(root @%llu)"
2031 (unsigned long long)dev_bytenr
);
2033 btrfsic_release_block_ctx(&block_ctx
);
2037 static void btrfsic_bio_end_io(struct bio
*bp
, int bio_error_status
)
2039 struct btrfsic_block
*block
= (struct btrfsic_block
*)bp
->bi_private
;
2042 /* mutex is not held! This is not save if IO is not yet completed
2045 if (bio_error_status
)
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
;
2053 struct btrfsic_block
*next_block
;
2054 struct btrfsic_dev_state
*const dev_state
= block
->dev_state
;
2056 if ((dev_state
->state
->print_mask
&
2057 BTRFSIC_PRINT_MASK_END_IO_BIO_BH
))
2059 "bio_end_io(err=%d) for %c @%llu (%s/%llu/%d)\n",
2061 btrfsic_get_block_type(dev_state
->state
, block
),
2062 (unsigned long long)block
->logical_bytenr
,
2064 (unsigned long long)block
->dev_bytenr
,
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
))
2073 "bio_end_io() new %s flush_gen=%llu\n",
2075 (unsigned long long)
2076 dev_state
->last_flush_gen
);
2078 if (block
->submit_bio_bh_rw
& REQ_FUA
)
2079 block
->flush_gen
= 0; /* FUA completed means block is
2081 block
->is_iodone
= 1; /* for FLUSH, this releases the block */
2083 } while (NULL
!= block
);
2085 bp
->bi_end_io(bp
, bio_error_status
);
2088 static void btrfsic_bh_end_io(struct buffer_head
*bh
, int uptodate
)
2090 struct btrfsic_block
*block
= (struct btrfsic_block
*)bh
->b_private
;
2091 int iodone_w_error
= !uptodate
;
2092 struct btrfsic_dev_state
*dev_state
;
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
))
2098 "bh_end_io(error=%d) for %c @%llu (%s/%llu/%d)\n",
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
,
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
))
2112 "bh_end_io() new %s flush_gen=%llu\n",
2114 (unsigned long long)dev_state
->last_flush_gen
);
2116 if (block
->submit_bio_bh_rw
& REQ_FUA
)
2117 block
->flush_gen
= 0; /* FUA completed means block is on disk */
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
);
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
)
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
)
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
);
2148 if (state
->print_mask
& BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE
)
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
);
2161 state
->max_superblock_generation
=
2162 btrfs_super_generation(super_hdr
);
2163 state
->latest_superblock
= superblock
;
2166 for (pass
= 0; pass
< 3; pass
++) {
2169 struct btrfsic_block
*next_block
;
2170 struct btrfsic_block_data_ctx tmp_next_block_ctx
;
2171 struct btrfsic_block_link
*l
;
2174 const char *additional_string
= NULL
;
2175 struct btrfs_disk_key tmp_disk_key
;
2177 tmp_disk_key
.type
= BTRFS_ROOT_ITEM_KEY
;
2178 tmp_disk_key
.offset
= 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
);
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
);
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
)
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
);
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
++) {
2224 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
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
,
2233 "btrfsic: btrfsic_map_block(@%llu,"
2234 " mirror=%d) failed!\n",
2235 (unsigned long long)next_bytenr
,
2240 next_block
= btrfsic_block_lookup_or_add(
2242 &tmp_next_block_ctx
,
2247 if (NULL
== next_block
) {
2249 "btrfsic: error, kmalloc failed!\n");
2250 btrfsic_release_block_ctx(&tmp_next_block_ctx
);
2254 next_block
->disk_key
= tmp_disk_key
;
2256 next_block
->generation
=
2257 BTRFSIC_GENERATION_UNKNOWN
;
2258 l
= btrfsic_block_link_lookup_or_add(
2260 &tmp_next_block_ctx
,
2263 BTRFSIC_GENERATION_UNKNOWN
);
2264 btrfsic_release_block_ctx(&tmp_next_block_ctx
);
2270 if (-1 == btrfsic_check_all_ref_blocks(state
, superblock
, 0)) {
2272 btrfsic_dump_tree(state
);
2278 static int btrfsic_check_all_ref_blocks(struct btrfsic_state
*state
,
2279 struct btrfsic_block
*const block
,
2280 int recursion_level
)
2282 struct list_head
*elem_ref_to
;
2285 if (recursion_level
>= 3 + BTRFS_MAX_LEVEL
) {
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.
2299 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
2301 "btrfsic: abort cyclic linkage (case 1).\n");
2307 * This algorithm is recursive because the amount of used stack
2308 * space is very small and the max recursion depth is limited.
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
,
2315 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
2317 "rl=%d, %c @%llu (%s/%llu/%d)"
2318 " %u* refers to %c @%llu (%s/%llu/%d)\n",
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
,
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
);
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
);
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
);
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
);
2390 } else if (-1 == btrfsic_check_all_ref_blocks(state
,
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
)
2406 struct list_head
*elem_ref_from
;
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
)
2412 "btrfsic: abort cyclic linkage (case 2).\n");
2418 * This algorithm is recursive because the amount of used stack space
2419 * is very small and the max recursion depth is limited.
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
,
2426 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
2428 "rl=%d, %c @%llu (%s/%llu/%d)"
2429 " is ref %u* from %c @%llu (%s/%llu/%d)\n",
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
,
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
)
2450 else if (btrfsic_is_block_ref_by_superblock(state
,
2460 static void btrfsic_print_add_link(const struct btrfsic_state
*state
,
2461 const struct btrfsic_block_link
*l
)
2464 "Add %u* link from %c @%llu (%s/%llu/%d)"
2465 " to %c @%llu (%s/%llu/%d).\n",
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
);
2479 static void btrfsic_print_rem_link(const struct btrfsic_state
*state
,
2480 const struct btrfsic_block_link
*l
)
2483 "Rem %u* link from %c @%llu (%s/%llu/%d)"
2484 " to %c @%llu (%s/%llu/%d).\n",
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
);
2498 static char btrfsic_get_block_type(const struct btrfsic_state
*state
,
2499 const struct btrfsic_block
*block
)
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
)
2505 else if (block
->is_superblock
)
2507 else if (block
->is_metadata
)
2513 static void btrfsic_dump_tree(const struct btrfsic_state
*state
)
2515 btrfsic_dump_tree_sub(state
, state
->latest_superblock
, 0);
2518 static void btrfsic_dump_tree_sub(const struct btrfsic_state
*state
,
2519 const struct btrfsic_block
*block
,
2522 struct list_head
*elem_ref_to
;
2524 static char buf
[80];
2525 int cursor_position
;
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.
2533 * This algorithm is recursive because the amount of used stack space
2534 * is very small and the max recursion depth is limited.
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
,
2542 if (indent_level
+ indent_add
> BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL
) {
2547 indent_level
+= indent_add
;
2548 if (list_empty(&block
->ref_to_list
)) {
2552 if (block
->mirror_num
> 1 &&
2553 !(state
->print_mask
& BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS
)) {
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
,
2564 while (cursor_position
< indent_level
) {
2569 indent_add
= sprintf(buf
, " %d*--> ", l
->ref_cnt
);
2571 indent_add
= sprintf(buf
, " --> ");
2572 if (indent_level
+ indent_add
>
2573 BTRFSIC_TREE_DUMP_MAX_INDENT_LEVEL
) {
2575 cursor_position
= 0;
2581 btrfsic_dump_tree_sub(state
, l
->block_ref_to
,
2582 indent_level
+ indent_add
);
2583 cursor_position
= 0;
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
)
2594 struct btrfsic_block_link
*l
;
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
);
2602 l
= btrfsic_block_link_alloc();
2605 "btrfsic: error, kmalloc" " failed!\n");
2609 l
->block_ref_to
= next_block
;
2610 l
->block_ref_from
= from_block
;
2612 l
->parent_generation
= parent_generation
;
2614 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
2615 btrfsic_print_add_link(state
, l
);
2617 list_add(&l
->node_ref_to
, &from_block
->ref_to_list
);
2618 list_add(&l
->node_ref_from
, &next_block
->ref_from_list
);
2620 btrfsic_block_link_hashtable_add(l
,
2621 &state
->block_link_hashtable
);
2624 l
->parent_generation
= parent_generation
;
2625 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
2626 btrfsic_print_add_link(state
, l
);
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
,
2642 struct btrfsic_block
*block
;
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
;
2650 block
= btrfsic_block_alloc();
2651 if (NULL
== block
) {
2652 printk(KERN_INFO
"btrfsic: error, kmalloc failed!\n");
2655 dev_state
= btrfsic_dev_state_lookup(block_ctx
->dev
->bdev
);
2656 if (NULL
== dev_state
) {
2658 "btrfsic: error, lookup dev_state failed!\n");
2659 btrfsic_block_free(block
);
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
)
2671 "New %s%c-block @%llu (%s/%llu/%d)\n",
2673 btrfsic_get_block_type(state
, block
),
2674 (unsigned long long)block
->logical_bytenr
,
2676 (unsigned long long)block
->dev_bytenr
,
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
)
2683 if (NULL
!= was_created
)
2690 static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state
*state
,
2692 struct btrfsic_dev_state
*dev_state
,
2693 u64 dev_bytenr
, char *data
)
2698 struct btrfsic_block_data_ctx block_ctx
;
2701 num_copies
= btrfs_num_copies(&state
->root
->fs_info
->mapping_tree
,
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
);
2708 printk(KERN_INFO
"btrfsic:"
2709 " btrfsic_map_block(logical @%llu,"
2710 " mirror %d) failed!\n",
2711 (unsigned long long)bytenr
, mirror_num
);
2715 if (dev_state
->bdev
== block_ctx
.dev
->bdev
&&
2716 dev_bytenr
== block_ctx
.dev_bytenr
) {
2718 btrfsic_release_block_ctx(&block_ctx
);
2721 btrfsic_release_block_ctx(&block_ctx
);
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
);
2736 printk(KERN_INFO
"Read logical bytenr @%llu maps to"
2738 (unsigned long long)bytenr
,
2739 block_ctx
.dev
->name
,
2740 (unsigned long long)block_ctx
.dev_bytenr
,
2747 static struct btrfsic_dev_state
*btrfsic_dev_state_lookup(
2748 struct block_device
*bdev
)
2750 struct btrfsic_dev_state
*ds
;
2752 ds
= btrfsic_dev_state_hashtable_lookup(bdev
,
2753 &btrfsic_dev_state_hashtable
);
2757 int btrfsic_submit_bh(int rw
, struct buffer_head
*bh
)
2759 struct btrfsic_dev_state
*dev_state
;
2761 if (!btrfsic_is_initialized
)
2762 return submit_bh(rw
, bh
);
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
);
2769 /* Only called to write the superblock (incl. FLUSH/FUA) */
2770 if (NULL
!= dev_state
&&
2771 (rw
& WRITE
) && bh
->b_size
> 0) {
2774 dev_bytenr
= 4096 * bh
->b_blocknr
;
2775 if (dev_state
->state
->print_mask
&
2776 BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
)
2778 "submit_bh(rw=0x%x, blocknr=%lu (bytenr %llu),"
2779 " size=%lu, data=%p, bdev=%p)\n",
2780 rw
, (unsigned long)bh
->b_blocknr
,
2781 (unsigned long long)dev_bytenr
,
2782 (unsigned long)bh
->b_size
, bh
->b_data
,
2784 btrfsic_process_written_block(dev_state
, dev_bytenr
,
2785 bh
->b_data
, bh
->b_size
, NULL
,
2787 } else if (NULL
!= dev_state
&& (rw
& REQ_FLUSH
)) {
2788 if (dev_state
->state
->print_mask
&
2789 BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
)
2791 "submit_bh(rw=0x%x) FLUSH, bdev=%p)\n",
2793 if (!dev_state
->dummy_block_for_bio_bh_flush
.is_iodone
) {
2794 if ((dev_state
->state
->print_mask
&
2795 (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
|
2796 BTRFSIC_PRINT_MASK_VERBOSE
)))
2798 "btrfsic_submit_bh(%s) with FLUSH"
2799 " but dummy block already in use"
2803 struct btrfsic_block
*const block
=
2804 &dev_state
->dummy_block_for_bio_bh_flush
;
2806 block
->is_iodone
= 0;
2807 block
->never_written
= 0;
2808 block
->iodone_w_error
= 0;
2809 block
->flush_gen
= dev_state
->last_flush_gen
+ 1;
2810 block
->submit_bio_bh_rw
= rw
;
2811 block
->orig_bio_bh_private
= bh
->b_private
;
2812 block
->orig_bio_bh_end_io
.bh
= bh
->b_end_io
;
2813 block
->next_in_same_bio
= NULL
;
2814 bh
->b_private
= block
;
2815 bh
->b_end_io
= btrfsic_bh_end_io
;
2818 mutex_unlock(&btrfsic_mutex
);
2819 return submit_bh(rw
, bh
);
2822 void btrfsic_submit_bio(int rw
, struct bio
*bio
)
2824 struct btrfsic_dev_state
*dev_state
;
2826 if (!btrfsic_is_initialized
) {
2827 submit_bio(rw
, bio
);
2831 mutex_lock(&btrfsic_mutex
);
2832 /* since btrfsic_submit_bio() is also called before
2833 * btrfsic_mount(), this might return NULL */
2834 dev_state
= btrfsic_dev_state_lookup(bio
->bi_bdev
);
2835 if (NULL
!= dev_state
&&
2836 (rw
& WRITE
) && NULL
!= bio
->bi_io_vec
) {
2841 dev_bytenr
= 512 * bio
->bi_sector
;
2843 if (dev_state
->state
->print_mask
&
2844 BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
)
2846 "submit_bio(rw=0x%x, bi_vcnt=%u,"
2847 " bi_sector=%lu (bytenr %llu), bi_bdev=%p)\n",
2848 rw
, bio
->bi_vcnt
, (unsigned long)bio
->bi_sector
,
2849 (unsigned long long)dev_bytenr
,
2852 for (i
= 0; i
< bio
->bi_vcnt
; i
++) {
2855 mapped_data
= kmap(bio
->bi_io_vec
[i
].bv_page
);
2856 if ((BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
|
2857 BTRFSIC_PRINT_MASK_VERBOSE
) ==
2858 (dev_state
->state
->print_mask
&
2859 (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
|
2860 BTRFSIC_PRINT_MASK_VERBOSE
)))
2862 "#%u: page=%p, mapped=%p, len=%u,"
2864 i
, bio
->bi_io_vec
[i
].bv_page
,
2866 bio
->bi_io_vec
[i
].bv_len
,
2867 bio
->bi_io_vec
[i
].bv_offset
);
2868 btrfsic_process_written_block(dev_state
, dev_bytenr
,
2870 bio
->bi_io_vec
[i
].bv_len
,
2871 bio
, &bio_is_patched
,
2873 kunmap(bio
->bi_io_vec
[i
].bv_page
);
2874 dev_bytenr
+= bio
->bi_io_vec
[i
].bv_len
;
2876 } else if (NULL
!= dev_state
&& (rw
& REQ_FLUSH
)) {
2877 if (dev_state
->state
->print_mask
&
2878 BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
)
2880 "submit_bio(rw=0x%x) FLUSH, bdev=%p)\n",
2882 if (!dev_state
->dummy_block_for_bio_bh_flush
.is_iodone
) {
2883 if ((dev_state
->state
->print_mask
&
2884 (BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH
|
2885 BTRFSIC_PRINT_MASK_VERBOSE
)))
2887 "btrfsic_submit_bio(%s) with FLUSH"
2888 " but dummy block already in use"
2892 struct btrfsic_block
*const block
=
2893 &dev_state
->dummy_block_for_bio_bh_flush
;
2895 block
->is_iodone
= 0;
2896 block
->never_written
= 0;
2897 block
->iodone_w_error
= 0;
2898 block
->flush_gen
= dev_state
->last_flush_gen
+ 1;
2899 block
->submit_bio_bh_rw
= rw
;
2900 block
->orig_bio_bh_private
= bio
->bi_private
;
2901 block
->orig_bio_bh_end_io
.bio
= bio
->bi_end_io
;
2902 block
->next_in_same_bio
= NULL
;
2903 bio
->bi_private
= block
;
2904 bio
->bi_end_io
= btrfsic_bio_end_io
;
2907 mutex_unlock(&btrfsic_mutex
);
2909 submit_bio(rw
, bio
);
2912 int btrfsic_mount(struct btrfs_root
*root
,
2913 struct btrfs_fs_devices
*fs_devices
,
2914 int including_extent_data
, u32 print_mask
)
2917 struct btrfsic_state
*state
;
2918 struct list_head
*dev_head
= &fs_devices
->devices
;
2919 struct btrfs_device
*device
;
2921 state
= kzalloc(sizeof(*state
), GFP_NOFS
);
2922 if (NULL
== state
) {
2923 printk(KERN_INFO
"btrfs check-integrity: kmalloc() failed!\n");
2927 if (!btrfsic_is_initialized
) {
2928 mutex_init(&btrfsic_mutex
);
2929 btrfsic_dev_state_hashtable_init(&btrfsic_dev_state_hashtable
);
2930 btrfsic_is_initialized
= 1;
2932 mutex_lock(&btrfsic_mutex
);
2934 state
->print_mask
= print_mask
;
2935 state
->include_extent_data
= including_extent_data
;
2936 state
->csum_size
= 0;
2937 INIT_LIST_HEAD(&state
->all_blocks_list
);
2938 btrfsic_block_hashtable_init(&state
->block_hashtable
);
2939 btrfsic_block_link_hashtable_init(&state
->block_link_hashtable
);
2940 state
->max_superblock_generation
= 0;
2941 state
->latest_superblock
= NULL
;
2943 list_for_each_entry(device
, dev_head
, dev_list
) {
2944 struct btrfsic_dev_state
*ds
;
2947 if (!device
->bdev
|| !device
->name
)
2950 ds
= btrfsic_dev_state_alloc();
2953 "btrfs check-integrity: kmalloc() failed!\n");
2954 mutex_unlock(&btrfsic_mutex
);
2957 ds
->bdev
= device
->bdev
;
2959 bdevname(ds
->bdev
, ds
->name
);
2960 ds
->name
[BDEVNAME_SIZE
- 1] = '\0';
2961 for (p
= ds
->name
; *p
!= '\0'; p
++);
2962 while (p
> ds
->name
&& *p
!= '/')
2966 strlcpy(ds
->name
, p
, sizeof(ds
->name
));
2967 btrfsic_dev_state_hashtable_add(ds
,
2968 &btrfsic_dev_state_hashtable
);
2971 ret
= btrfsic_process_superblock(state
, fs_devices
);
2973 mutex_unlock(&btrfsic_mutex
);
2974 btrfsic_unmount(root
, fs_devices
);
2978 if (state
->print_mask
& BTRFSIC_PRINT_MASK_INITIAL_DATABASE
)
2979 btrfsic_dump_database(state
);
2980 if (state
->print_mask
& BTRFSIC_PRINT_MASK_INITIAL_TREE
)
2981 btrfsic_dump_tree(state
);
2983 mutex_unlock(&btrfsic_mutex
);
2987 void btrfsic_unmount(struct btrfs_root
*root
,
2988 struct btrfs_fs_devices
*fs_devices
)
2990 struct list_head
*elem_all
;
2991 struct list_head
*tmp_all
;
2992 struct btrfsic_state
*state
;
2993 struct list_head
*dev_head
= &fs_devices
->devices
;
2994 struct btrfs_device
*device
;
2996 if (!btrfsic_is_initialized
)
2999 mutex_lock(&btrfsic_mutex
);
3002 list_for_each_entry(device
, dev_head
, dev_list
) {
3003 struct btrfsic_dev_state
*ds
;
3005 if (!device
->bdev
|| !device
->name
)
3008 ds
= btrfsic_dev_state_hashtable_lookup(
3010 &btrfsic_dev_state_hashtable
);
3013 btrfsic_dev_state_hashtable_remove(ds
);
3014 btrfsic_dev_state_free(ds
);
3018 if (NULL
== state
) {
3020 "btrfsic: error, cannot find state information"
3022 mutex_unlock(&btrfsic_mutex
);
3027 * Don't care about keeping the lists' state up to date,
3028 * just free all memory that was allocated dynamically.
3029 * Free the blocks and the block_links.
3031 list_for_each_safe(elem_all
, tmp_all
, &state
->all_blocks_list
) {
3032 struct btrfsic_block
*const b_all
=
3033 list_entry(elem_all
, struct btrfsic_block
,
3035 struct list_head
*elem_ref_to
;
3036 struct list_head
*tmp_ref_to
;
3038 list_for_each_safe(elem_ref_to
, tmp_ref_to
,
3039 &b_all
->ref_to_list
) {
3040 struct btrfsic_block_link
*const l
=
3041 list_entry(elem_ref_to
,
3042 struct btrfsic_block_link
,
3045 if (state
->print_mask
& BTRFSIC_PRINT_MASK_VERBOSE
)
3046 btrfsic_print_rem_link(state
, l
);
3049 if (0 == l
->ref_cnt
)
3050 btrfsic_block_link_free(l
);
3053 if (b_all
->is_iodone
)
3054 btrfsic_block_free(b_all
);
3056 printk(KERN_INFO
"btrfs: attempt to free %c-block"
3057 " @%llu (%s/%llu/%d) on umount which is"
3058 " not yet iodone!\n",
3059 btrfsic_get_block_type(state
, b_all
),
3060 (unsigned long long)b_all
->logical_bytenr
,
3061 b_all
->dev_state
->name
,
3062 (unsigned long long)b_all
->dev_bytenr
,
3066 mutex_unlock(&btrfsic_mutex
);