2 * bitmap.c two-level bitmap (C) Peter T. Breuer (ptb@ot.uc3m.es) 2003
4 * bitmap_create - sets up the bitmap structure
5 * bitmap_destroy - destroys the bitmap structure
7 * additions, Copyright (C) 2003-2004, Paul Clements, SteelEye Technology, Inc.:
8 * - added disk storage for bitmap
9 * - changes to allow various bitmap chunk sizes
15 * flush after percent set rather than just time based. (maybe both).
18 #include <linux/blkdev.h>
19 #include <linux/module.h>
20 #include <linux/errno.h>
21 #include <linux/slab.h>
22 #include <linux/init.h>
23 #include <linux/timer.h>
24 #include <linux/sched.h>
25 #include <linux/list.h>
26 #include <linux/file.h>
27 #include <linux/mount.h>
28 #include <linux/buffer_head.h>
37 /* these are for debugging purposes only! */
39 /* define one and only one of these */
40 #define INJECT_FAULTS_1 0 /* cause bitmap_alloc_page to fail always */
41 #define INJECT_FAULTS_2 0 /* cause bitmap file to be kicked when first bit set*/
42 #define INJECT_FAULTS_3 0 /* treat bitmap file as kicked at init time */
43 #define INJECT_FAULTS_4 0 /* undef */
44 #define INJECT_FAULTS_5 0 /* undef */
45 #define INJECT_FAULTS_6 0
47 /* if these are defined, the driver will fail! debug only */
48 #define INJECT_FATAL_FAULT_1 0 /* fail kmalloc, causing bitmap_create to fail */
49 #define INJECT_FATAL_FAULT_2 0 /* undef */
50 #define INJECT_FATAL_FAULT_3 0 /* undef */
55 # define PRINTK(x...) printk(KERN_DEBUG x)
61 static inline char *bmname(struct bitmap
*bitmap
)
63 return bitmap
->mddev
? mdname(bitmap
->mddev
) : "mdX";
67 * just a placeholder - calls kmalloc for bitmap pages
69 static unsigned char *bitmap_alloc_page(struct bitmap
*bitmap
)
73 #ifdef INJECT_FAULTS_1
76 page
= kzalloc(PAGE_SIZE
, GFP_NOIO
);
79 printk("%s: bitmap_alloc_page FAILED\n", bmname(bitmap
));
81 PRINTK("%s: bitmap_alloc_page: allocated page at %p\n",
82 bmname(bitmap
), page
);
87 * for now just a placeholder -- just calls kfree for bitmap pages
89 static void bitmap_free_page(struct bitmap
*bitmap
, unsigned char *page
)
91 PRINTK("%s: bitmap_free_page: free page %p\n", bmname(bitmap
), page
);
96 * check a page and, if necessary, allocate it (or hijack it if the alloc fails)
98 * 1) check to see if this page is allocated, if it's not then try to alloc
99 * 2) if the alloc fails, set the page's hijacked flag so we'll use the
100 * page pointer directly as a counter
102 * if we find our page, we increment the page's refcount so that it stays
103 * allocated while we're using it
105 static int bitmap_checkpage(struct bitmap
*bitmap
,
106 unsigned long page
, int create
)
107 __releases(bitmap
->lock
)
108 __acquires(bitmap
->lock
)
110 unsigned char *mappage
;
112 if (page
>= bitmap
->pages
) {
113 /* This can happen if bitmap_start_sync goes beyond
114 * End-of-device while looking for a whole page.
120 if (bitmap
->bp
[page
].hijacked
) /* it's hijacked, don't try to alloc */
123 if (bitmap
->bp
[page
].map
) /* page is already allocated, just return */
129 /* this page has not been allocated yet */
131 spin_unlock_irq(&bitmap
->lock
);
132 mappage
= bitmap_alloc_page(bitmap
);
133 spin_lock_irq(&bitmap
->lock
);
135 if (mappage
== NULL
) {
136 PRINTK("%s: bitmap map page allocation failed, hijacking\n",
138 /* failed - set the hijacked flag so that we can use the
139 * pointer as a counter */
140 if (!bitmap
->bp
[page
].map
)
141 bitmap
->bp
[page
].hijacked
= 1;
142 } else if (bitmap
->bp
[page
].map
||
143 bitmap
->bp
[page
].hijacked
) {
144 /* somebody beat us to getting the page */
145 bitmap_free_page(bitmap
, mappage
);
149 /* no page was in place and we have one, so install it */
151 bitmap
->bp
[page
].map
= mappage
;
152 bitmap
->missing_pages
--;
157 /* if page is completely empty, put it back on the free list, or dealloc it */
158 /* if page was hijacked, unmark the flag so it might get alloced next time */
159 /* Note: lock should be held when calling this */
160 static void bitmap_checkfree(struct bitmap
*bitmap
, unsigned long page
)
164 if (bitmap
->bp
[page
].count
) /* page is still busy */
167 /* page is no longer in use, it can be released */
169 if (bitmap
->bp
[page
].hijacked
) { /* page was hijacked, undo this now */
170 bitmap
->bp
[page
].hijacked
= 0;
171 bitmap
->bp
[page
].map
= NULL
;
173 /* normal case, free the page */
174 ptr
= bitmap
->bp
[page
].map
;
175 bitmap
->bp
[page
].map
= NULL
;
176 bitmap
->missing_pages
++;
177 bitmap_free_page(bitmap
, ptr
);
182 * bitmap file handling - read and write the bitmap file and its superblock
186 * basic page I/O operations
189 /* IO operations when bitmap is stored near all superblocks */
190 static struct page
*read_sb_page(mddev_t
*mddev
, loff_t offset
,
192 unsigned long index
, int size
)
194 /* choose a good rdev and read the page from there */
201 page
= alloc_page(GFP_KERNEL
);
203 return ERR_PTR(-ENOMEM
);
207 list_for_each_entry(rdev
, &mddev
->disks
, same_set
) {
208 if (! test_bit(In_sync
, &rdev
->flags
)
209 || test_bit(Faulty
, &rdev
->flags
))
212 target
= offset
+ index
* (PAGE_SIZE
/512);
214 if (sync_page_io(rdev
, target
,
215 roundup(size
, bdev_logical_block_size(rdev
->bdev
)),
218 attach_page_buffers(page
, NULL
); /* so that free_buffer will
225 return ERR_PTR(-EIO
);
229 static mdk_rdev_t
*next_active_rdev(mdk_rdev_t
*rdev
, mddev_t
*mddev
)
231 /* Iterate the disks of an mddev, using rcu to protect access to the
232 * linked list, and raising the refcount of devices we return to ensure
233 * they don't disappear while in use.
234 * As devices are only added or removed when raid_disk is < 0 and
235 * nr_pending is 0 and In_sync is clear, the entries we return will
236 * still be in the same position on the list when we re-enter
237 * list_for_each_continue_rcu.
239 struct list_head
*pos
;
242 /* start at the beginning */
245 /* release the previous rdev and start from there. */
246 rdev_dec_pending(rdev
, mddev
);
247 pos
= &rdev
->same_set
;
249 list_for_each_continue_rcu(pos
, &mddev
->disks
) {
250 rdev
= list_entry(pos
, mdk_rdev_t
, same_set
);
251 if (rdev
->raid_disk
>= 0 &&
252 !test_bit(Faulty
, &rdev
->flags
)) {
253 /* this is a usable devices */
254 atomic_inc(&rdev
->nr_pending
);
263 static int write_sb_page(struct bitmap
*bitmap
, struct page
*page
, int wait
)
265 mdk_rdev_t
*rdev
= NULL
;
266 struct block_device
*bdev
;
267 mddev_t
*mddev
= bitmap
->mddev
;
269 while ((rdev
= next_active_rdev(rdev
, mddev
)) != NULL
) {
270 int size
= PAGE_SIZE
;
271 loff_t offset
= mddev
->bitmap_info
.offset
;
273 bdev
= (rdev
->meta_bdev
) ? rdev
->meta_bdev
: rdev
->bdev
;
275 if (page
->index
== bitmap
->file_pages
-1)
276 size
= roundup(bitmap
->last_page_size
,
277 bdev_logical_block_size(bdev
));
278 /* Just make sure we aren't corrupting data or
281 if (mddev
->external
) {
282 /* Bitmap could be anywhere. */
283 if (rdev
->sb_start
+ offset
+ (page
->index
287 rdev
->sb_start
+ offset
288 < (rdev
->data_offset
+ mddev
->dev_sectors
291 } else if (offset
< 0) {
292 /* DATA BITMAP METADATA */
294 + (long)(page
->index
* (PAGE_SIZE
/512))
296 /* bitmap runs in to metadata */
298 if (rdev
->data_offset
+ mddev
->dev_sectors
299 > rdev
->sb_start
+ offset
)
300 /* data runs in to bitmap */
302 } else if (rdev
->sb_start
< rdev
->data_offset
) {
303 /* METADATA BITMAP DATA */
306 + page
->index
*(PAGE_SIZE
/512) + size
/512
308 /* bitmap runs in to data */
311 /* DATA METADATA BITMAP - no problems */
313 md_super_write(mddev
, rdev
,
314 rdev
->sb_start
+ offset
315 + page
->index
* (PAGE_SIZE
/512),
321 md_super_wait(mddev
);
328 static void bitmap_file_kick(struct bitmap
*bitmap
);
330 * write out a page to a file
332 static void write_page(struct bitmap
*bitmap
, struct page
*page
, int wait
)
334 struct buffer_head
*bh
;
336 if (bitmap
->file
== NULL
) {
337 switch (write_sb_page(bitmap
, page
, wait
)) {
339 bitmap
->flags
|= BITMAP_WRITE_ERROR
;
343 bh
= page_buffers(page
);
345 while (bh
&& bh
->b_blocknr
) {
346 atomic_inc(&bitmap
->pending_writes
);
347 set_buffer_locked(bh
);
348 set_buffer_mapped(bh
);
349 submit_bh(WRITE
| REQ_SYNC
, bh
);
350 bh
= bh
->b_this_page
;
354 wait_event(bitmap
->write_wait
,
355 atomic_read(&bitmap
->pending_writes
)==0);
357 if (bitmap
->flags
& BITMAP_WRITE_ERROR
)
358 bitmap_file_kick(bitmap
);
361 static void end_bitmap_write(struct buffer_head
*bh
, int uptodate
)
363 struct bitmap
*bitmap
= bh
->b_private
;
367 spin_lock_irqsave(&bitmap
->lock
, flags
);
368 bitmap
->flags
|= BITMAP_WRITE_ERROR
;
369 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
371 if (atomic_dec_and_test(&bitmap
->pending_writes
))
372 wake_up(&bitmap
->write_wait
);
375 /* copied from buffer.c */
377 __clear_page_buffers(struct page
*page
)
379 ClearPagePrivate(page
);
380 set_page_private(page
, 0);
381 page_cache_release(page
);
383 static void free_buffers(struct page
*page
)
385 struct buffer_head
*bh
= page_buffers(page
);
388 struct buffer_head
*next
= bh
->b_this_page
;
389 free_buffer_head(bh
);
392 __clear_page_buffers(page
);
396 /* read a page from a file.
397 * We both read the page, and attach buffers to the page to record the
398 * address of each block (using bmap). These addresses will be used
399 * to write the block later, completely bypassing the filesystem.
400 * This usage is similar to how swap files are handled, and allows us
401 * to write to a file with no concerns of memory allocation failing.
403 static struct page
*read_page(struct file
*file
, unsigned long index
,
404 struct bitmap
*bitmap
,
407 struct page
*page
= NULL
;
408 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
409 struct buffer_head
*bh
;
412 PRINTK("read bitmap file (%dB @ %llu)\n", (int)PAGE_SIZE
,
413 (unsigned long long)index
<< PAGE_SHIFT
);
415 page
= alloc_page(GFP_KERNEL
);
417 page
= ERR_PTR(-ENOMEM
);
421 bh
= alloc_page_buffers(page
, 1<<inode
->i_blkbits
, 0);
424 page
= ERR_PTR(-ENOMEM
);
427 attach_page_buffers(page
, bh
);
428 block
= index
<< (PAGE_SHIFT
- inode
->i_blkbits
);
433 bh
->b_blocknr
= bmap(inode
, block
);
434 if (bh
->b_blocknr
== 0) {
435 /* Cannot use this file! */
437 page
= ERR_PTR(-EINVAL
);
440 bh
->b_bdev
= inode
->i_sb
->s_bdev
;
441 if (count
< (1<<inode
->i_blkbits
))
444 count
-= (1<<inode
->i_blkbits
);
446 bh
->b_end_io
= end_bitmap_write
;
447 bh
->b_private
= bitmap
;
448 atomic_inc(&bitmap
->pending_writes
);
449 set_buffer_locked(bh
);
450 set_buffer_mapped(bh
);
454 bh
= bh
->b_this_page
;
458 wait_event(bitmap
->write_wait
,
459 atomic_read(&bitmap
->pending_writes
)==0);
460 if (bitmap
->flags
& BITMAP_WRITE_ERROR
) {
462 page
= ERR_PTR(-EIO
);
466 printk(KERN_ALERT
"md: bitmap read error: (%dB @ %llu): %ld\n",
468 (unsigned long long)index
<< PAGE_SHIFT
,
474 * bitmap file superblock operations
477 /* update the event counter and sync the superblock to disk */
478 void bitmap_update_sb(struct bitmap
*bitmap
)
483 if (!bitmap
|| !bitmap
->mddev
) /* no bitmap for this array */
485 if (bitmap
->mddev
->bitmap_info
.external
)
487 spin_lock_irqsave(&bitmap
->lock
, flags
);
488 if (!bitmap
->sb_page
) { /* no superblock */
489 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
492 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
493 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
494 sb
->events
= cpu_to_le64(bitmap
->mddev
->events
);
495 if (bitmap
->mddev
->events
< bitmap
->events_cleared
)
496 /* rocking back to read-only */
497 bitmap
->events_cleared
= bitmap
->mddev
->events
;
498 sb
->events_cleared
= cpu_to_le64(bitmap
->events_cleared
);
499 sb
->state
= cpu_to_le32(bitmap
->flags
);
500 /* Just in case these have been changed via sysfs: */
501 sb
->daemon_sleep
= cpu_to_le32(bitmap
->mddev
->bitmap_info
.daemon_sleep
/HZ
);
502 sb
->write_behind
= cpu_to_le32(bitmap
->mddev
->bitmap_info
.max_write_behind
);
503 kunmap_atomic(sb
, KM_USER0
);
504 write_page(bitmap
, bitmap
->sb_page
, 1);
507 /* print out the bitmap file superblock */
508 void bitmap_print_sb(struct bitmap
*bitmap
)
512 if (!bitmap
|| !bitmap
->sb_page
)
514 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
515 printk(KERN_DEBUG
"%s: bitmap file superblock:\n", bmname(bitmap
));
516 printk(KERN_DEBUG
" magic: %08x\n", le32_to_cpu(sb
->magic
));
517 printk(KERN_DEBUG
" version: %d\n", le32_to_cpu(sb
->version
));
518 printk(KERN_DEBUG
" uuid: %08x.%08x.%08x.%08x\n",
519 *(__u32
*)(sb
->uuid
+0),
520 *(__u32
*)(sb
->uuid
+4),
521 *(__u32
*)(sb
->uuid
+8),
522 *(__u32
*)(sb
->uuid
+12));
523 printk(KERN_DEBUG
" events: %llu\n",
524 (unsigned long long) le64_to_cpu(sb
->events
));
525 printk(KERN_DEBUG
"events cleared: %llu\n",
526 (unsigned long long) le64_to_cpu(sb
->events_cleared
));
527 printk(KERN_DEBUG
" state: %08x\n", le32_to_cpu(sb
->state
));
528 printk(KERN_DEBUG
" chunksize: %d B\n", le32_to_cpu(sb
->chunksize
));
529 printk(KERN_DEBUG
" daemon sleep: %ds\n", le32_to_cpu(sb
->daemon_sleep
));
530 printk(KERN_DEBUG
" sync size: %llu KB\n",
531 (unsigned long long)le64_to_cpu(sb
->sync_size
)/2);
532 printk(KERN_DEBUG
"max write behind: %d\n", le32_to_cpu(sb
->write_behind
));
533 kunmap_atomic(sb
, KM_USER0
);
540 * This function is somewhat the reverse of bitmap_read_sb. bitmap_read_sb
541 * reads and verifies the on-disk bitmap superblock and populates bitmap_info.
542 * This function verifies 'bitmap_info' and populates the on-disk bitmap
543 * structure, which is to be written to disk.
545 * Returns: 0 on success, -Exxx on error
547 static int bitmap_new_disk_sb(struct bitmap
*bitmap
)
550 unsigned long chunksize
, daemon_sleep
, write_behind
;
553 bitmap
->sb_page
= alloc_page(GFP_KERNEL
);
554 if (IS_ERR(bitmap
->sb_page
)) {
555 err
= PTR_ERR(bitmap
->sb_page
);
556 bitmap
->sb_page
= NULL
;
559 bitmap
->sb_page
->index
= 0;
561 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
563 sb
->magic
= cpu_to_le32(BITMAP_MAGIC
);
564 sb
->version
= cpu_to_le32(BITMAP_MAJOR_HI
);
566 chunksize
= bitmap
->mddev
->bitmap_info
.chunksize
;
568 if (!is_power_of_2(chunksize
)) {
569 kunmap_atomic(sb
, KM_USER0
);
570 printk(KERN_ERR
"bitmap chunksize not a power of 2\n");
573 sb
->chunksize
= cpu_to_le32(chunksize
);
575 daemon_sleep
= bitmap
->mddev
->bitmap_info
.daemon_sleep
;
577 (daemon_sleep
< 1) || (daemon_sleep
> MAX_SCHEDULE_TIMEOUT
)) {
578 printk(KERN_INFO
"Choosing daemon_sleep default (5 sec)\n");
579 daemon_sleep
= 5 * HZ
;
581 sb
->daemon_sleep
= cpu_to_le32(daemon_sleep
);
582 bitmap
->mddev
->bitmap_info
.daemon_sleep
= daemon_sleep
;
585 * FIXME: write_behind for RAID1. If not specified, what
586 * is a good choice? We choose COUNTER_MAX / 2 arbitrarily.
588 write_behind
= bitmap
->mddev
->bitmap_info
.max_write_behind
;
589 if (write_behind
> COUNTER_MAX
)
590 write_behind
= COUNTER_MAX
/ 2;
591 sb
->write_behind
= cpu_to_le32(write_behind
);
592 bitmap
->mddev
->bitmap_info
.max_write_behind
= write_behind
;
594 /* keep the array size field of the bitmap superblock up to date */
595 sb
->sync_size
= cpu_to_le64(bitmap
->mddev
->resync_max_sectors
);
597 memcpy(sb
->uuid
, bitmap
->mddev
->uuid
, 16);
599 bitmap
->flags
|= BITMAP_STALE
;
600 sb
->state
|= cpu_to_le32(BITMAP_STALE
);
601 bitmap
->events_cleared
= bitmap
->mddev
->events
;
602 sb
->events_cleared
= cpu_to_le64(bitmap
->mddev
->events
);
604 bitmap
->flags
|= BITMAP_HOSTENDIAN
;
605 sb
->version
= cpu_to_le32(BITMAP_MAJOR_HOSTENDIAN
);
607 kunmap_atomic(sb
, KM_USER0
);
612 /* read the superblock from the bitmap file and initialize some bitmap fields */
613 static int bitmap_read_sb(struct bitmap
*bitmap
)
617 unsigned long chunksize
, daemon_sleep
, write_behind
;
618 unsigned long long events
;
621 /* page 0 is the superblock, read it... */
623 loff_t isize
= i_size_read(bitmap
->file
->f_mapping
->host
);
624 int bytes
= isize
> PAGE_SIZE
? PAGE_SIZE
: isize
;
626 bitmap
->sb_page
= read_page(bitmap
->file
, 0, bitmap
, bytes
);
628 bitmap
->sb_page
= read_sb_page(bitmap
->mddev
,
629 bitmap
->mddev
->bitmap_info
.offset
,
631 0, sizeof(bitmap_super_t
));
633 if (IS_ERR(bitmap
->sb_page
)) {
634 err
= PTR_ERR(bitmap
->sb_page
);
635 bitmap
->sb_page
= NULL
;
639 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
641 chunksize
= le32_to_cpu(sb
->chunksize
);
642 daemon_sleep
= le32_to_cpu(sb
->daemon_sleep
) * HZ
;
643 write_behind
= le32_to_cpu(sb
->write_behind
);
645 /* verify that the bitmap-specific fields are valid */
646 if (sb
->magic
!= cpu_to_le32(BITMAP_MAGIC
))
647 reason
= "bad magic";
648 else if (le32_to_cpu(sb
->version
) < BITMAP_MAJOR_LO
||
649 le32_to_cpu(sb
->version
) > BITMAP_MAJOR_HI
)
650 reason
= "unrecognized superblock version";
651 else if (chunksize
< 512)
652 reason
= "bitmap chunksize too small";
653 else if (!is_power_of_2(chunksize
))
654 reason
= "bitmap chunksize not a power of 2";
655 else if (daemon_sleep
< 1 || daemon_sleep
> MAX_SCHEDULE_TIMEOUT
)
656 reason
= "daemon sleep period out of range";
657 else if (write_behind
> COUNTER_MAX
)
658 reason
= "write-behind limit out of range (0 - 16383)";
660 printk(KERN_INFO
"%s: invalid bitmap file superblock: %s\n",
661 bmname(bitmap
), reason
);
665 /* keep the array size field of the bitmap superblock up to date */
666 sb
->sync_size
= cpu_to_le64(bitmap
->mddev
->resync_max_sectors
);
668 if (!bitmap
->mddev
->persistent
)
672 * if we have a persistent array superblock, compare the
673 * bitmap's UUID and event counter to the mddev's
675 if (memcmp(sb
->uuid
, bitmap
->mddev
->uuid
, 16)) {
676 printk(KERN_INFO
"%s: bitmap superblock UUID mismatch\n",
680 events
= le64_to_cpu(sb
->events
);
681 if (events
< bitmap
->mddev
->events
) {
682 printk(KERN_INFO
"%s: bitmap file is out of date (%llu < %llu) "
683 "-- forcing full recovery\n", bmname(bitmap
), events
,
684 (unsigned long long) bitmap
->mddev
->events
);
685 sb
->state
|= cpu_to_le32(BITMAP_STALE
);
688 /* assign fields using values from superblock */
689 bitmap
->mddev
->bitmap_info
.chunksize
= chunksize
;
690 bitmap
->mddev
->bitmap_info
.daemon_sleep
= daemon_sleep
;
691 bitmap
->mddev
->bitmap_info
.max_write_behind
= write_behind
;
692 bitmap
->flags
|= le32_to_cpu(sb
->state
);
693 if (le32_to_cpu(sb
->version
) == BITMAP_MAJOR_HOSTENDIAN
)
694 bitmap
->flags
|= BITMAP_HOSTENDIAN
;
695 bitmap
->events_cleared
= le64_to_cpu(sb
->events_cleared
);
696 if (bitmap
->flags
& BITMAP_STALE
)
697 bitmap
->events_cleared
= bitmap
->mddev
->events
;
700 kunmap_atomic(sb
, KM_USER0
);
702 bitmap_print_sb(bitmap
);
706 enum bitmap_mask_op
{
711 /* record the state of the bitmap in the superblock. Return the old value */
712 static int bitmap_mask_state(struct bitmap
*bitmap
, enum bitmap_state bits
,
713 enum bitmap_mask_op op
)
719 spin_lock_irqsave(&bitmap
->lock
, flags
);
720 if (!bitmap
->sb_page
) { /* can't set the state */
721 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
724 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
725 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
726 old
= le32_to_cpu(sb
->state
) & bits
;
729 sb
->state
|= cpu_to_le32(bits
);
730 bitmap
->flags
|= bits
;
733 sb
->state
&= cpu_to_le32(~bits
);
734 bitmap
->flags
&= ~bits
;
739 kunmap_atomic(sb
, KM_USER0
);
744 * general bitmap file operations
750 * Use one bit per "chunk" (block set). We do the disk I/O on the bitmap
751 * file a page at a time. There's a superblock at the start of the file.
753 /* calculate the index of the page that contains this bit */
754 static inline unsigned long file_page_index(struct bitmap
*bitmap
, unsigned long chunk
)
756 if (!bitmap
->mddev
->bitmap_info
.external
)
757 chunk
+= sizeof(bitmap_super_t
) << 3;
758 return chunk
>> PAGE_BIT_SHIFT
;
761 /* calculate the (bit) offset of this bit within a page */
762 static inline unsigned long file_page_offset(struct bitmap
*bitmap
, unsigned long chunk
)
764 if (!bitmap
->mddev
->bitmap_info
.external
)
765 chunk
+= sizeof(bitmap_super_t
) << 3;
766 return chunk
& (PAGE_BITS
- 1);
770 * return a pointer to the page in the filemap that contains the given bit
772 * this lookup is complicated by the fact that the bitmap sb might be exactly
773 * 1 page (e.g., x86) or less than 1 page -- so the bitmap might start on page
776 static inline struct page
*filemap_get_page(struct bitmap
*bitmap
,
779 if (file_page_index(bitmap
, chunk
) >= bitmap
->file_pages
)
781 return bitmap
->filemap
[file_page_index(bitmap
, chunk
)
782 - file_page_index(bitmap
, 0)];
785 static void bitmap_file_unmap(struct bitmap
*bitmap
)
787 struct page
**map
, *sb_page
;
792 spin_lock_irqsave(&bitmap
->lock
, flags
);
793 map
= bitmap
->filemap
;
794 bitmap
->filemap
= NULL
;
795 attr
= bitmap
->filemap_attr
;
796 bitmap
->filemap_attr
= NULL
;
797 pages
= bitmap
->file_pages
;
798 bitmap
->file_pages
= 0;
799 sb_page
= bitmap
->sb_page
;
800 bitmap
->sb_page
= NULL
;
801 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
804 if (map
[pages
] != sb_page
) /* 0 is sb_page, release it below */
805 free_buffers(map
[pages
]);
810 free_buffers(sb_page
);
813 static void bitmap_file_put(struct bitmap
*bitmap
)
818 spin_lock_irqsave(&bitmap
->lock
, flags
);
821 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
824 wait_event(bitmap
->write_wait
,
825 atomic_read(&bitmap
->pending_writes
)==0);
826 bitmap_file_unmap(bitmap
);
829 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
830 invalidate_mapping_pages(inode
->i_mapping
, 0, -1);
836 * bitmap_file_kick - if an error occurs while manipulating the bitmap file
837 * then it is no longer reliable, so we stop using it and we mark the file
838 * as failed in the superblock
840 static void bitmap_file_kick(struct bitmap
*bitmap
)
842 char *path
, *ptr
= NULL
;
844 if (bitmap_mask_state(bitmap
, BITMAP_STALE
, MASK_SET
) == 0) {
845 bitmap_update_sb(bitmap
);
848 path
= kmalloc(PAGE_SIZE
, GFP_KERNEL
);
850 ptr
= d_path(&bitmap
->file
->f_path
, path
,
854 "%s: kicking failed bitmap file %s from array!\n",
855 bmname(bitmap
), IS_ERR(ptr
) ? "" : ptr
);
860 "%s: disabling internal bitmap due to errors\n",
864 bitmap_file_put(bitmap
);
869 enum bitmap_page_attr
{
870 BITMAP_PAGE_DIRTY
= 0, /* there are set bits that need to be synced */
871 BITMAP_PAGE_CLEAN
= 1, /* there are bits that might need to be cleared */
872 BITMAP_PAGE_NEEDWRITE
= 2, /* there are cleared bits that need to be synced */
875 static inline void set_page_attr(struct bitmap
*bitmap
, struct page
*page
,
876 enum bitmap_page_attr attr
)
878 __set_bit((page
->index
<<2) + attr
, bitmap
->filemap_attr
);
881 static inline void clear_page_attr(struct bitmap
*bitmap
, struct page
*page
,
882 enum bitmap_page_attr attr
)
884 __clear_bit((page
->index
<<2) + attr
, bitmap
->filemap_attr
);
887 static inline unsigned long test_page_attr(struct bitmap
*bitmap
, struct page
*page
,
888 enum bitmap_page_attr attr
)
890 return test_bit((page
->index
<<2) + attr
, bitmap
->filemap_attr
);
894 * bitmap_file_set_bit -- called before performing a write to the md device
895 * to set (and eventually sync) a particular bit in the bitmap file
897 * we set the bit immediately, then we record the page number so that
898 * when an unplug occurs, we can flush the dirty pages out to disk
900 static void bitmap_file_set_bit(struct bitmap
*bitmap
, sector_t block
)
905 unsigned long chunk
= block
>> CHUNK_BLOCK_SHIFT(bitmap
);
907 if (!bitmap
->filemap
)
910 page
= filemap_get_page(bitmap
, chunk
);
913 bit
= file_page_offset(bitmap
, chunk
);
916 kaddr
= kmap_atomic(page
, KM_USER0
);
917 if (bitmap
->flags
& BITMAP_HOSTENDIAN
)
920 __set_bit_le(bit
, kaddr
);
921 kunmap_atomic(kaddr
, KM_USER0
);
922 PRINTK("set file bit %lu page %lu\n", bit
, page
->index
);
923 /* record page number so it gets flushed to disk when unplug occurs */
924 set_page_attr(bitmap
, page
, BITMAP_PAGE_DIRTY
);
927 /* this gets called when the md device is ready to unplug its underlying
928 * (slave) device queues -- before we let any writes go down, we need to
929 * sync the dirty pages of the bitmap file to disk */
930 void bitmap_unplug(struct bitmap
*bitmap
)
932 unsigned long i
, flags
;
933 int dirty
, need_write
;
940 /* look at each page to see if there are any set bits that need to be
941 * flushed out to disk */
942 for (i
= 0; i
< bitmap
->file_pages
; i
++) {
943 spin_lock_irqsave(&bitmap
->lock
, flags
);
944 if (!bitmap
->filemap
) {
945 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
948 page
= bitmap
->filemap
[i
];
949 dirty
= test_page_attr(bitmap
, page
, BITMAP_PAGE_DIRTY
);
950 need_write
= test_page_attr(bitmap
, page
, BITMAP_PAGE_NEEDWRITE
);
951 clear_page_attr(bitmap
, page
, BITMAP_PAGE_DIRTY
);
952 clear_page_attr(bitmap
, page
, BITMAP_PAGE_NEEDWRITE
);
955 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
957 if (dirty
|| need_write
)
958 write_page(bitmap
, page
, 0);
960 if (wait
) { /* if any writes were performed, we need to wait on them */
962 wait_event(bitmap
->write_wait
,
963 atomic_read(&bitmap
->pending_writes
)==0);
965 md_super_wait(bitmap
->mddev
);
967 if (bitmap
->flags
& BITMAP_WRITE_ERROR
)
968 bitmap_file_kick(bitmap
);
970 EXPORT_SYMBOL(bitmap_unplug
);
972 static void bitmap_set_memory_bits(struct bitmap
*bitmap
, sector_t offset
, int needed
);
973 /* * bitmap_init_from_disk -- called at bitmap_create time to initialize
974 * the in-memory bitmap from the on-disk bitmap -- also, sets up the
975 * memory mapping of the bitmap file
977 * if there's no bitmap file, or if the bitmap file had been
978 * previously kicked from the array, we mark all the bits as
979 * 1's in order to cause a full resync.
981 * We ignore all bits for sectors that end earlier than 'start'.
982 * This is used when reading an out-of-date bitmap...
984 static int bitmap_init_from_disk(struct bitmap
*bitmap
, sector_t start
)
986 unsigned long i
, chunks
, index
, oldindex
, bit
;
987 struct page
*page
= NULL
, *oldpage
= NULL
;
988 unsigned long num_pages
, bit_cnt
= 0;
990 unsigned long bytes
, offset
;
995 chunks
= bitmap
->chunks
;
998 BUG_ON(!file
&& !bitmap
->mddev
->bitmap_info
.offset
);
1000 #ifdef INJECT_FAULTS_3
1003 outofdate
= bitmap
->flags
& BITMAP_STALE
;
1006 printk(KERN_INFO
"%s: bitmap file is out of date, doing full "
1007 "recovery\n", bmname(bitmap
));
1009 bytes
= DIV_ROUND_UP(bitmap
->chunks
, 8);
1010 if (!bitmap
->mddev
->bitmap_info
.external
)
1011 bytes
+= sizeof(bitmap_super_t
);
1013 num_pages
= DIV_ROUND_UP(bytes
, PAGE_SIZE
);
1015 if (file
&& i_size_read(file
->f_mapping
->host
) < bytes
) {
1016 printk(KERN_INFO
"%s: bitmap file too short %lu < %lu\n",
1018 (unsigned long) i_size_read(file
->f_mapping
->host
),
1025 bitmap
->filemap
= kmalloc(sizeof(struct page
*) * num_pages
, GFP_KERNEL
);
1026 if (!bitmap
->filemap
)
1029 /* We need 4 bits per page, rounded up to a multiple of sizeof(unsigned long) */
1030 bitmap
->filemap_attr
= kzalloc(
1031 roundup(DIV_ROUND_UP(num_pages
*4, 8), sizeof(unsigned long)),
1033 if (!bitmap
->filemap_attr
)
1038 for (i
= 0; i
< chunks
; i
++) {
1040 index
= file_page_index(bitmap
, i
);
1041 bit
= file_page_offset(bitmap
, i
);
1042 if (index
!= oldindex
) { /* this is a new page, read it in */
1044 /* unmap the old page, we're done with it */
1045 if (index
== num_pages
-1)
1046 count
= bytes
- index
* PAGE_SIZE
;
1049 if (index
== 0 && bitmap
->sb_page
) {
1051 * if we're here then the superblock page
1052 * contains some bits (PAGE_SIZE != sizeof sb)
1053 * we've already read it in, so just use it
1055 page
= bitmap
->sb_page
;
1056 offset
= sizeof(bitmap_super_t
);
1058 page
= read_sb_page(
1060 bitmap
->mddev
->bitmap_info
.offset
,
1064 page
= read_page(file
, index
, bitmap
, count
);
1067 page
= read_sb_page(bitmap
->mddev
,
1068 bitmap
->mddev
->bitmap_info
.offset
,
1073 if (IS_ERR(page
)) { /* read error */
1074 ret
= PTR_ERR(page
);
1081 bitmap
->filemap
[bitmap
->file_pages
++] = page
;
1082 bitmap
->last_page_size
= count
;
1086 * if bitmap is out of date, dirty the
1087 * whole page and write it out
1089 paddr
= kmap_atomic(page
, KM_USER0
);
1090 memset(paddr
+ offset
, 0xff,
1091 PAGE_SIZE
- offset
);
1092 kunmap_atomic(paddr
, KM_USER0
);
1093 write_page(bitmap
, page
, 1);
1096 if (bitmap
->flags
& BITMAP_WRITE_ERROR
)
1100 paddr
= kmap_atomic(page
, KM_USER0
);
1101 if (bitmap
->flags
& BITMAP_HOSTENDIAN
)
1102 b
= test_bit(bit
, paddr
);
1104 b
= test_bit_le(bit
, paddr
);
1105 kunmap_atomic(paddr
, KM_USER0
);
1107 /* if the disk bit is set, set the memory bit */
1108 int needed
= ((sector_t
)(i
+1) << (CHUNK_BLOCK_SHIFT(bitmap
))
1110 bitmap_set_memory_bits(bitmap
,
1111 (sector_t
)i
<< CHUNK_BLOCK_SHIFT(bitmap
),
1114 set_page_attr(bitmap
, page
, BITMAP_PAGE_CLEAN
);
1118 /* everything went OK */
1120 bitmap_mask_state(bitmap
, BITMAP_STALE
, MASK_UNSET
);
1122 if (bit_cnt
) { /* Kick recovery if any bits were set */
1123 set_bit(MD_RECOVERY_NEEDED
, &bitmap
->mddev
->recovery
);
1124 md_wakeup_thread(bitmap
->mddev
->thread
);
1127 printk(KERN_INFO
"%s: bitmap initialized from disk: "
1128 "read %lu/%lu pages, set %lu of %lu bits\n",
1129 bmname(bitmap
), bitmap
->file_pages
, num_pages
, bit_cnt
, chunks
);
1134 printk(KERN_INFO
"%s: bitmap initialisation failed: %d\n",
1135 bmname(bitmap
), ret
);
1139 void bitmap_write_all(struct bitmap
*bitmap
)
1141 /* We don't actually write all bitmap blocks here,
1142 * just flag them as needing to be written
1146 for (i
= 0; i
< bitmap
->file_pages
; i
++)
1147 set_page_attr(bitmap
, bitmap
->filemap
[i
],
1148 BITMAP_PAGE_NEEDWRITE
);
1151 static void bitmap_count_page(struct bitmap
*bitmap
, sector_t offset
, int inc
)
1153 sector_t chunk
= offset
>> CHUNK_BLOCK_SHIFT(bitmap
);
1154 unsigned long page
= chunk
>> PAGE_COUNTER_SHIFT
;
1155 bitmap
->bp
[page
].count
+= inc
;
1156 bitmap_checkfree(bitmap
, page
);
1158 static bitmap_counter_t
*bitmap_get_counter(struct bitmap
*bitmap
,
1159 sector_t offset
, sector_t
*blocks
,
1163 * bitmap daemon -- periodically wakes up to clean bits and flush pages
1167 void bitmap_daemon_work(mddev_t
*mddev
)
1169 struct bitmap
*bitmap
;
1171 unsigned long flags
;
1172 struct page
*page
= NULL
, *lastpage
= NULL
;
1176 /* Use a mutex to guard daemon_work against
1179 mutex_lock(&mddev
->bitmap_info
.mutex
);
1180 bitmap
= mddev
->bitmap
;
1181 if (bitmap
== NULL
) {
1182 mutex_unlock(&mddev
->bitmap_info
.mutex
);
1185 if (time_before(jiffies
, bitmap
->daemon_lastrun
1186 + bitmap
->mddev
->bitmap_info
.daemon_sleep
))
1189 bitmap
->daemon_lastrun
= jiffies
;
1190 if (bitmap
->allclean
) {
1191 bitmap
->mddev
->thread
->timeout
= MAX_SCHEDULE_TIMEOUT
;
1194 bitmap
->allclean
= 1;
1196 spin_lock_irqsave(&bitmap
->lock
, flags
);
1197 for (j
= 0; j
< bitmap
->chunks
; j
++) {
1198 bitmap_counter_t
*bmc
;
1199 if (!bitmap
->filemap
)
1200 /* error or shutdown */
1203 page
= filemap_get_page(bitmap
, j
);
1205 if (page
!= lastpage
) {
1206 /* skip this page unless it's marked as needing cleaning */
1207 if (!test_page_attr(bitmap
, page
, BITMAP_PAGE_CLEAN
)) {
1208 int need_write
= test_page_attr(bitmap
, page
,
1209 BITMAP_PAGE_NEEDWRITE
);
1211 clear_page_attr(bitmap
, page
, BITMAP_PAGE_NEEDWRITE
);
1213 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1215 write_page(bitmap
, page
, 0);
1216 bitmap
->allclean
= 0;
1218 spin_lock_irqsave(&bitmap
->lock
, flags
);
1219 j
|= (PAGE_BITS
- 1);
1223 /* grab the new page, sync and release the old */
1224 if (lastpage
!= NULL
) {
1225 if (test_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
)) {
1226 clear_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
);
1227 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1228 write_page(bitmap
, lastpage
, 0);
1230 set_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
);
1231 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1234 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1237 /* We are possibly going to clear some bits, so make
1238 * sure that events_cleared is up-to-date.
1240 if (bitmap
->need_sync
&&
1241 bitmap
->mddev
->bitmap_info
.external
== 0) {
1243 bitmap
->need_sync
= 0;
1244 sb
= kmap_atomic(bitmap
->sb_page
, KM_USER0
);
1245 sb
->events_cleared
=
1246 cpu_to_le64(bitmap
->events_cleared
);
1247 kunmap_atomic(sb
, KM_USER0
);
1248 write_page(bitmap
, bitmap
->sb_page
, 1);
1250 spin_lock_irqsave(&bitmap
->lock
, flags
);
1251 if (!bitmap
->need_sync
)
1252 clear_page_attr(bitmap
, page
, BITMAP_PAGE_CLEAN
);
1254 bmc
= bitmap_get_counter(bitmap
,
1255 (sector_t
)j
<< CHUNK_BLOCK_SHIFT(bitmap
),
1259 bitmap
->allclean
= 0;
1262 *bmc
= 1; /* maybe clear the bit next time */
1263 set_page_attr(bitmap
, page
, BITMAP_PAGE_CLEAN
);
1264 } else if (*bmc
== 1 && !bitmap
->need_sync
) {
1265 /* we can clear the bit */
1267 bitmap_count_page(bitmap
,
1268 (sector_t
)j
<< CHUNK_BLOCK_SHIFT(bitmap
),
1272 paddr
= kmap_atomic(page
, KM_USER0
);
1273 if (bitmap
->flags
& BITMAP_HOSTENDIAN
)
1274 clear_bit(file_page_offset(bitmap
, j
),
1278 file_page_offset(bitmap
,
1281 kunmap_atomic(paddr
, KM_USER0
);
1284 j
|= PAGE_COUNTER_MASK
;
1286 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1288 /* now sync the final page */
1289 if (lastpage
!= NULL
) {
1290 spin_lock_irqsave(&bitmap
->lock
, flags
);
1291 if (test_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
)) {
1292 clear_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
);
1293 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1294 write_page(bitmap
, lastpage
, 0);
1296 set_page_attr(bitmap
, lastpage
, BITMAP_PAGE_NEEDWRITE
);
1297 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1302 if (bitmap
->allclean
== 0)
1303 bitmap
->mddev
->thread
->timeout
=
1304 bitmap
->mddev
->bitmap_info
.daemon_sleep
;
1305 mutex_unlock(&mddev
->bitmap_info
.mutex
);
1308 static bitmap_counter_t
*bitmap_get_counter(struct bitmap
*bitmap
,
1309 sector_t offset
, sector_t
*blocks
,
1311 __releases(bitmap
->lock
)
1312 __acquires(bitmap
->lock
)
1314 /* If 'create', we might release the lock and reclaim it.
1315 * The lock must have been taken with interrupts enabled.
1316 * If !create, we don't release the lock.
1318 sector_t chunk
= offset
>> CHUNK_BLOCK_SHIFT(bitmap
);
1319 unsigned long page
= chunk
>> PAGE_COUNTER_SHIFT
;
1320 unsigned long pageoff
= (chunk
& PAGE_COUNTER_MASK
) << COUNTER_BYTE_SHIFT
;
1324 err
= bitmap_checkpage(bitmap
, page
, create
);
1326 if (bitmap
->bp
[page
].hijacked
||
1327 bitmap
->bp
[page
].map
== NULL
)
1328 csize
= ((sector_t
)1) << (CHUNK_BLOCK_SHIFT(bitmap
) +
1329 PAGE_COUNTER_SHIFT
- 1);
1331 csize
= ((sector_t
)1) << (CHUNK_BLOCK_SHIFT(bitmap
));
1332 *blocks
= csize
- (offset
& (csize
- 1));
1337 /* now locked ... */
1339 if (bitmap
->bp
[page
].hijacked
) { /* hijacked pointer */
1340 /* should we use the first or second counter field
1341 * of the hijacked pointer? */
1342 int hi
= (pageoff
> PAGE_COUNTER_MASK
);
1343 return &((bitmap_counter_t
*)
1344 &bitmap
->bp
[page
].map
)[hi
];
1345 } else /* page is allocated */
1346 return (bitmap_counter_t
*)
1347 &(bitmap
->bp
[page
].map
[pageoff
]);
1350 int bitmap_startwrite(struct bitmap
*bitmap
, sector_t offset
, unsigned long sectors
, int behind
)
1357 atomic_inc(&bitmap
->behind_writes
);
1358 bw
= atomic_read(&bitmap
->behind_writes
);
1359 if (bw
> bitmap
->behind_writes_used
)
1360 bitmap
->behind_writes_used
= bw
;
1362 PRINTK(KERN_DEBUG
"inc write-behind count %d/%d\n",
1363 bw
, bitmap
->max_write_behind
);
1368 bitmap_counter_t
*bmc
;
1370 spin_lock_irq(&bitmap
->lock
);
1371 bmc
= bitmap_get_counter(bitmap
, offset
, &blocks
, 1);
1373 spin_unlock_irq(&bitmap
->lock
);
1377 if (unlikely(COUNTER(*bmc
) == COUNTER_MAX
)) {
1378 DEFINE_WAIT(__wait
);
1379 /* note that it is safe to do the prepare_to_wait
1380 * after the test as long as we do it before dropping
1383 prepare_to_wait(&bitmap
->overflow_wait
, &__wait
,
1384 TASK_UNINTERRUPTIBLE
);
1385 spin_unlock_irq(&bitmap
->lock
);
1387 finish_wait(&bitmap
->overflow_wait
, &__wait
);
1393 bitmap_file_set_bit(bitmap
, offset
);
1394 bitmap_count_page(bitmap
, offset
, 1);
1402 spin_unlock_irq(&bitmap
->lock
);
1405 if (sectors
> blocks
)
1410 bitmap
->allclean
= 0;
1413 EXPORT_SYMBOL(bitmap_startwrite
);
1415 void bitmap_endwrite(struct bitmap
*bitmap
, sector_t offset
, unsigned long sectors
,
1416 int success
, int behind
)
1421 if (atomic_dec_and_test(&bitmap
->behind_writes
))
1422 wake_up(&bitmap
->behind_wait
);
1423 PRINTK(KERN_DEBUG
"dec write-behind count %d/%d\n",
1424 atomic_read(&bitmap
->behind_writes
), bitmap
->max_write_behind
);
1426 if (bitmap
->mddev
->degraded
)
1427 /* Never clear bits or update events_cleared when degraded */
1432 unsigned long flags
;
1433 bitmap_counter_t
*bmc
;
1435 spin_lock_irqsave(&bitmap
->lock
, flags
);
1436 bmc
= bitmap_get_counter(bitmap
, offset
, &blocks
, 0);
1438 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1443 bitmap
->events_cleared
< bitmap
->mddev
->events
) {
1444 bitmap
->events_cleared
= bitmap
->mddev
->events
;
1445 bitmap
->need_sync
= 1;
1446 sysfs_notify_dirent_safe(bitmap
->sysfs_can_clear
);
1449 if (!success
&& !NEEDED(*bmc
))
1450 *bmc
|= NEEDED_MASK
;
1452 if (COUNTER(*bmc
) == COUNTER_MAX
)
1453 wake_up(&bitmap
->overflow_wait
);
1457 set_page_attr(bitmap
,
1460 offset
>> CHUNK_BLOCK_SHIFT(bitmap
)),
1463 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1465 if (sectors
> blocks
)
1471 EXPORT_SYMBOL(bitmap_endwrite
);
1473 static int __bitmap_start_sync(struct bitmap
*bitmap
, sector_t offset
, sector_t
*blocks
,
1476 bitmap_counter_t
*bmc
;
1478 if (bitmap
== NULL
) {/* FIXME or bitmap set as 'failed' */
1480 return 1; /* always resync if no bitmap */
1482 spin_lock_irq(&bitmap
->lock
);
1483 bmc
= bitmap_get_counter(bitmap
, offset
, blocks
, 0);
1489 else if (NEEDED(*bmc
)) {
1491 if (!degraded
) { /* don't set/clear bits if degraded */
1492 *bmc
|= RESYNC_MASK
;
1493 *bmc
&= ~NEEDED_MASK
;
1497 spin_unlock_irq(&bitmap
->lock
);
1498 bitmap
->allclean
= 0;
1502 int bitmap_start_sync(struct bitmap
*bitmap
, sector_t offset
, sector_t
*blocks
,
1505 /* bitmap_start_sync must always report on multiples of whole
1506 * pages, otherwise resync (which is very PAGE_SIZE based) will
1508 * So call __bitmap_start_sync repeatedly (if needed) until
1509 * At least PAGE_SIZE>>9 blocks are covered.
1510 * Return the 'or' of the result.
1516 while (*blocks
< (PAGE_SIZE
>>9)) {
1517 rv
|= __bitmap_start_sync(bitmap
, offset
,
1518 &blocks1
, degraded
);
1524 EXPORT_SYMBOL(bitmap_start_sync
);
1526 void bitmap_end_sync(struct bitmap
*bitmap
, sector_t offset
, sector_t
*blocks
, int aborted
)
1528 bitmap_counter_t
*bmc
;
1529 unsigned long flags
;
1531 if (bitmap
== NULL
) {
1535 spin_lock_irqsave(&bitmap
->lock
, flags
);
1536 bmc
= bitmap_get_counter(bitmap
, offset
, blocks
, 0);
1541 *bmc
&= ~RESYNC_MASK
;
1543 if (!NEEDED(*bmc
) && aborted
)
1544 *bmc
|= NEEDED_MASK
;
1547 set_page_attr(bitmap
,
1548 filemap_get_page(bitmap
, offset
>> CHUNK_BLOCK_SHIFT(bitmap
)),
1553 spin_unlock_irqrestore(&bitmap
->lock
, flags
);
1554 bitmap
->allclean
= 0;
1556 EXPORT_SYMBOL(bitmap_end_sync
);
1558 void bitmap_close_sync(struct bitmap
*bitmap
)
1560 /* Sync has finished, and any bitmap chunks that weren't synced
1561 * properly have been aborted. It remains to us to clear the
1562 * RESYNC bit wherever it is still on
1564 sector_t sector
= 0;
1568 while (sector
< bitmap
->mddev
->resync_max_sectors
) {
1569 bitmap_end_sync(bitmap
, sector
, &blocks
, 0);
1573 EXPORT_SYMBOL(bitmap_close_sync
);
1575 void bitmap_cond_end_sync(struct bitmap
*bitmap
, sector_t sector
)
1583 bitmap
->last_end_sync
= jiffies
;
1586 if (time_before(jiffies
, (bitmap
->last_end_sync
1587 + bitmap
->mddev
->bitmap_info
.daemon_sleep
)))
1589 wait_event(bitmap
->mddev
->recovery_wait
,
1590 atomic_read(&bitmap
->mddev
->recovery_active
) == 0);
1592 bitmap
->mddev
->curr_resync_completed
= sector
;
1593 set_bit(MD_CHANGE_CLEAN
, &bitmap
->mddev
->flags
);
1594 sector
&= ~((1ULL << CHUNK_BLOCK_SHIFT(bitmap
)) - 1);
1596 while (s
< sector
&& s
< bitmap
->mddev
->resync_max_sectors
) {
1597 bitmap_end_sync(bitmap
, s
, &blocks
, 0);
1600 bitmap
->last_end_sync
= jiffies
;
1601 sysfs_notify(&bitmap
->mddev
->kobj
, NULL
, "sync_completed");
1603 EXPORT_SYMBOL(bitmap_cond_end_sync
);
1605 static void bitmap_set_memory_bits(struct bitmap
*bitmap
, sector_t offset
, int needed
)
1607 /* For each chunk covered by any of these sectors, set the
1608 * counter to 1 and set resync_needed. They should all
1609 * be 0 at this point
1613 bitmap_counter_t
*bmc
;
1614 spin_lock_irq(&bitmap
->lock
);
1615 bmc
= bitmap_get_counter(bitmap
, offset
, &secs
, 1);
1617 spin_unlock_irq(&bitmap
->lock
);
1622 *bmc
= 1 | (needed
? NEEDED_MASK
: 0);
1623 bitmap_count_page(bitmap
, offset
, 1);
1624 page
= filemap_get_page(bitmap
, offset
>> CHUNK_BLOCK_SHIFT(bitmap
));
1625 set_page_attr(bitmap
, page
, BITMAP_PAGE_CLEAN
);
1627 spin_unlock_irq(&bitmap
->lock
);
1628 bitmap
->allclean
= 0;
1631 /* dirty the memory and file bits for bitmap chunks "s" to "e" */
1632 void bitmap_dirty_bits(struct bitmap
*bitmap
, unsigned long s
, unsigned long e
)
1634 unsigned long chunk
;
1636 for (chunk
= s
; chunk
<= e
; chunk
++) {
1637 sector_t sec
= (sector_t
)chunk
<< CHUNK_BLOCK_SHIFT(bitmap
);
1638 bitmap_set_memory_bits(bitmap
, sec
, 1);
1639 bitmap_file_set_bit(bitmap
, sec
);
1640 if (sec
< bitmap
->mddev
->recovery_cp
)
1641 /* We are asserting that the array is dirty,
1642 * so move the recovery_cp address back so
1643 * that it is obvious that it is dirty
1645 bitmap
->mddev
->recovery_cp
= sec
;
1650 * flush out any pending updates
1652 void bitmap_flush(mddev_t
*mddev
)
1654 struct bitmap
*bitmap
= mddev
->bitmap
;
1657 if (!bitmap
) /* there was no bitmap */
1660 /* run the daemon_work three time to ensure everything is flushed
1663 sleep
= mddev
->bitmap_info
.daemon_sleep
* 2;
1664 bitmap
->daemon_lastrun
-= sleep
;
1665 bitmap_daemon_work(mddev
);
1666 bitmap
->daemon_lastrun
-= sleep
;
1667 bitmap_daemon_work(mddev
);
1668 bitmap
->daemon_lastrun
-= sleep
;
1669 bitmap_daemon_work(mddev
);
1670 bitmap_update_sb(bitmap
);
1674 * free memory that was allocated
1676 static void bitmap_free(struct bitmap
*bitmap
)
1678 unsigned long k
, pages
;
1679 struct bitmap_page
*bp
;
1681 if (!bitmap
) /* there was no bitmap */
1684 /* release the bitmap file and kill the daemon */
1685 bitmap_file_put(bitmap
);
1688 pages
= bitmap
->pages
;
1690 /* free all allocated memory */
1692 if (bp
) /* deallocate the page memory */
1693 for (k
= 0; k
< pages
; k
++)
1694 if (bp
[k
].map
&& !bp
[k
].hijacked
)
1700 void bitmap_destroy(mddev_t
*mddev
)
1702 struct bitmap
*bitmap
= mddev
->bitmap
;
1704 if (!bitmap
) /* there was no bitmap */
1707 mutex_lock(&mddev
->bitmap_info
.mutex
);
1708 mddev
->bitmap
= NULL
; /* disconnect from the md device */
1709 mutex_unlock(&mddev
->bitmap_info
.mutex
);
1711 mddev
->thread
->timeout
= MAX_SCHEDULE_TIMEOUT
;
1713 if (bitmap
->sysfs_can_clear
)
1714 sysfs_put(bitmap
->sysfs_can_clear
);
1716 bitmap_free(bitmap
);
1720 * initialize the bitmap structure
1721 * if this returns an error, bitmap_destroy must be called to do clean up
1723 int bitmap_create(mddev_t
*mddev
)
1725 struct bitmap
*bitmap
;
1726 sector_t blocks
= mddev
->resync_max_sectors
;
1727 unsigned long chunks
;
1728 unsigned long pages
;
1729 struct file
*file
= mddev
->bitmap_info
.file
;
1731 struct sysfs_dirent
*bm
= NULL
;
1733 BUILD_BUG_ON(sizeof(bitmap_super_t
) != 256);
1736 && !mddev
->bitmap_info
.offset
) /* bitmap disabled, nothing to do */
1739 BUG_ON(file
&& mddev
->bitmap_info
.offset
);
1741 bitmap
= kzalloc(sizeof(*bitmap
), GFP_KERNEL
);
1745 spin_lock_init(&bitmap
->lock
);
1746 atomic_set(&bitmap
->pending_writes
, 0);
1747 init_waitqueue_head(&bitmap
->write_wait
);
1748 init_waitqueue_head(&bitmap
->overflow_wait
);
1749 init_waitqueue_head(&bitmap
->behind_wait
);
1751 bitmap
->mddev
= mddev
;
1754 bm
= sysfs_get_dirent(mddev
->kobj
.sd
, NULL
, "bitmap");
1756 bitmap
->sysfs_can_clear
= sysfs_get_dirent(bm
, NULL
, "can_clear");
1759 bitmap
->sysfs_can_clear
= NULL
;
1761 bitmap
->file
= file
;
1764 /* As future accesses to this file will use bmap,
1765 * and bypass the page cache, we must sync the file
1770 /* read superblock from bitmap file (this sets mddev->bitmap_info.chunksize) */
1771 if (!mddev
->bitmap_info
.external
) {
1773 * If 'MD_ARRAY_FIRST_USE' is set, then device-mapper is
1774 * instructing us to create a new on-disk bitmap instance.
1776 if (test_and_clear_bit(MD_ARRAY_FIRST_USE
, &mddev
->flags
))
1777 err
= bitmap_new_disk_sb(bitmap
);
1779 err
= bitmap_read_sb(bitmap
);
1782 if (mddev
->bitmap_info
.chunksize
== 0 ||
1783 mddev
->bitmap_info
.daemon_sleep
== 0)
1784 /* chunksize and time_base need to be
1791 bitmap
->daemon_lastrun
= jiffies
;
1792 bitmap
->chunkshift
= ffz(~mddev
->bitmap_info
.chunksize
);
1794 /* now that chunksize and chunkshift are set, we can use these macros */
1795 chunks
= (blocks
+ CHUNK_BLOCK_RATIO(bitmap
) - 1) >>
1796 CHUNK_BLOCK_SHIFT(bitmap
);
1797 pages
= (chunks
+ PAGE_COUNTER_RATIO
- 1) / PAGE_COUNTER_RATIO
;
1801 bitmap
->chunks
= chunks
;
1802 bitmap
->pages
= pages
;
1803 bitmap
->missing_pages
= pages
;
1805 #ifdef INJECT_FATAL_FAULT_1
1808 bitmap
->bp
= kzalloc(pages
* sizeof(*bitmap
->bp
), GFP_KERNEL
);
1814 printk(KERN_INFO
"created bitmap (%lu pages) for device %s\n",
1815 pages
, bmname(bitmap
));
1817 mddev
->bitmap
= bitmap
;
1820 return (bitmap
->flags
& BITMAP_WRITE_ERROR
) ? -EIO
: 0;
1823 bitmap_free(bitmap
);
1827 int bitmap_load(mddev_t
*mddev
)
1831 sector_t sector
= 0;
1832 struct bitmap
*bitmap
= mddev
->bitmap
;
1837 /* Clear out old bitmap info first: Either there is none, or we
1838 * are resuming after someone else has possibly changed things,
1839 * so we should forget old cached info.
1840 * All chunks should be clean, but some might need_sync.
1842 while (sector
< mddev
->resync_max_sectors
) {
1844 bitmap_start_sync(bitmap
, sector
, &blocks
, 0);
1847 bitmap_close_sync(bitmap
);
1849 if (mddev
->degraded
== 0
1850 || bitmap
->events_cleared
== mddev
->events
)
1851 /* no need to keep dirty bits to optimise a
1852 * re-add of a missing device */
1853 start
= mddev
->recovery_cp
;
1855 err
= bitmap_init_from_disk(bitmap
, start
);
1860 mddev
->thread
->timeout
= mddev
->bitmap_info
.daemon_sleep
;
1861 md_wakeup_thread(mddev
->thread
);
1863 bitmap_update_sb(bitmap
);
1865 if (bitmap
->flags
& BITMAP_WRITE_ERROR
)
1870 EXPORT_SYMBOL_GPL(bitmap_load
);
1873 location_show(mddev_t
*mddev
, char *page
)
1876 if (mddev
->bitmap_info
.file
)
1877 len
= sprintf(page
, "file");
1878 else if (mddev
->bitmap_info
.offset
)
1879 len
= sprintf(page
, "%+lld", (long long)mddev
->bitmap_info
.offset
);
1881 len
= sprintf(page
, "none");
1882 len
+= sprintf(page
+len
, "\n");
1887 location_store(mddev_t
*mddev
, const char *buf
, size_t len
)
1891 if (!mddev
->pers
->quiesce
)
1893 if (mddev
->recovery
|| mddev
->sync_thread
)
1897 if (mddev
->bitmap
|| mddev
->bitmap_info
.file
||
1898 mddev
->bitmap_info
.offset
) {
1899 /* bitmap already configured. Only option is to clear it */
1900 if (strncmp(buf
, "none", 4) != 0)
1903 mddev
->pers
->quiesce(mddev
, 1);
1904 bitmap_destroy(mddev
);
1905 mddev
->pers
->quiesce(mddev
, 0);
1907 mddev
->bitmap_info
.offset
= 0;
1908 if (mddev
->bitmap_info
.file
) {
1909 struct file
*f
= mddev
->bitmap_info
.file
;
1910 mddev
->bitmap_info
.file
= NULL
;
1911 restore_bitmap_write_access(f
);
1915 /* No bitmap, OK to set a location */
1917 if (strncmp(buf
, "none", 4) == 0)
1918 /* nothing to be done */;
1919 else if (strncmp(buf
, "file:", 5) == 0) {
1920 /* Not supported yet */
1925 rv
= strict_strtoll(buf
+1, 10, &offset
);
1927 rv
= strict_strtoll(buf
, 10, &offset
);
1932 if (mddev
->bitmap_info
.external
== 0 &&
1933 mddev
->major_version
== 0 &&
1934 offset
!= mddev
->bitmap_info
.default_offset
)
1936 mddev
->bitmap_info
.offset
= offset
;
1938 mddev
->pers
->quiesce(mddev
, 1);
1939 rv
= bitmap_create(mddev
);
1941 bitmap_destroy(mddev
);
1942 mddev
->bitmap_info
.offset
= 0;
1944 mddev
->pers
->quiesce(mddev
, 0);
1950 if (!mddev
->external
) {
1951 /* Ensure new bitmap info is stored in
1952 * metadata promptly.
1954 set_bit(MD_CHANGE_DEVS
, &mddev
->flags
);
1955 md_wakeup_thread(mddev
->thread
);
1960 static struct md_sysfs_entry bitmap_location
=
1961 __ATTR(location
, S_IRUGO
|S_IWUSR
, location_show
, location_store
);
1964 timeout_show(mddev_t
*mddev
, char *page
)
1967 unsigned long secs
= mddev
->bitmap_info
.daemon_sleep
/ HZ
;
1968 unsigned long jifs
= mddev
->bitmap_info
.daemon_sleep
% HZ
;
1970 len
= sprintf(page
, "%lu", secs
);
1972 len
+= sprintf(page
+len
, ".%03u", jiffies_to_msecs(jifs
));
1973 len
+= sprintf(page
+len
, "\n");
1978 timeout_store(mddev_t
*mddev
, const char *buf
, size_t len
)
1980 /* timeout can be set at any time */
1981 unsigned long timeout
;
1982 int rv
= strict_strtoul_scaled(buf
, &timeout
, 4);
1986 /* just to make sure we don't overflow... */
1987 if (timeout
>= LONG_MAX
/ HZ
)
1990 timeout
= timeout
* HZ
/ 10000;
1992 if (timeout
>= MAX_SCHEDULE_TIMEOUT
)
1993 timeout
= MAX_SCHEDULE_TIMEOUT
-1;
1996 mddev
->bitmap_info
.daemon_sleep
= timeout
;
1997 if (mddev
->thread
) {
1998 /* if thread->timeout is MAX_SCHEDULE_TIMEOUT, then
1999 * the bitmap is all clean and we don't need to
2000 * adjust the timeout right now
2002 if (mddev
->thread
->timeout
< MAX_SCHEDULE_TIMEOUT
) {
2003 mddev
->thread
->timeout
= timeout
;
2004 md_wakeup_thread(mddev
->thread
);
2010 static struct md_sysfs_entry bitmap_timeout
=
2011 __ATTR(time_base
, S_IRUGO
|S_IWUSR
, timeout_show
, timeout_store
);
2014 backlog_show(mddev_t
*mddev
, char *page
)
2016 return sprintf(page
, "%lu\n", mddev
->bitmap_info
.max_write_behind
);
2020 backlog_store(mddev_t
*mddev
, const char *buf
, size_t len
)
2022 unsigned long backlog
;
2023 int rv
= strict_strtoul(buf
, 10, &backlog
);
2026 if (backlog
> COUNTER_MAX
)
2028 mddev
->bitmap_info
.max_write_behind
= backlog
;
2032 static struct md_sysfs_entry bitmap_backlog
=
2033 __ATTR(backlog
, S_IRUGO
|S_IWUSR
, backlog_show
, backlog_store
);
2036 chunksize_show(mddev_t
*mddev
, char *page
)
2038 return sprintf(page
, "%lu\n", mddev
->bitmap_info
.chunksize
);
2042 chunksize_store(mddev_t
*mddev
, const char *buf
, size_t len
)
2044 /* Can only be changed when no bitmap is active */
2046 unsigned long csize
;
2049 rv
= strict_strtoul(buf
, 10, &csize
);
2053 !is_power_of_2(csize
))
2055 mddev
->bitmap_info
.chunksize
= csize
;
2059 static struct md_sysfs_entry bitmap_chunksize
=
2060 __ATTR(chunksize
, S_IRUGO
|S_IWUSR
, chunksize_show
, chunksize_store
);
2062 static ssize_t
metadata_show(mddev_t
*mddev
, char *page
)
2064 return sprintf(page
, "%s\n", (mddev
->bitmap_info
.external
2065 ? "external" : "internal"));
2068 static ssize_t
metadata_store(mddev_t
*mddev
, const char *buf
, size_t len
)
2070 if (mddev
->bitmap
||
2071 mddev
->bitmap_info
.file
||
2072 mddev
->bitmap_info
.offset
)
2074 if (strncmp(buf
, "external", 8) == 0)
2075 mddev
->bitmap_info
.external
= 1;
2076 else if (strncmp(buf
, "internal", 8) == 0)
2077 mddev
->bitmap_info
.external
= 0;
2083 static struct md_sysfs_entry bitmap_metadata
=
2084 __ATTR(metadata
, S_IRUGO
|S_IWUSR
, metadata_show
, metadata_store
);
2086 static ssize_t
can_clear_show(mddev_t
*mddev
, char *page
)
2090 len
= sprintf(page
, "%s\n", (mddev
->bitmap
->need_sync
?
2093 len
= sprintf(page
, "\n");
2097 static ssize_t
can_clear_store(mddev_t
*mddev
, const char *buf
, size_t len
)
2099 if (mddev
->bitmap
== NULL
)
2101 if (strncmp(buf
, "false", 5) == 0)
2102 mddev
->bitmap
->need_sync
= 1;
2103 else if (strncmp(buf
, "true", 4) == 0) {
2104 if (mddev
->degraded
)
2106 mddev
->bitmap
->need_sync
= 0;
2112 static struct md_sysfs_entry bitmap_can_clear
=
2113 __ATTR(can_clear
, S_IRUGO
|S_IWUSR
, can_clear_show
, can_clear_store
);
2116 behind_writes_used_show(mddev_t
*mddev
, char *page
)
2118 if (mddev
->bitmap
== NULL
)
2119 return sprintf(page
, "0\n");
2120 return sprintf(page
, "%lu\n",
2121 mddev
->bitmap
->behind_writes_used
);
2125 behind_writes_used_reset(mddev_t
*mddev
, const char *buf
, size_t len
)
2128 mddev
->bitmap
->behind_writes_used
= 0;
2132 static struct md_sysfs_entry max_backlog_used
=
2133 __ATTR(max_backlog_used
, S_IRUGO
| S_IWUSR
,
2134 behind_writes_used_show
, behind_writes_used_reset
);
2136 static struct attribute
*md_bitmap_attrs
[] = {
2137 &bitmap_location
.attr
,
2138 &bitmap_timeout
.attr
,
2139 &bitmap_backlog
.attr
,
2140 &bitmap_chunksize
.attr
,
2141 &bitmap_metadata
.attr
,
2142 &bitmap_can_clear
.attr
,
2143 &max_backlog_used
.attr
,
2146 struct attribute_group md_bitmap_group
= {
2148 .attrs
= md_bitmap_attrs
,