at v3.3 56 kB view raw
1/* 2 * bitmap.c two-level bitmap (C) Peter T. Breuer (ptb@ot.uc3m.es) 2003 3 * 4 * bitmap_create - sets up the bitmap structure 5 * bitmap_destroy - destroys the bitmap structure 6 * 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 10 */ 11 12/* 13 * Still to do: 14 * 15 * flush after percent set rather than just time based. (maybe both). 16 */ 17 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> 29#include "md.h" 30#include "bitmap.h" 31 32static inline char *bmname(struct bitmap *bitmap) 33{ 34 return bitmap->mddev ? mdname(bitmap->mddev) : "mdX"; 35} 36 37/* 38 * just a placeholder - calls kmalloc for bitmap pages 39 */ 40static unsigned char *bitmap_alloc_page(struct bitmap *bitmap) 41{ 42 unsigned char *page; 43 44 page = kzalloc(PAGE_SIZE, GFP_NOIO); 45 if (!page) 46 printk("%s: bitmap_alloc_page FAILED\n", bmname(bitmap)); 47 else 48 pr_debug("%s: bitmap_alloc_page: allocated page at %p\n", 49 bmname(bitmap), page); 50 return page; 51} 52 53/* 54 * for now just a placeholder -- just calls kfree for bitmap pages 55 */ 56static void bitmap_free_page(struct bitmap *bitmap, unsigned char *page) 57{ 58 pr_debug("%s: bitmap_free_page: free page %p\n", bmname(bitmap), page); 59 kfree(page); 60} 61 62/* 63 * check a page and, if necessary, allocate it (or hijack it if the alloc fails) 64 * 65 * 1) check to see if this page is allocated, if it's not then try to alloc 66 * 2) if the alloc fails, set the page's hijacked flag so we'll use the 67 * page pointer directly as a counter 68 * 69 * if we find our page, we increment the page's refcount so that it stays 70 * allocated while we're using it 71 */ 72static int bitmap_checkpage(struct bitmap *bitmap, 73 unsigned long page, int create) 74__releases(bitmap->lock) 75__acquires(bitmap->lock) 76{ 77 unsigned char *mappage; 78 79 if (page >= bitmap->pages) { 80 /* This can happen if bitmap_start_sync goes beyond 81 * End-of-device while looking for a whole page. 82 * It is harmless. 83 */ 84 return -EINVAL; 85 } 86 87 if (bitmap->bp[page].hijacked) /* it's hijacked, don't try to alloc */ 88 return 0; 89 90 if (bitmap->bp[page].map) /* page is already allocated, just return */ 91 return 0; 92 93 if (!create) 94 return -ENOENT; 95 96 /* this page has not been allocated yet */ 97 98 spin_unlock_irq(&bitmap->lock); 99 mappage = bitmap_alloc_page(bitmap); 100 spin_lock_irq(&bitmap->lock); 101 102 if (mappage == NULL) { 103 pr_debug("%s: bitmap map page allocation failed, hijacking\n", 104 bmname(bitmap)); 105 /* failed - set the hijacked flag so that we can use the 106 * pointer as a counter */ 107 if (!bitmap->bp[page].map) 108 bitmap->bp[page].hijacked = 1; 109 } else if (bitmap->bp[page].map || 110 bitmap->bp[page].hijacked) { 111 /* somebody beat us to getting the page */ 112 bitmap_free_page(bitmap, mappage); 113 return 0; 114 } else { 115 116 /* no page was in place and we have one, so install it */ 117 118 bitmap->bp[page].map = mappage; 119 bitmap->missing_pages--; 120 } 121 return 0; 122} 123 124/* if page is completely empty, put it back on the free list, or dealloc it */ 125/* if page was hijacked, unmark the flag so it might get alloced next time */ 126/* Note: lock should be held when calling this */ 127static void bitmap_checkfree(struct bitmap *bitmap, unsigned long page) 128{ 129 char *ptr; 130 131 if (bitmap->bp[page].count) /* page is still busy */ 132 return; 133 134 /* page is no longer in use, it can be released */ 135 136 if (bitmap->bp[page].hijacked) { /* page was hijacked, undo this now */ 137 bitmap->bp[page].hijacked = 0; 138 bitmap->bp[page].map = NULL; 139 } else { 140 /* normal case, free the page */ 141 ptr = bitmap->bp[page].map; 142 bitmap->bp[page].map = NULL; 143 bitmap->missing_pages++; 144 bitmap_free_page(bitmap, ptr); 145 } 146} 147 148/* 149 * bitmap file handling - read and write the bitmap file and its superblock 150 */ 151 152/* 153 * basic page I/O operations 154 */ 155 156/* IO operations when bitmap is stored near all superblocks */ 157static struct page *read_sb_page(struct mddev *mddev, loff_t offset, 158 struct page *page, 159 unsigned long index, int size) 160{ 161 /* choose a good rdev and read the page from there */ 162 163 struct md_rdev *rdev; 164 sector_t target; 165 int did_alloc = 0; 166 167 if (!page) { 168 page = alloc_page(GFP_KERNEL); 169 if (!page) 170 return ERR_PTR(-ENOMEM); 171 did_alloc = 1; 172 } 173 174 list_for_each_entry(rdev, &mddev->disks, same_set) { 175 if (! test_bit(In_sync, &rdev->flags) 176 || test_bit(Faulty, &rdev->flags)) 177 continue; 178 179 target = offset + index * (PAGE_SIZE/512); 180 181 if (sync_page_io(rdev, target, 182 roundup(size, bdev_logical_block_size(rdev->bdev)), 183 page, READ, true)) { 184 page->index = index; 185 attach_page_buffers(page, NULL); /* so that free_buffer will 186 * quietly no-op */ 187 return page; 188 } 189 } 190 if (did_alloc) 191 put_page(page); 192 return ERR_PTR(-EIO); 193 194} 195 196static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev) 197{ 198 /* Iterate the disks of an mddev, using rcu to protect access to the 199 * linked list, and raising the refcount of devices we return to ensure 200 * they don't disappear while in use. 201 * As devices are only added or removed when raid_disk is < 0 and 202 * nr_pending is 0 and In_sync is clear, the entries we return will 203 * still be in the same position on the list when we re-enter 204 * list_for_each_continue_rcu. 205 */ 206 struct list_head *pos; 207 rcu_read_lock(); 208 if (rdev == NULL) 209 /* start at the beginning */ 210 pos = &mddev->disks; 211 else { 212 /* release the previous rdev and start from there. */ 213 rdev_dec_pending(rdev, mddev); 214 pos = &rdev->same_set; 215 } 216 list_for_each_continue_rcu(pos, &mddev->disks) { 217 rdev = list_entry(pos, struct md_rdev, same_set); 218 if (rdev->raid_disk >= 0 && 219 !test_bit(Faulty, &rdev->flags)) { 220 /* this is a usable devices */ 221 atomic_inc(&rdev->nr_pending); 222 rcu_read_unlock(); 223 return rdev; 224 } 225 } 226 rcu_read_unlock(); 227 return NULL; 228} 229 230static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) 231{ 232 struct md_rdev *rdev = NULL; 233 struct block_device *bdev; 234 struct mddev *mddev = bitmap->mddev; 235 236 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) { 237 int size = PAGE_SIZE; 238 loff_t offset = mddev->bitmap_info.offset; 239 240 bdev = (rdev->meta_bdev) ? rdev->meta_bdev : rdev->bdev; 241 242 if (page->index == bitmap->file_pages-1) 243 size = roundup(bitmap->last_page_size, 244 bdev_logical_block_size(bdev)); 245 /* Just make sure we aren't corrupting data or 246 * metadata 247 */ 248 if (mddev->external) { 249 /* Bitmap could be anywhere. */ 250 if (rdev->sb_start + offset + (page->index 251 * (PAGE_SIZE/512)) 252 > rdev->data_offset 253 && 254 rdev->sb_start + offset 255 < (rdev->data_offset + mddev->dev_sectors 256 + (PAGE_SIZE/512))) 257 goto bad_alignment; 258 } else if (offset < 0) { 259 /* DATA BITMAP METADATA */ 260 if (offset 261 + (long)(page->index * (PAGE_SIZE/512)) 262 + size/512 > 0) 263 /* bitmap runs in to metadata */ 264 goto bad_alignment; 265 if (rdev->data_offset + mddev->dev_sectors 266 > rdev->sb_start + offset) 267 /* data runs in to bitmap */ 268 goto bad_alignment; 269 } else if (rdev->sb_start < rdev->data_offset) { 270 /* METADATA BITMAP DATA */ 271 if (rdev->sb_start 272 + offset 273 + page->index*(PAGE_SIZE/512) + size/512 274 > rdev->data_offset) 275 /* bitmap runs in to data */ 276 goto bad_alignment; 277 } else { 278 /* DATA METADATA BITMAP - no problems */ 279 } 280 md_super_write(mddev, rdev, 281 rdev->sb_start + offset 282 + page->index * (PAGE_SIZE/512), 283 size, 284 page); 285 } 286 287 if (wait) 288 md_super_wait(mddev); 289 return 0; 290 291 bad_alignment: 292 return -EINVAL; 293} 294 295static void bitmap_file_kick(struct bitmap *bitmap); 296/* 297 * write out a page to a file 298 */ 299static void write_page(struct bitmap *bitmap, struct page *page, int wait) 300{ 301 struct buffer_head *bh; 302 303 if (bitmap->file == NULL) { 304 switch (write_sb_page(bitmap, page, wait)) { 305 case -EINVAL: 306 bitmap->flags |= BITMAP_WRITE_ERROR; 307 } 308 } else { 309 310 bh = page_buffers(page); 311 312 while (bh && bh->b_blocknr) { 313 atomic_inc(&bitmap->pending_writes); 314 set_buffer_locked(bh); 315 set_buffer_mapped(bh); 316 submit_bh(WRITE | REQ_SYNC, bh); 317 bh = bh->b_this_page; 318 } 319 320 if (wait) 321 wait_event(bitmap->write_wait, 322 atomic_read(&bitmap->pending_writes)==0); 323 } 324 if (bitmap->flags & BITMAP_WRITE_ERROR) 325 bitmap_file_kick(bitmap); 326} 327 328static void end_bitmap_write(struct buffer_head *bh, int uptodate) 329{ 330 struct bitmap *bitmap = bh->b_private; 331 unsigned long flags; 332 333 if (!uptodate) { 334 spin_lock_irqsave(&bitmap->lock, flags); 335 bitmap->flags |= BITMAP_WRITE_ERROR; 336 spin_unlock_irqrestore(&bitmap->lock, flags); 337 } 338 if (atomic_dec_and_test(&bitmap->pending_writes)) 339 wake_up(&bitmap->write_wait); 340} 341 342/* copied from buffer.c */ 343static void 344__clear_page_buffers(struct page *page) 345{ 346 ClearPagePrivate(page); 347 set_page_private(page, 0); 348 page_cache_release(page); 349} 350static void free_buffers(struct page *page) 351{ 352 struct buffer_head *bh = page_buffers(page); 353 354 while (bh) { 355 struct buffer_head *next = bh->b_this_page; 356 free_buffer_head(bh); 357 bh = next; 358 } 359 __clear_page_buffers(page); 360 put_page(page); 361} 362 363/* read a page from a file. 364 * We both read the page, and attach buffers to the page to record the 365 * address of each block (using bmap). These addresses will be used 366 * to write the block later, completely bypassing the filesystem. 367 * This usage is similar to how swap files are handled, and allows us 368 * to write to a file with no concerns of memory allocation failing. 369 */ 370static struct page *read_page(struct file *file, unsigned long index, 371 struct bitmap *bitmap, 372 unsigned long count) 373{ 374 struct page *page = NULL; 375 struct inode *inode = file->f_path.dentry->d_inode; 376 struct buffer_head *bh; 377 sector_t block; 378 379 pr_debug("read bitmap file (%dB @ %llu)\n", (int)PAGE_SIZE, 380 (unsigned long long)index << PAGE_SHIFT); 381 382 page = alloc_page(GFP_KERNEL); 383 if (!page) 384 page = ERR_PTR(-ENOMEM); 385 if (IS_ERR(page)) 386 goto out; 387 388 bh = alloc_page_buffers(page, 1<<inode->i_blkbits, 0); 389 if (!bh) { 390 put_page(page); 391 page = ERR_PTR(-ENOMEM); 392 goto out; 393 } 394 attach_page_buffers(page, bh); 395 block = index << (PAGE_SHIFT - inode->i_blkbits); 396 while (bh) { 397 if (count == 0) 398 bh->b_blocknr = 0; 399 else { 400 bh->b_blocknr = bmap(inode, block); 401 if (bh->b_blocknr == 0) { 402 /* Cannot use this file! */ 403 free_buffers(page); 404 page = ERR_PTR(-EINVAL); 405 goto out; 406 } 407 bh->b_bdev = inode->i_sb->s_bdev; 408 if (count < (1<<inode->i_blkbits)) 409 count = 0; 410 else 411 count -= (1<<inode->i_blkbits); 412 413 bh->b_end_io = end_bitmap_write; 414 bh->b_private = bitmap; 415 atomic_inc(&bitmap->pending_writes); 416 set_buffer_locked(bh); 417 set_buffer_mapped(bh); 418 submit_bh(READ, bh); 419 } 420 block++; 421 bh = bh->b_this_page; 422 } 423 page->index = index; 424 425 wait_event(bitmap->write_wait, 426 atomic_read(&bitmap->pending_writes)==0); 427 if (bitmap->flags & BITMAP_WRITE_ERROR) { 428 free_buffers(page); 429 page = ERR_PTR(-EIO); 430 } 431out: 432 if (IS_ERR(page)) 433 printk(KERN_ALERT "md: bitmap read error: (%dB @ %llu): %ld\n", 434 (int)PAGE_SIZE, 435 (unsigned long long)index << PAGE_SHIFT, 436 PTR_ERR(page)); 437 return page; 438} 439 440/* 441 * bitmap file superblock operations 442 */ 443 444/* update the event counter and sync the superblock to disk */ 445void bitmap_update_sb(struct bitmap *bitmap) 446{ 447 bitmap_super_t *sb; 448 unsigned long flags; 449 450 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */ 451 return; 452 if (bitmap->mddev->bitmap_info.external) 453 return; 454 spin_lock_irqsave(&bitmap->lock, flags); 455 if (!bitmap->sb_page) { /* no superblock */ 456 spin_unlock_irqrestore(&bitmap->lock, flags); 457 return; 458 } 459 spin_unlock_irqrestore(&bitmap->lock, flags); 460 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 461 sb->events = cpu_to_le64(bitmap->mddev->events); 462 if (bitmap->mddev->events < bitmap->events_cleared) 463 /* rocking back to read-only */ 464 bitmap->events_cleared = bitmap->mddev->events; 465 sb->events_cleared = cpu_to_le64(bitmap->events_cleared); 466 sb->state = cpu_to_le32(bitmap->flags); 467 /* Just in case these have been changed via sysfs: */ 468 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ); 469 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind); 470 kunmap_atomic(sb, KM_USER0); 471 write_page(bitmap, bitmap->sb_page, 1); 472} 473 474/* print out the bitmap file superblock */ 475void bitmap_print_sb(struct bitmap *bitmap) 476{ 477 bitmap_super_t *sb; 478 479 if (!bitmap || !bitmap->sb_page) 480 return; 481 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 482 printk(KERN_DEBUG "%s: bitmap file superblock:\n", bmname(bitmap)); 483 printk(KERN_DEBUG " magic: %08x\n", le32_to_cpu(sb->magic)); 484 printk(KERN_DEBUG " version: %d\n", le32_to_cpu(sb->version)); 485 printk(KERN_DEBUG " uuid: %08x.%08x.%08x.%08x\n", 486 *(__u32 *)(sb->uuid+0), 487 *(__u32 *)(sb->uuid+4), 488 *(__u32 *)(sb->uuid+8), 489 *(__u32 *)(sb->uuid+12)); 490 printk(KERN_DEBUG " events: %llu\n", 491 (unsigned long long) le64_to_cpu(sb->events)); 492 printk(KERN_DEBUG "events cleared: %llu\n", 493 (unsigned long long) le64_to_cpu(sb->events_cleared)); 494 printk(KERN_DEBUG " state: %08x\n", le32_to_cpu(sb->state)); 495 printk(KERN_DEBUG " chunksize: %d B\n", le32_to_cpu(sb->chunksize)); 496 printk(KERN_DEBUG " daemon sleep: %ds\n", le32_to_cpu(sb->daemon_sleep)); 497 printk(KERN_DEBUG " sync size: %llu KB\n", 498 (unsigned long long)le64_to_cpu(sb->sync_size)/2); 499 printk(KERN_DEBUG "max write behind: %d\n", le32_to_cpu(sb->write_behind)); 500 kunmap_atomic(sb, KM_USER0); 501} 502 503/* 504 * bitmap_new_disk_sb 505 * @bitmap 506 * 507 * This function is somewhat the reverse of bitmap_read_sb. bitmap_read_sb 508 * reads and verifies the on-disk bitmap superblock and populates bitmap_info. 509 * This function verifies 'bitmap_info' and populates the on-disk bitmap 510 * structure, which is to be written to disk. 511 * 512 * Returns: 0 on success, -Exxx on error 513 */ 514static int bitmap_new_disk_sb(struct bitmap *bitmap) 515{ 516 bitmap_super_t *sb; 517 unsigned long chunksize, daemon_sleep, write_behind; 518 int err = -EINVAL; 519 520 bitmap->sb_page = alloc_page(GFP_KERNEL); 521 if (IS_ERR(bitmap->sb_page)) { 522 err = PTR_ERR(bitmap->sb_page); 523 bitmap->sb_page = NULL; 524 return err; 525 } 526 bitmap->sb_page->index = 0; 527 528 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 529 530 sb->magic = cpu_to_le32(BITMAP_MAGIC); 531 sb->version = cpu_to_le32(BITMAP_MAJOR_HI); 532 533 chunksize = bitmap->mddev->bitmap_info.chunksize; 534 BUG_ON(!chunksize); 535 if (!is_power_of_2(chunksize)) { 536 kunmap_atomic(sb, KM_USER0); 537 printk(KERN_ERR "bitmap chunksize not a power of 2\n"); 538 return -EINVAL; 539 } 540 sb->chunksize = cpu_to_le32(chunksize); 541 542 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep; 543 if (!daemon_sleep || 544 (daemon_sleep < 1) || (daemon_sleep > MAX_SCHEDULE_TIMEOUT)) { 545 printk(KERN_INFO "Choosing daemon_sleep default (5 sec)\n"); 546 daemon_sleep = 5 * HZ; 547 } 548 sb->daemon_sleep = cpu_to_le32(daemon_sleep); 549 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; 550 551 /* 552 * FIXME: write_behind for RAID1. If not specified, what 553 * is a good choice? We choose COUNTER_MAX / 2 arbitrarily. 554 */ 555 write_behind = bitmap->mddev->bitmap_info.max_write_behind; 556 if (write_behind > COUNTER_MAX) 557 write_behind = COUNTER_MAX / 2; 558 sb->write_behind = cpu_to_le32(write_behind); 559 bitmap->mddev->bitmap_info.max_write_behind = write_behind; 560 561 /* keep the array size field of the bitmap superblock up to date */ 562 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); 563 564 memcpy(sb->uuid, bitmap->mddev->uuid, 16); 565 566 bitmap->flags |= BITMAP_STALE; 567 sb->state |= cpu_to_le32(BITMAP_STALE); 568 bitmap->events_cleared = bitmap->mddev->events; 569 sb->events_cleared = cpu_to_le64(bitmap->mddev->events); 570 571 bitmap->flags |= BITMAP_HOSTENDIAN; 572 sb->version = cpu_to_le32(BITMAP_MAJOR_HOSTENDIAN); 573 574 kunmap_atomic(sb, KM_USER0); 575 576 return 0; 577} 578 579/* read the superblock from the bitmap file and initialize some bitmap fields */ 580static int bitmap_read_sb(struct bitmap *bitmap) 581{ 582 char *reason = NULL; 583 bitmap_super_t *sb; 584 unsigned long chunksize, daemon_sleep, write_behind; 585 unsigned long long events; 586 int err = -EINVAL; 587 588 /* page 0 is the superblock, read it... */ 589 if (bitmap->file) { 590 loff_t isize = i_size_read(bitmap->file->f_mapping->host); 591 int bytes = isize > PAGE_SIZE ? PAGE_SIZE : isize; 592 593 bitmap->sb_page = read_page(bitmap->file, 0, bitmap, bytes); 594 } else { 595 bitmap->sb_page = read_sb_page(bitmap->mddev, 596 bitmap->mddev->bitmap_info.offset, 597 NULL, 598 0, sizeof(bitmap_super_t)); 599 } 600 if (IS_ERR(bitmap->sb_page)) { 601 err = PTR_ERR(bitmap->sb_page); 602 bitmap->sb_page = NULL; 603 return err; 604 } 605 606 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 607 608 chunksize = le32_to_cpu(sb->chunksize); 609 daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ; 610 write_behind = le32_to_cpu(sb->write_behind); 611 612 /* verify that the bitmap-specific fields are valid */ 613 if (sb->magic != cpu_to_le32(BITMAP_MAGIC)) 614 reason = "bad magic"; 615 else if (le32_to_cpu(sb->version) < BITMAP_MAJOR_LO || 616 le32_to_cpu(sb->version) > BITMAP_MAJOR_HI) 617 reason = "unrecognized superblock version"; 618 else if (chunksize < 512) 619 reason = "bitmap chunksize too small"; 620 else if (!is_power_of_2(chunksize)) 621 reason = "bitmap chunksize not a power of 2"; 622 else if (daemon_sleep < 1 || daemon_sleep > MAX_SCHEDULE_TIMEOUT) 623 reason = "daemon sleep period out of range"; 624 else if (write_behind > COUNTER_MAX) 625 reason = "write-behind limit out of range (0 - 16383)"; 626 if (reason) { 627 printk(KERN_INFO "%s: invalid bitmap file superblock: %s\n", 628 bmname(bitmap), reason); 629 goto out; 630 } 631 632 /* keep the array size field of the bitmap superblock up to date */ 633 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); 634 635 if (!bitmap->mddev->persistent) 636 goto success; 637 638 /* 639 * if we have a persistent array superblock, compare the 640 * bitmap's UUID and event counter to the mddev's 641 */ 642 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) { 643 printk(KERN_INFO "%s: bitmap superblock UUID mismatch\n", 644 bmname(bitmap)); 645 goto out; 646 } 647 events = le64_to_cpu(sb->events); 648 if (events < bitmap->mddev->events) { 649 printk(KERN_INFO "%s: bitmap file is out of date (%llu < %llu) " 650 "-- forcing full recovery\n", bmname(bitmap), events, 651 (unsigned long long) bitmap->mddev->events); 652 sb->state |= cpu_to_le32(BITMAP_STALE); 653 } 654success: 655 /* assign fields using values from superblock */ 656 bitmap->mddev->bitmap_info.chunksize = chunksize; 657 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; 658 bitmap->mddev->bitmap_info.max_write_behind = write_behind; 659 bitmap->flags |= le32_to_cpu(sb->state); 660 if (le32_to_cpu(sb->version) == BITMAP_MAJOR_HOSTENDIAN) 661 bitmap->flags |= BITMAP_HOSTENDIAN; 662 bitmap->events_cleared = le64_to_cpu(sb->events_cleared); 663 if (bitmap->flags & BITMAP_STALE) 664 bitmap->events_cleared = bitmap->mddev->events; 665 err = 0; 666out: 667 kunmap_atomic(sb, KM_USER0); 668 if (err) 669 bitmap_print_sb(bitmap); 670 return err; 671} 672 673enum bitmap_mask_op { 674 MASK_SET, 675 MASK_UNSET 676}; 677 678/* record the state of the bitmap in the superblock. Return the old value */ 679static int bitmap_mask_state(struct bitmap *bitmap, enum bitmap_state bits, 680 enum bitmap_mask_op op) 681{ 682 bitmap_super_t *sb; 683 unsigned long flags; 684 int old; 685 686 spin_lock_irqsave(&bitmap->lock, flags); 687 if (!bitmap->sb_page) { /* can't set the state */ 688 spin_unlock_irqrestore(&bitmap->lock, flags); 689 return 0; 690 } 691 spin_unlock_irqrestore(&bitmap->lock, flags); 692 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 693 old = le32_to_cpu(sb->state) & bits; 694 switch (op) { 695 case MASK_SET: 696 sb->state |= cpu_to_le32(bits); 697 bitmap->flags |= bits; 698 break; 699 case MASK_UNSET: 700 sb->state &= cpu_to_le32(~bits); 701 bitmap->flags &= ~bits; 702 break; 703 default: 704 BUG(); 705 } 706 kunmap_atomic(sb, KM_USER0); 707 return old; 708} 709 710/* 711 * general bitmap file operations 712 */ 713 714/* 715 * on-disk bitmap: 716 * 717 * Use one bit per "chunk" (block set). We do the disk I/O on the bitmap 718 * file a page at a time. There's a superblock at the start of the file. 719 */ 720/* calculate the index of the page that contains this bit */ 721static inline unsigned long file_page_index(struct bitmap *bitmap, unsigned long chunk) 722{ 723 if (!bitmap->mddev->bitmap_info.external) 724 chunk += sizeof(bitmap_super_t) << 3; 725 return chunk >> PAGE_BIT_SHIFT; 726} 727 728/* calculate the (bit) offset of this bit within a page */ 729static inline unsigned long file_page_offset(struct bitmap *bitmap, unsigned long chunk) 730{ 731 if (!bitmap->mddev->bitmap_info.external) 732 chunk += sizeof(bitmap_super_t) << 3; 733 return chunk & (PAGE_BITS - 1); 734} 735 736/* 737 * return a pointer to the page in the filemap that contains the given bit 738 * 739 * this lookup is complicated by the fact that the bitmap sb might be exactly 740 * 1 page (e.g., x86) or less than 1 page -- so the bitmap might start on page 741 * 0 or page 1 742 */ 743static inline struct page *filemap_get_page(struct bitmap *bitmap, 744 unsigned long chunk) 745{ 746 if (file_page_index(bitmap, chunk) >= bitmap->file_pages) 747 return NULL; 748 return bitmap->filemap[file_page_index(bitmap, chunk) 749 - file_page_index(bitmap, 0)]; 750} 751 752static void bitmap_file_unmap(struct bitmap *bitmap) 753{ 754 struct page **map, *sb_page; 755 unsigned long *attr; 756 int pages; 757 unsigned long flags; 758 759 spin_lock_irqsave(&bitmap->lock, flags); 760 map = bitmap->filemap; 761 bitmap->filemap = NULL; 762 attr = bitmap->filemap_attr; 763 bitmap->filemap_attr = NULL; 764 pages = bitmap->file_pages; 765 bitmap->file_pages = 0; 766 sb_page = bitmap->sb_page; 767 bitmap->sb_page = NULL; 768 spin_unlock_irqrestore(&bitmap->lock, flags); 769 770 while (pages--) 771 if (map[pages] != sb_page) /* 0 is sb_page, release it below */ 772 free_buffers(map[pages]); 773 kfree(map); 774 kfree(attr); 775 776 if (sb_page) 777 free_buffers(sb_page); 778} 779 780static void bitmap_file_put(struct bitmap *bitmap) 781{ 782 struct file *file; 783 unsigned long flags; 784 785 spin_lock_irqsave(&bitmap->lock, flags); 786 file = bitmap->file; 787 bitmap->file = NULL; 788 spin_unlock_irqrestore(&bitmap->lock, flags); 789 790 if (file) 791 wait_event(bitmap->write_wait, 792 atomic_read(&bitmap->pending_writes)==0); 793 bitmap_file_unmap(bitmap); 794 795 if (file) { 796 struct inode *inode = file->f_path.dentry->d_inode; 797 invalidate_mapping_pages(inode->i_mapping, 0, -1); 798 fput(file); 799 } 800} 801 802/* 803 * bitmap_file_kick - if an error occurs while manipulating the bitmap file 804 * then it is no longer reliable, so we stop using it and we mark the file 805 * as failed in the superblock 806 */ 807static void bitmap_file_kick(struct bitmap *bitmap) 808{ 809 char *path, *ptr = NULL; 810 811 if (bitmap_mask_state(bitmap, BITMAP_STALE, MASK_SET) == 0) { 812 bitmap_update_sb(bitmap); 813 814 if (bitmap->file) { 815 path = kmalloc(PAGE_SIZE, GFP_KERNEL); 816 if (path) 817 ptr = d_path(&bitmap->file->f_path, path, 818 PAGE_SIZE); 819 820 printk(KERN_ALERT 821 "%s: kicking failed bitmap file %s from array!\n", 822 bmname(bitmap), IS_ERR(ptr) ? "" : ptr); 823 824 kfree(path); 825 } else 826 printk(KERN_ALERT 827 "%s: disabling internal bitmap due to errors\n", 828 bmname(bitmap)); 829 } 830 831 bitmap_file_put(bitmap); 832 833 return; 834} 835 836enum bitmap_page_attr { 837 BITMAP_PAGE_DIRTY = 0, /* there are set bits that need to be synced */ 838 BITMAP_PAGE_PENDING = 1, /* there are bits that are being cleaned. 839 * i.e. counter is 1 or 2. */ 840 BITMAP_PAGE_NEEDWRITE = 2, /* there are cleared bits that need to be synced */ 841}; 842 843static inline void set_page_attr(struct bitmap *bitmap, struct page *page, 844 enum bitmap_page_attr attr) 845{ 846 __set_bit((page->index<<2) + attr, bitmap->filemap_attr); 847} 848 849static inline void clear_page_attr(struct bitmap *bitmap, struct page *page, 850 enum bitmap_page_attr attr) 851{ 852 __clear_bit((page->index<<2) + attr, bitmap->filemap_attr); 853} 854 855static inline unsigned long test_page_attr(struct bitmap *bitmap, struct page *page, 856 enum bitmap_page_attr attr) 857{ 858 return test_bit((page->index<<2) + attr, bitmap->filemap_attr); 859} 860 861/* 862 * bitmap_file_set_bit -- called before performing a write to the md device 863 * to set (and eventually sync) a particular bit in the bitmap file 864 * 865 * we set the bit immediately, then we record the page number so that 866 * when an unplug occurs, we can flush the dirty pages out to disk 867 */ 868static void bitmap_file_set_bit(struct bitmap *bitmap, sector_t block) 869{ 870 unsigned long bit; 871 struct page *page; 872 void *kaddr; 873 unsigned long chunk = block >> CHUNK_BLOCK_SHIFT(bitmap); 874 875 if (!bitmap->filemap) 876 return; 877 878 page = filemap_get_page(bitmap, chunk); 879 if (!page) 880 return; 881 bit = file_page_offset(bitmap, chunk); 882 883 /* set the bit */ 884 kaddr = kmap_atomic(page, KM_USER0); 885 if (bitmap->flags & BITMAP_HOSTENDIAN) 886 set_bit(bit, kaddr); 887 else 888 __set_bit_le(bit, kaddr); 889 kunmap_atomic(kaddr, KM_USER0); 890 pr_debug("set file bit %lu page %lu\n", bit, page->index); 891 /* record page number so it gets flushed to disk when unplug occurs */ 892 set_page_attr(bitmap, page, BITMAP_PAGE_DIRTY); 893} 894 895/* this gets called when the md device is ready to unplug its underlying 896 * (slave) device queues -- before we let any writes go down, we need to 897 * sync the dirty pages of the bitmap file to disk */ 898void bitmap_unplug(struct bitmap *bitmap) 899{ 900 unsigned long i, flags; 901 int dirty, need_write; 902 struct page *page; 903 int wait = 0; 904 905 if (!bitmap) 906 return; 907 908 /* look at each page to see if there are any set bits that need to be 909 * flushed out to disk */ 910 for (i = 0; i < bitmap->file_pages; i++) { 911 spin_lock_irqsave(&bitmap->lock, flags); 912 if (!bitmap->filemap) { 913 spin_unlock_irqrestore(&bitmap->lock, flags); 914 return; 915 } 916 page = bitmap->filemap[i]; 917 dirty = test_page_attr(bitmap, page, BITMAP_PAGE_DIRTY); 918 need_write = test_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE); 919 clear_page_attr(bitmap, page, BITMAP_PAGE_DIRTY); 920 clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE); 921 if (dirty) 922 wait = 1; 923 spin_unlock_irqrestore(&bitmap->lock, flags); 924 925 if (dirty || need_write) 926 write_page(bitmap, page, 0); 927 } 928 if (wait) { /* if any writes were performed, we need to wait on them */ 929 if (bitmap->file) 930 wait_event(bitmap->write_wait, 931 atomic_read(&bitmap->pending_writes)==0); 932 else 933 md_super_wait(bitmap->mddev); 934 } 935 if (bitmap->flags & BITMAP_WRITE_ERROR) 936 bitmap_file_kick(bitmap); 937} 938EXPORT_SYMBOL(bitmap_unplug); 939 940static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed); 941/* * bitmap_init_from_disk -- called at bitmap_create time to initialize 942 * the in-memory bitmap from the on-disk bitmap -- also, sets up the 943 * memory mapping of the bitmap file 944 * Special cases: 945 * if there's no bitmap file, or if the bitmap file had been 946 * previously kicked from the array, we mark all the bits as 947 * 1's in order to cause a full resync. 948 * 949 * We ignore all bits for sectors that end earlier than 'start'. 950 * This is used when reading an out-of-date bitmap... 951 */ 952static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) 953{ 954 unsigned long i, chunks, index, oldindex, bit; 955 struct page *page = NULL, *oldpage = NULL; 956 unsigned long num_pages, bit_cnt = 0; 957 struct file *file; 958 unsigned long bytes, offset; 959 int outofdate; 960 int ret = -ENOSPC; 961 void *paddr; 962 963 chunks = bitmap->chunks; 964 file = bitmap->file; 965 966 BUG_ON(!file && !bitmap->mddev->bitmap_info.offset); 967 968 outofdate = bitmap->flags & BITMAP_STALE; 969 if (outofdate) 970 printk(KERN_INFO "%s: bitmap file is out of date, doing full " 971 "recovery\n", bmname(bitmap)); 972 973 bytes = DIV_ROUND_UP(bitmap->chunks, 8); 974 if (!bitmap->mddev->bitmap_info.external) 975 bytes += sizeof(bitmap_super_t); 976 977 num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE); 978 979 if (file && i_size_read(file->f_mapping->host) < bytes) { 980 printk(KERN_INFO "%s: bitmap file too short %lu < %lu\n", 981 bmname(bitmap), 982 (unsigned long) i_size_read(file->f_mapping->host), 983 bytes); 984 goto err; 985 } 986 987 ret = -ENOMEM; 988 989 bitmap->filemap = kmalloc(sizeof(struct page *) * num_pages, GFP_KERNEL); 990 if (!bitmap->filemap) 991 goto err; 992 993 /* We need 4 bits per page, rounded up to a multiple of sizeof(unsigned long) */ 994 bitmap->filemap_attr = kzalloc( 995 roundup(DIV_ROUND_UP(num_pages*4, 8), sizeof(unsigned long)), 996 GFP_KERNEL); 997 if (!bitmap->filemap_attr) 998 goto err; 999 1000 oldindex = ~0L; 1001 1002 for (i = 0; i < chunks; i++) { 1003 int b; 1004 index = file_page_index(bitmap, i); 1005 bit = file_page_offset(bitmap, i); 1006 if (index != oldindex) { /* this is a new page, read it in */ 1007 int count; 1008 /* unmap the old page, we're done with it */ 1009 if (index == num_pages-1) 1010 count = bytes - index * PAGE_SIZE; 1011 else 1012 count = PAGE_SIZE; 1013 if (index == 0 && bitmap->sb_page) { 1014 /* 1015 * if we're here then the superblock page 1016 * contains some bits (PAGE_SIZE != sizeof sb) 1017 * we've already read it in, so just use it 1018 */ 1019 page = bitmap->sb_page; 1020 offset = sizeof(bitmap_super_t); 1021 if (!file) 1022 page = read_sb_page( 1023 bitmap->mddev, 1024 bitmap->mddev->bitmap_info.offset, 1025 page, 1026 index, count); 1027 } else if (file) { 1028 page = read_page(file, index, bitmap, count); 1029 offset = 0; 1030 } else { 1031 page = read_sb_page(bitmap->mddev, 1032 bitmap->mddev->bitmap_info.offset, 1033 NULL, 1034 index, count); 1035 offset = 0; 1036 } 1037 if (IS_ERR(page)) { /* read error */ 1038 ret = PTR_ERR(page); 1039 goto err; 1040 } 1041 1042 oldindex = index; 1043 oldpage = page; 1044 1045 bitmap->filemap[bitmap->file_pages++] = page; 1046 bitmap->last_page_size = count; 1047 1048 if (outofdate) { 1049 /* 1050 * if bitmap is out of date, dirty the 1051 * whole page and write it out 1052 */ 1053 paddr = kmap_atomic(page, KM_USER0); 1054 memset(paddr + offset, 0xff, 1055 PAGE_SIZE - offset); 1056 kunmap_atomic(paddr, KM_USER0); 1057 write_page(bitmap, page, 1); 1058 1059 ret = -EIO; 1060 if (bitmap->flags & BITMAP_WRITE_ERROR) 1061 goto err; 1062 } 1063 } 1064 paddr = kmap_atomic(page, KM_USER0); 1065 if (bitmap->flags & BITMAP_HOSTENDIAN) 1066 b = test_bit(bit, paddr); 1067 else 1068 b = test_bit_le(bit, paddr); 1069 kunmap_atomic(paddr, KM_USER0); 1070 if (b) { 1071 /* if the disk bit is set, set the memory bit */ 1072 int needed = ((sector_t)(i+1) << (CHUNK_BLOCK_SHIFT(bitmap)) 1073 >= start); 1074 bitmap_set_memory_bits(bitmap, 1075 (sector_t)i << CHUNK_BLOCK_SHIFT(bitmap), 1076 needed); 1077 bit_cnt++; 1078 } 1079 } 1080 1081 /* everything went OK */ 1082 ret = 0; 1083 bitmap_mask_state(bitmap, BITMAP_STALE, MASK_UNSET); 1084 1085 if (bit_cnt) { /* Kick recovery if any bits were set */ 1086 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery); 1087 md_wakeup_thread(bitmap->mddev->thread); 1088 } 1089 1090 printk(KERN_INFO "%s: bitmap initialized from disk: " 1091 "read %lu/%lu pages, set %lu of %lu bits\n", 1092 bmname(bitmap), bitmap->file_pages, num_pages, bit_cnt, chunks); 1093 1094 return 0; 1095 1096 err: 1097 printk(KERN_INFO "%s: bitmap initialisation failed: %d\n", 1098 bmname(bitmap), ret); 1099 return ret; 1100} 1101 1102void bitmap_write_all(struct bitmap *bitmap) 1103{ 1104 /* We don't actually write all bitmap blocks here, 1105 * just flag them as needing to be written 1106 */ 1107 int i; 1108 1109 spin_lock_irq(&bitmap->lock); 1110 for (i = 0; i < bitmap->file_pages; i++) 1111 set_page_attr(bitmap, bitmap->filemap[i], 1112 BITMAP_PAGE_NEEDWRITE); 1113 bitmap->allclean = 0; 1114 spin_unlock_irq(&bitmap->lock); 1115} 1116 1117static void bitmap_count_page(struct bitmap *bitmap, sector_t offset, int inc) 1118{ 1119 sector_t chunk = offset >> CHUNK_BLOCK_SHIFT(bitmap); 1120 unsigned long page = chunk >> PAGE_COUNTER_SHIFT; 1121 bitmap->bp[page].count += inc; 1122 bitmap_checkfree(bitmap, page); 1123} 1124static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap, 1125 sector_t offset, sector_t *blocks, 1126 int create); 1127 1128/* 1129 * bitmap daemon -- periodically wakes up to clean bits and flush pages 1130 * out to disk 1131 */ 1132 1133void bitmap_daemon_work(struct mddev *mddev) 1134{ 1135 struct bitmap *bitmap; 1136 unsigned long j; 1137 unsigned long flags; 1138 struct page *page = NULL, *lastpage = NULL; 1139 sector_t blocks; 1140 void *paddr; 1141 1142 /* Use a mutex to guard daemon_work against 1143 * bitmap_destroy. 1144 */ 1145 mutex_lock(&mddev->bitmap_info.mutex); 1146 bitmap = mddev->bitmap; 1147 if (bitmap == NULL) { 1148 mutex_unlock(&mddev->bitmap_info.mutex); 1149 return; 1150 } 1151 if (time_before(jiffies, bitmap->daemon_lastrun 1152 + mddev->bitmap_info.daemon_sleep)) 1153 goto done; 1154 1155 bitmap->daemon_lastrun = jiffies; 1156 if (bitmap->allclean) { 1157 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; 1158 goto done; 1159 } 1160 bitmap->allclean = 1; 1161 1162 spin_lock_irqsave(&bitmap->lock, flags); 1163 for (j = 0; j < bitmap->chunks; j++) { 1164 bitmap_counter_t *bmc; 1165 if (!bitmap->filemap) 1166 /* error or shutdown */ 1167 break; 1168 1169 page = filemap_get_page(bitmap, j); 1170 1171 if (page != lastpage) { 1172 /* skip this page unless it's marked as needing cleaning */ 1173 if (!test_page_attr(bitmap, page, BITMAP_PAGE_PENDING)) { 1174 int need_write = test_page_attr(bitmap, page, 1175 BITMAP_PAGE_NEEDWRITE); 1176 if (need_write) 1177 clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE); 1178 1179 spin_unlock_irqrestore(&bitmap->lock, flags); 1180 if (need_write) 1181 write_page(bitmap, page, 0); 1182 spin_lock_irqsave(&bitmap->lock, flags); 1183 j |= (PAGE_BITS - 1); 1184 continue; 1185 } 1186 1187 /* grab the new page, sync and release the old */ 1188 if (lastpage != NULL) { 1189 if (test_page_attr(bitmap, lastpage, 1190 BITMAP_PAGE_NEEDWRITE)) { 1191 clear_page_attr(bitmap, lastpage, 1192 BITMAP_PAGE_NEEDWRITE); 1193 spin_unlock_irqrestore(&bitmap->lock, flags); 1194 write_page(bitmap, lastpage, 0); 1195 } else { 1196 set_page_attr(bitmap, lastpage, 1197 BITMAP_PAGE_NEEDWRITE); 1198 bitmap->allclean = 0; 1199 spin_unlock_irqrestore(&bitmap->lock, flags); 1200 } 1201 } else 1202 spin_unlock_irqrestore(&bitmap->lock, flags); 1203 lastpage = page; 1204 1205 /* We are possibly going to clear some bits, so make 1206 * sure that events_cleared is up-to-date. 1207 */ 1208 if (bitmap->need_sync && 1209 mddev->bitmap_info.external == 0) { 1210 bitmap_super_t *sb; 1211 bitmap->need_sync = 0; 1212 sb = kmap_atomic(bitmap->sb_page, KM_USER0); 1213 sb->events_cleared = 1214 cpu_to_le64(bitmap->events_cleared); 1215 kunmap_atomic(sb, KM_USER0); 1216 write_page(bitmap, bitmap->sb_page, 1); 1217 } 1218 spin_lock_irqsave(&bitmap->lock, flags); 1219 if (!bitmap->need_sync) 1220 clear_page_attr(bitmap, page, BITMAP_PAGE_PENDING); 1221 else 1222 bitmap->allclean = 0; 1223 } 1224 bmc = bitmap_get_counter(bitmap, 1225 (sector_t)j << CHUNK_BLOCK_SHIFT(bitmap), 1226 &blocks, 0); 1227 if (!bmc) 1228 j |= PAGE_COUNTER_MASK; 1229 else if (*bmc) { 1230 if (*bmc == 1 && !bitmap->need_sync) { 1231 /* we can clear the bit */ 1232 *bmc = 0; 1233 bitmap_count_page(bitmap, 1234 (sector_t)j << CHUNK_BLOCK_SHIFT(bitmap), 1235 -1); 1236 1237 /* clear the bit */ 1238 paddr = kmap_atomic(page, KM_USER0); 1239 if (bitmap->flags & BITMAP_HOSTENDIAN) 1240 clear_bit(file_page_offset(bitmap, j), 1241 paddr); 1242 else 1243 __clear_bit_le( 1244 file_page_offset(bitmap, 1245 j), 1246 paddr); 1247 kunmap_atomic(paddr, KM_USER0); 1248 } else if (*bmc <= 2) { 1249 *bmc = 1; /* maybe clear the bit next time */ 1250 set_page_attr(bitmap, page, BITMAP_PAGE_PENDING); 1251 bitmap->allclean = 0; 1252 } 1253 } 1254 } 1255 spin_unlock_irqrestore(&bitmap->lock, flags); 1256 1257 /* now sync the final page */ 1258 if (lastpage != NULL) { 1259 spin_lock_irqsave(&bitmap->lock, flags); 1260 if (test_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE)) { 1261 clear_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE); 1262 spin_unlock_irqrestore(&bitmap->lock, flags); 1263 write_page(bitmap, lastpage, 0); 1264 } else { 1265 set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE); 1266 bitmap->allclean = 0; 1267 spin_unlock_irqrestore(&bitmap->lock, flags); 1268 } 1269 } 1270 1271 done: 1272 if (bitmap->allclean == 0) 1273 mddev->thread->timeout = 1274 mddev->bitmap_info.daemon_sleep; 1275 mutex_unlock(&mddev->bitmap_info.mutex); 1276} 1277 1278static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap, 1279 sector_t offset, sector_t *blocks, 1280 int create) 1281__releases(bitmap->lock) 1282__acquires(bitmap->lock) 1283{ 1284 /* If 'create', we might release the lock and reclaim it. 1285 * The lock must have been taken with interrupts enabled. 1286 * If !create, we don't release the lock. 1287 */ 1288 sector_t chunk = offset >> CHUNK_BLOCK_SHIFT(bitmap); 1289 unsigned long page = chunk >> PAGE_COUNTER_SHIFT; 1290 unsigned long pageoff = (chunk & PAGE_COUNTER_MASK) << COUNTER_BYTE_SHIFT; 1291 sector_t csize; 1292 int err; 1293 1294 err = bitmap_checkpage(bitmap, page, create); 1295 1296 if (bitmap->bp[page].hijacked || 1297 bitmap->bp[page].map == NULL) 1298 csize = ((sector_t)1) << (CHUNK_BLOCK_SHIFT(bitmap) + 1299 PAGE_COUNTER_SHIFT - 1); 1300 else 1301 csize = ((sector_t)1) << (CHUNK_BLOCK_SHIFT(bitmap)); 1302 *blocks = csize - (offset & (csize - 1)); 1303 1304 if (err < 0) 1305 return NULL; 1306 1307 /* now locked ... */ 1308 1309 if (bitmap->bp[page].hijacked) { /* hijacked pointer */ 1310 /* should we use the first or second counter field 1311 * of the hijacked pointer? */ 1312 int hi = (pageoff > PAGE_COUNTER_MASK); 1313 return &((bitmap_counter_t *) 1314 &bitmap->bp[page].map)[hi]; 1315 } else /* page is allocated */ 1316 return (bitmap_counter_t *) 1317 &(bitmap->bp[page].map[pageoff]); 1318} 1319 1320int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors, int behind) 1321{ 1322 if (!bitmap) 1323 return 0; 1324 1325 if (behind) { 1326 int bw; 1327 atomic_inc(&bitmap->behind_writes); 1328 bw = atomic_read(&bitmap->behind_writes); 1329 if (bw > bitmap->behind_writes_used) 1330 bitmap->behind_writes_used = bw; 1331 1332 pr_debug("inc write-behind count %d/%lu\n", 1333 bw, bitmap->mddev->bitmap_info.max_write_behind); 1334 } 1335 1336 while (sectors) { 1337 sector_t blocks; 1338 bitmap_counter_t *bmc; 1339 1340 spin_lock_irq(&bitmap->lock); 1341 bmc = bitmap_get_counter(bitmap, offset, &blocks, 1); 1342 if (!bmc) { 1343 spin_unlock_irq(&bitmap->lock); 1344 return 0; 1345 } 1346 1347 if (unlikely(COUNTER(*bmc) == COUNTER_MAX)) { 1348 DEFINE_WAIT(__wait); 1349 /* note that it is safe to do the prepare_to_wait 1350 * after the test as long as we do it before dropping 1351 * the spinlock. 1352 */ 1353 prepare_to_wait(&bitmap->overflow_wait, &__wait, 1354 TASK_UNINTERRUPTIBLE); 1355 spin_unlock_irq(&bitmap->lock); 1356 io_schedule(); 1357 finish_wait(&bitmap->overflow_wait, &__wait); 1358 continue; 1359 } 1360 1361 switch (*bmc) { 1362 case 0: 1363 bitmap_file_set_bit(bitmap, offset); 1364 bitmap_count_page(bitmap, offset, 1); 1365 /* fall through */ 1366 case 1: 1367 *bmc = 2; 1368 } 1369 1370 (*bmc)++; 1371 1372 spin_unlock_irq(&bitmap->lock); 1373 1374 offset += blocks; 1375 if (sectors > blocks) 1376 sectors -= blocks; 1377 else 1378 sectors = 0; 1379 } 1380 return 0; 1381} 1382EXPORT_SYMBOL(bitmap_startwrite); 1383 1384void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors, 1385 int success, int behind) 1386{ 1387 if (!bitmap) 1388 return; 1389 if (behind) { 1390 if (atomic_dec_and_test(&bitmap->behind_writes)) 1391 wake_up(&bitmap->behind_wait); 1392 pr_debug("dec write-behind count %d/%lu\n", 1393 atomic_read(&bitmap->behind_writes), 1394 bitmap->mddev->bitmap_info.max_write_behind); 1395 } 1396 1397 while (sectors) { 1398 sector_t blocks; 1399 unsigned long flags; 1400 bitmap_counter_t *bmc; 1401 1402 spin_lock_irqsave(&bitmap->lock, flags); 1403 bmc = bitmap_get_counter(bitmap, offset, &blocks, 0); 1404 if (!bmc) { 1405 spin_unlock_irqrestore(&bitmap->lock, flags); 1406 return; 1407 } 1408 1409 if (success && !bitmap->mddev->degraded && 1410 bitmap->events_cleared < bitmap->mddev->events) { 1411 bitmap->events_cleared = bitmap->mddev->events; 1412 bitmap->need_sync = 1; 1413 sysfs_notify_dirent_safe(bitmap->sysfs_can_clear); 1414 } 1415 1416 if (!success && !NEEDED(*bmc)) 1417 *bmc |= NEEDED_MASK; 1418 1419 if (COUNTER(*bmc) == COUNTER_MAX) 1420 wake_up(&bitmap->overflow_wait); 1421 1422 (*bmc)--; 1423 if (*bmc <= 2) { 1424 set_page_attr(bitmap, 1425 filemap_get_page( 1426 bitmap, 1427 offset >> CHUNK_BLOCK_SHIFT(bitmap)), 1428 BITMAP_PAGE_PENDING); 1429 bitmap->allclean = 0; 1430 } 1431 spin_unlock_irqrestore(&bitmap->lock, flags); 1432 offset += blocks; 1433 if (sectors > blocks) 1434 sectors -= blocks; 1435 else 1436 sectors = 0; 1437 } 1438} 1439EXPORT_SYMBOL(bitmap_endwrite); 1440 1441static int __bitmap_start_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks, 1442 int degraded) 1443{ 1444 bitmap_counter_t *bmc; 1445 int rv; 1446 if (bitmap == NULL) {/* FIXME or bitmap set as 'failed' */ 1447 *blocks = 1024; 1448 return 1; /* always resync if no bitmap */ 1449 } 1450 spin_lock_irq(&bitmap->lock); 1451 bmc = bitmap_get_counter(bitmap, offset, blocks, 0); 1452 rv = 0; 1453 if (bmc) { 1454 /* locked */ 1455 if (RESYNC(*bmc)) 1456 rv = 1; 1457 else if (NEEDED(*bmc)) { 1458 rv = 1; 1459 if (!degraded) { /* don't set/clear bits if degraded */ 1460 *bmc |= RESYNC_MASK; 1461 *bmc &= ~NEEDED_MASK; 1462 } 1463 } 1464 } 1465 spin_unlock_irq(&bitmap->lock); 1466 return rv; 1467} 1468 1469int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks, 1470 int degraded) 1471{ 1472 /* bitmap_start_sync must always report on multiples of whole 1473 * pages, otherwise resync (which is very PAGE_SIZE based) will 1474 * get confused. 1475 * So call __bitmap_start_sync repeatedly (if needed) until 1476 * At least PAGE_SIZE>>9 blocks are covered. 1477 * Return the 'or' of the result. 1478 */ 1479 int rv = 0; 1480 sector_t blocks1; 1481 1482 *blocks = 0; 1483 while (*blocks < (PAGE_SIZE>>9)) { 1484 rv |= __bitmap_start_sync(bitmap, offset, 1485 &blocks1, degraded); 1486 offset += blocks1; 1487 *blocks += blocks1; 1488 } 1489 return rv; 1490} 1491EXPORT_SYMBOL(bitmap_start_sync); 1492 1493void bitmap_end_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks, int aborted) 1494{ 1495 bitmap_counter_t *bmc; 1496 unsigned long flags; 1497 1498 if (bitmap == NULL) { 1499 *blocks = 1024; 1500 return; 1501 } 1502 spin_lock_irqsave(&bitmap->lock, flags); 1503 bmc = bitmap_get_counter(bitmap, offset, blocks, 0); 1504 if (bmc == NULL) 1505 goto unlock; 1506 /* locked */ 1507 if (RESYNC(*bmc)) { 1508 *bmc &= ~RESYNC_MASK; 1509 1510 if (!NEEDED(*bmc) && aborted) 1511 *bmc |= NEEDED_MASK; 1512 else { 1513 if (*bmc <= 2) { 1514 set_page_attr(bitmap, 1515 filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap)), 1516 BITMAP_PAGE_PENDING); 1517 bitmap->allclean = 0; 1518 } 1519 } 1520 } 1521 unlock: 1522 spin_unlock_irqrestore(&bitmap->lock, flags); 1523} 1524EXPORT_SYMBOL(bitmap_end_sync); 1525 1526void bitmap_close_sync(struct bitmap *bitmap) 1527{ 1528 /* Sync has finished, and any bitmap chunks that weren't synced 1529 * properly have been aborted. It remains to us to clear the 1530 * RESYNC bit wherever it is still on 1531 */ 1532 sector_t sector = 0; 1533 sector_t blocks; 1534 if (!bitmap) 1535 return; 1536 while (sector < bitmap->mddev->resync_max_sectors) { 1537 bitmap_end_sync(bitmap, sector, &blocks, 0); 1538 sector += blocks; 1539 } 1540} 1541EXPORT_SYMBOL(bitmap_close_sync); 1542 1543void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector) 1544{ 1545 sector_t s = 0; 1546 sector_t blocks; 1547 1548 if (!bitmap) 1549 return; 1550 if (sector == 0) { 1551 bitmap->last_end_sync = jiffies; 1552 return; 1553 } 1554 if (time_before(jiffies, (bitmap->last_end_sync 1555 + bitmap->mddev->bitmap_info.daemon_sleep))) 1556 return; 1557 wait_event(bitmap->mddev->recovery_wait, 1558 atomic_read(&bitmap->mddev->recovery_active) == 0); 1559 1560 bitmap->mddev->curr_resync_completed = sector; 1561 set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags); 1562 sector &= ~((1ULL << CHUNK_BLOCK_SHIFT(bitmap)) - 1); 1563 s = 0; 1564 while (s < sector && s < bitmap->mddev->resync_max_sectors) { 1565 bitmap_end_sync(bitmap, s, &blocks, 0); 1566 s += blocks; 1567 } 1568 bitmap->last_end_sync = jiffies; 1569 sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed"); 1570} 1571EXPORT_SYMBOL(bitmap_cond_end_sync); 1572 1573static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed) 1574{ 1575 /* For each chunk covered by any of these sectors, set the 1576 * counter to 1 and set resync_needed. They should all 1577 * be 0 at this point 1578 */ 1579 1580 sector_t secs; 1581 bitmap_counter_t *bmc; 1582 spin_lock_irq(&bitmap->lock); 1583 bmc = bitmap_get_counter(bitmap, offset, &secs, 1); 1584 if (!bmc) { 1585 spin_unlock_irq(&bitmap->lock); 1586 return; 1587 } 1588 if (!*bmc) { 1589 struct page *page; 1590 *bmc = 2 | (needed ? NEEDED_MASK : 0); 1591 bitmap_count_page(bitmap, offset, 1); 1592 page = filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap)); 1593 set_page_attr(bitmap, page, BITMAP_PAGE_PENDING); 1594 bitmap->allclean = 0; 1595 } 1596 spin_unlock_irq(&bitmap->lock); 1597} 1598 1599/* dirty the memory and file bits for bitmap chunks "s" to "e" */ 1600void bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long e) 1601{ 1602 unsigned long chunk; 1603 1604 for (chunk = s; chunk <= e; chunk++) { 1605 sector_t sec = (sector_t)chunk << CHUNK_BLOCK_SHIFT(bitmap); 1606 bitmap_set_memory_bits(bitmap, sec, 1); 1607 spin_lock_irq(&bitmap->lock); 1608 bitmap_file_set_bit(bitmap, sec); 1609 spin_unlock_irq(&bitmap->lock); 1610 if (sec < bitmap->mddev->recovery_cp) 1611 /* We are asserting that the array is dirty, 1612 * so move the recovery_cp address back so 1613 * that it is obvious that it is dirty 1614 */ 1615 bitmap->mddev->recovery_cp = sec; 1616 } 1617} 1618 1619/* 1620 * flush out any pending updates 1621 */ 1622void bitmap_flush(struct mddev *mddev) 1623{ 1624 struct bitmap *bitmap = mddev->bitmap; 1625 long sleep; 1626 1627 if (!bitmap) /* there was no bitmap */ 1628 return; 1629 1630 /* run the daemon_work three time to ensure everything is flushed 1631 * that can be 1632 */ 1633 sleep = mddev->bitmap_info.daemon_sleep * 2; 1634 bitmap->daemon_lastrun -= sleep; 1635 bitmap_daemon_work(mddev); 1636 bitmap->daemon_lastrun -= sleep; 1637 bitmap_daemon_work(mddev); 1638 bitmap->daemon_lastrun -= sleep; 1639 bitmap_daemon_work(mddev); 1640 bitmap_update_sb(bitmap); 1641} 1642 1643/* 1644 * free memory that was allocated 1645 */ 1646static void bitmap_free(struct bitmap *bitmap) 1647{ 1648 unsigned long k, pages; 1649 struct bitmap_page *bp; 1650 1651 if (!bitmap) /* there was no bitmap */ 1652 return; 1653 1654 /* release the bitmap file and kill the daemon */ 1655 bitmap_file_put(bitmap); 1656 1657 bp = bitmap->bp; 1658 pages = bitmap->pages; 1659 1660 /* free all allocated memory */ 1661 1662 if (bp) /* deallocate the page memory */ 1663 for (k = 0; k < pages; k++) 1664 if (bp[k].map && !bp[k].hijacked) 1665 kfree(bp[k].map); 1666 kfree(bp); 1667 kfree(bitmap); 1668} 1669 1670void bitmap_destroy(struct mddev *mddev) 1671{ 1672 struct bitmap *bitmap = mddev->bitmap; 1673 1674 if (!bitmap) /* there was no bitmap */ 1675 return; 1676 1677 mutex_lock(&mddev->bitmap_info.mutex); 1678 mddev->bitmap = NULL; /* disconnect from the md device */ 1679 mutex_unlock(&mddev->bitmap_info.mutex); 1680 if (mddev->thread) 1681 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; 1682 1683 if (bitmap->sysfs_can_clear) 1684 sysfs_put(bitmap->sysfs_can_clear); 1685 1686 bitmap_free(bitmap); 1687} 1688 1689/* 1690 * initialize the bitmap structure 1691 * if this returns an error, bitmap_destroy must be called to do clean up 1692 */ 1693int bitmap_create(struct mddev *mddev) 1694{ 1695 struct bitmap *bitmap; 1696 sector_t blocks = mddev->resync_max_sectors; 1697 unsigned long chunks; 1698 unsigned long pages; 1699 struct file *file = mddev->bitmap_info.file; 1700 int err; 1701 struct sysfs_dirent *bm = NULL; 1702 1703 BUILD_BUG_ON(sizeof(bitmap_super_t) != 256); 1704 1705 if (!file 1706 && !mddev->bitmap_info.offset) /* bitmap disabled, nothing to do */ 1707 return 0; 1708 1709 BUG_ON(file && mddev->bitmap_info.offset); 1710 1711 bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL); 1712 if (!bitmap) 1713 return -ENOMEM; 1714 1715 spin_lock_init(&bitmap->lock); 1716 atomic_set(&bitmap->pending_writes, 0); 1717 init_waitqueue_head(&bitmap->write_wait); 1718 init_waitqueue_head(&bitmap->overflow_wait); 1719 init_waitqueue_head(&bitmap->behind_wait); 1720 1721 bitmap->mddev = mddev; 1722 1723 if (mddev->kobj.sd) 1724 bm = sysfs_get_dirent(mddev->kobj.sd, NULL, "bitmap"); 1725 if (bm) { 1726 bitmap->sysfs_can_clear = sysfs_get_dirent(bm, NULL, "can_clear"); 1727 sysfs_put(bm); 1728 } else 1729 bitmap->sysfs_can_clear = NULL; 1730 1731 bitmap->file = file; 1732 if (file) { 1733 get_file(file); 1734 /* As future accesses to this file will use bmap, 1735 * and bypass the page cache, we must sync the file 1736 * first. 1737 */ 1738 vfs_fsync(file, 1); 1739 } 1740 /* read superblock from bitmap file (this sets mddev->bitmap_info.chunksize) */ 1741 if (!mddev->bitmap_info.external) { 1742 /* 1743 * If 'MD_ARRAY_FIRST_USE' is set, then device-mapper is 1744 * instructing us to create a new on-disk bitmap instance. 1745 */ 1746 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags)) 1747 err = bitmap_new_disk_sb(bitmap); 1748 else 1749 err = bitmap_read_sb(bitmap); 1750 } else { 1751 err = 0; 1752 if (mddev->bitmap_info.chunksize == 0 || 1753 mddev->bitmap_info.daemon_sleep == 0) 1754 /* chunksize and time_base need to be 1755 * set first. */ 1756 err = -EINVAL; 1757 } 1758 if (err) 1759 goto error; 1760 1761 bitmap->daemon_lastrun = jiffies; 1762 bitmap->chunkshift = ffz(~mddev->bitmap_info.chunksize); 1763 1764 /* now that chunksize and chunkshift are set, we can use these macros */ 1765 chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) >> 1766 CHUNK_BLOCK_SHIFT(bitmap); 1767 pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO; 1768 1769 BUG_ON(!pages); 1770 1771 bitmap->chunks = chunks; 1772 bitmap->pages = pages; 1773 bitmap->missing_pages = pages; 1774 1775 bitmap->bp = kzalloc(pages * sizeof(*bitmap->bp), GFP_KERNEL); 1776 1777 err = -ENOMEM; 1778 if (!bitmap->bp) 1779 goto error; 1780 1781 printk(KERN_INFO "created bitmap (%lu pages) for device %s\n", 1782 pages, bmname(bitmap)); 1783 1784 mddev->bitmap = bitmap; 1785 1786 1787 return (bitmap->flags & BITMAP_WRITE_ERROR) ? -EIO : 0; 1788 1789 error: 1790 bitmap_free(bitmap); 1791 return err; 1792} 1793 1794int bitmap_load(struct mddev *mddev) 1795{ 1796 int err = 0; 1797 sector_t start = 0; 1798 sector_t sector = 0; 1799 struct bitmap *bitmap = mddev->bitmap; 1800 1801 if (!bitmap) 1802 goto out; 1803 1804 /* Clear out old bitmap info first: Either there is none, or we 1805 * are resuming after someone else has possibly changed things, 1806 * so we should forget old cached info. 1807 * All chunks should be clean, but some might need_sync. 1808 */ 1809 while (sector < mddev->resync_max_sectors) { 1810 sector_t blocks; 1811 bitmap_start_sync(bitmap, sector, &blocks, 0); 1812 sector += blocks; 1813 } 1814 bitmap_close_sync(bitmap); 1815 1816 if (mddev->degraded == 0 1817 || bitmap->events_cleared == mddev->events) 1818 /* no need to keep dirty bits to optimise a 1819 * re-add of a missing device */ 1820 start = mddev->recovery_cp; 1821 1822 err = bitmap_init_from_disk(bitmap, start); 1823 1824 if (err) 1825 goto out; 1826 1827 mddev->thread->timeout = mddev->bitmap_info.daemon_sleep; 1828 md_wakeup_thread(mddev->thread); 1829 1830 bitmap_update_sb(bitmap); 1831 1832 if (bitmap->flags & BITMAP_WRITE_ERROR) 1833 err = -EIO; 1834out: 1835 return err; 1836} 1837EXPORT_SYMBOL_GPL(bitmap_load); 1838 1839static ssize_t 1840location_show(struct mddev *mddev, char *page) 1841{ 1842 ssize_t len; 1843 if (mddev->bitmap_info.file) 1844 len = sprintf(page, "file"); 1845 else if (mddev->bitmap_info.offset) 1846 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset); 1847 else 1848 len = sprintf(page, "none"); 1849 len += sprintf(page+len, "\n"); 1850 return len; 1851} 1852 1853static ssize_t 1854location_store(struct mddev *mddev, const char *buf, size_t len) 1855{ 1856 1857 if (mddev->pers) { 1858 if (!mddev->pers->quiesce) 1859 return -EBUSY; 1860 if (mddev->recovery || mddev->sync_thread) 1861 return -EBUSY; 1862 } 1863 1864 if (mddev->bitmap || mddev->bitmap_info.file || 1865 mddev->bitmap_info.offset) { 1866 /* bitmap already configured. Only option is to clear it */ 1867 if (strncmp(buf, "none", 4) != 0) 1868 return -EBUSY; 1869 if (mddev->pers) { 1870 mddev->pers->quiesce(mddev, 1); 1871 bitmap_destroy(mddev); 1872 mddev->pers->quiesce(mddev, 0); 1873 } 1874 mddev->bitmap_info.offset = 0; 1875 if (mddev->bitmap_info.file) { 1876 struct file *f = mddev->bitmap_info.file; 1877 mddev->bitmap_info.file = NULL; 1878 restore_bitmap_write_access(f); 1879 fput(f); 1880 } 1881 } else { 1882 /* No bitmap, OK to set a location */ 1883 long long offset; 1884 if (strncmp(buf, "none", 4) == 0) 1885 /* nothing to be done */; 1886 else if (strncmp(buf, "file:", 5) == 0) { 1887 /* Not supported yet */ 1888 return -EINVAL; 1889 } else { 1890 int rv; 1891 if (buf[0] == '+') 1892 rv = strict_strtoll(buf+1, 10, &offset); 1893 else 1894 rv = strict_strtoll(buf, 10, &offset); 1895 if (rv) 1896 return rv; 1897 if (offset == 0) 1898 return -EINVAL; 1899 if (mddev->bitmap_info.external == 0 && 1900 mddev->major_version == 0 && 1901 offset != mddev->bitmap_info.default_offset) 1902 return -EINVAL; 1903 mddev->bitmap_info.offset = offset; 1904 if (mddev->pers) { 1905 mddev->pers->quiesce(mddev, 1); 1906 rv = bitmap_create(mddev); 1907 if (rv) { 1908 bitmap_destroy(mddev); 1909 mddev->bitmap_info.offset = 0; 1910 } 1911 mddev->pers->quiesce(mddev, 0); 1912 if (rv) 1913 return rv; 1914 } 1915 } 1916 } 1917 if (!mddev->external) { 1918 /* Ensure new bitmap info is stored in 1919 * metadata promptly. 1920 */ 1921 set_bit(MD_CHANGE_DEVS, &mddev->flags); 1922 md_wakeup_thread(mddev->thread); 1923 } 1924 return len; 1925} 1926 1927static struct md_sysfs_entry bitmap_location = 1928__ATTR(location, S_IRUGO|S_IWUSR, location_show, location_store); 1929 1930static ssize_t 1931timeout_show(struct mddev *mddev, char *page) 1932{ 1933 ssize_t len; 1934 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ; 1935 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ; 1936 1937 len = sprintf(page, "%lu", secs); 1938 if (jifs) 1939 len += sprintf(page+len, ".%03u", jiffies_to_msecs(jifs)); 1940 len += sprintf(page+len, "\n"); 1941 return len; 1942} 1943 1944static ssize_t 1945timeout_store(struct mddev *mddev, const char *buf, size_t len) 1946{ 1947 /* timeout can be set at any time */ 1948 unsigned long timeout; 1949 int rv = strict_strtoul_scaled(buf, &timeout, 4); 1950 if (rv) 1951 return rv; 1952 1953 /* just to make sure we don't overflow... */ 1954 if (timeout >= LONG_MAX / HZ) 1955 return -EINVAL; 1956 1957 timeout = timeout * HZ / 10000; 1958 1959 if (timeout >= MAX_SCHEDULE_TIMEOUT) 1960 timeout = MAX_SCHEDULE_TIMEOUT-1; 1961 if (timeout < 1) 1962 timeout = 1; 1963 mddev->bitmap_info.daemon_sleep = timeout; 1964 if (mddev->thread) { 1965 /* if thread->timeout is MAX_SCHEDULE_TIMEOUT, then 1966 * the bitmap is all clean and we don't need to 1967 * adjust the timeout right now 1968 */ 1969 if (mddev->thread->timeout < MAX_SCHEDULE_TIMEOUT) { 1970 mddev->thread->timeout = timeout; 1971 md_wakeup_thread(mddev->thread); 1972 } 1973 } 1974 return len; 1975} 1976 1977static struct md_sysfs_entry bitmap_timeout = 1978__ATTR(time_base, S_IRUGO|S_IWUSR, timeout_show, timeout_store); 1979 1980static ssize_t 1981backlog_show(struct mddev *mddev, char *page) 1982{ 1983 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind); 1984} 1985 1986static ssize_t 1987backlog_store(struct mddev *mddev, const char *buf, size_t len) 1988{ 1989 unsigned long backlog; 1990 int rv = strict_strtoul(buf, 10, &backlog); 1991 if (rv) 1992 return rv; 1993 if (backlog > COUNTER_MAX) 1994 return -EINVAL; 1995 mddev->bitmap_info.max_write_behind = backlog; 1996 return len; 1997} 1998 1999static struct md_sysfs_entry bitmap_backlog = 2000__ATTR(backlog, S_IRUGO|S_IWUSR, backlog_show, backlog_store); 2001 2002static ssize_t 2003chunksize_show(struct mddev *mddev, char *page) 2004{ 2005 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize); 2006} 2007 2008static ssize_t 2009chunksize_store(struct mddev *mddev, const char *buf, size_t len) 2010{ 2011 /* Can only be changed when no bitmap is active */ 2012 int rv; 2013 unsigned long csize; 2014 if (mddev->bitmap) 2015 return -EBUSY; 2016 rv = strict_strtoul(buf, 10, &csize); 2017 if (rv) 2018 return rv; 2019 if (csize < 512 || 2020 !is_power_of_2(csize)) 2021 return -EINVAL; 2022 mddev->bitmap_info.chunksize = csize; 2023 return len; 2024} 2025 2026static struct md_sysfs_entry bitmap_chunksize = 2027__ATTR(chunksize, S_IRUGO|S_IWUSR, chunksize_show, chunksize_store); 2028 2029static ssize_t metadata_show(struct mddev *mddev, char *page) 2030{ 2031 return sprintf(page, "%s\n", (mddev->bitmap_info.external 2032 ? "external" : "internal")); 2033} 2034 2035static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len) 2036{ 2037 if (mddev->bitmap || 2038 mddev->bitmap_info.file || 2039 mddev->bitmap_info.offset) 2040 return -EBUSY; 2041 if (strncmp(buf, "external", 8) == 0) 2042 mddev->bitmap_info.external = 1; 2043 else if (strncmp(buf, "internal", 8) == 0) 2044 mddev->bitmap_info.external = 0; 2045 else 2046 return -EINVAL; 2047 return len; 2048} 2049 2050static struct md_sysfs_entry bitmap_metadata = 2051__ATTR(metadata, S_IRUGO|S_IWUSR, metadata_show, metadata_store); 2052 2053static ssize_t can_clear_show(struct mddev *mddev, char *page) 2054{ 2055 int len; 2056 if (mddev->bitmap) 2057 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ? 2058 "false" : "true")); 2059 else 2060 len = sprintf(page, "\n"); 2061 return len; 2062} 2063 2064static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len) 2065{ 2066 if (mddev->bitmap == NULL) 2067 return -ENOENT; 2068 if (strncmp(buf, "false", 5) == 0) 2069 mddev->bitmap->need_sync = 1; 2070 else if (strncmp(buf, "true", 4) == 0) { 2071 if (mddev->degraded) 2072 return -EBUSY; 2073 mddev->bitmap->need_sync = 0; 2074 } else 2075 return -EINVAL; 2076 return len; 2077} 2078 2079static struct md_sysfs_entry bitmap_can_clear = 2080__ATTR(can_clear, S_IRUGO|S_IWUSR, can_clear_show, can_clear_store); 2081 2082static ssize_t 2083behind_writes_used_show(struct mddev *mddev, char *page) 2084{ 2085 if (mddev->bitmap == NULL) 2086 return sprintf(page, "0\n"); 2087 return sprintf(page, "%lu\n", 2088 mddev->bitmap->behind_writes_used); 2089} 2090 2091static ssize_t 2092behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len) 2093{ 2094 if (mddev->bitmap) 2095 mddev->bitmap->behind_writes_used = 0; 2096 return len; 2097} 2098 2099static struct md_sysfs_entry max_backlog_used = 2100__ATTR(max_backlog_used, S_IRUGO | S_IWUSR, 2101 behind_writes_used_show, behind_writes_used_reset); 2102 2103static struct attribute *md_bitmap_attrs[] = { 2104 &bitmap_location.attr, 2105 &bitmap_timeout.attr, 2106 &bitmap_backlog.attr, 2107 &bitmap_chunksize.attr, 2108 &bitmap_metadata.attr, 2109 &bitmap_can_clear.attr, 2110 &max_backlog_used.attr, 2111 NULL 2112}; 2113struct attribute_group md_bitmap_group = { 2114 .name = "bitmap", 2115 .attrs = md_bitmap_attrs, 2116}; 2117