Lines Matching defs:mddev
37 return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
144 static int read_sb_page(struct mddev *mddev, loff_t offset,
148 sector_t sector = mddev->bitmap_info.offset + offset +
152 rdev_for_each(rdev, mddev) {
166 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev)
168 /* Iterate the disks of an mddev, using rcu to protect access to the
184 rdev = list_entry(&mddev->disks, struct md_rdev, same_set);
187 rdev_dec_pending(rdev, mddev);
189 list_for_each_entry_continue_rcu(rdev, &mddev->disks, same_set) {
228 struct mddev *mddev = bitmap->mddev;
230 loff_t sboff, offset = mddev->bitmap_info.offset;
251 if (mddev->external) {
254 sboff < (doff + mddev->dev_sectors + PAGE_SIZE / SECTOR_SIZE))
263 if (doff + mddev->dev_sectors > sboff)
276 md_super_write(mddev, rdev, sboff + ps, (int) size, page);
283 struct mddev *mddev = bitmap->mddev;
288 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) {
294 } while (wait && md_super_wait(mddev) < 0);
441 if (mddev_is_clustered(bitmap->mddev)) {
470 md_super_wait(bitmap->mddev);
479 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
481 if (bitmap->mddev->bitmap_info.external)
486 sb->events = cpu_to_le64(bitmap->mddev->events);
487 if (bitmap->mddev->events < bitmap->events_cleared)
489 bitmap->events_cleared = bitmap->mddev->events;
497 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ);
498 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind);
500 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
501 sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize);
502 sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes);
503 sb->sectors_reserved = cpu_to_le32(bitmap->mddev->
570 chunksize = bitmap->mddev->bitmap_info.chunksize;
579 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep;
585 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
591 write_behind = bitmap->mddev->bitmap_info.max_write_behind;
595 bitmap->mddev->bitmap_info.max_write_behind = write_behind;
598 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
600 memcpy(sb->uuid, bitmap->mddev->uuid, 16);
604 bitmap->events_cleared = bitmap->mddev->events;
605 sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
606 bitmap->mddev->bitmap_info.nodes = 0;
626 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) {
643 sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
646 (bitmap->mddev->bitmap_info.chunksize >> 9));
663 err = read_sb_page(bitmap->mddev, offset, sb_page, 0,
703 strscpy(bitmap->mddev->bitmap_info.cluster_name,
708 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
710 if (bitmap->mddev->persistent) {
713 * bitmap's UUID and event counter to the mddev's
715 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
721 if (!nodes && (events < bitmap->mddev->events)) {
724 (unsigned long long) bitmap->mddev->events);
740 bitmap->mddev->bitmap_info.chunksize = chunksize;
741 err = md_setup_cluster(bitmap->mddev, nodes);
747 bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev);
754 bitmap->events_cleared = bitmap->mddev->events;
755 bitmap->mddev->bitmap_info.chunksize = chunksize;
756 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
757 bitmap->mddev->bitmap_info.max_write_behind = write_behind;
758 bitmap->mddev->bitmap_info.nodes = nodes;
759 if (bitmap->mddev->bitmap_info.space == 0 ||
760 bitmap->mddev->bitmap_info.space > sectors_reserved)
761 bitmap->mddev->bitmap_info.space = sectors_reserved;
765 md_cluster_stop(bitmap->mddev);
957 if (mddev_is_clustered(bitmap->mddev))
988 if (mddev_is_clustered(bitmap->mddev))
1049 if (bitmap->mddev->queue)
1050 blk_add_trace_msg(bitmap->mddev->queue,
1111 struct mddev *mddev = bitmap->mddev;
1120 if (!file && !mddev->bitmap_info.offset) {
1144 if (mddev_is_clustered(mddev))
1160 ret = read_sb_page(mddev, 0, page, i + node_offset,
1175 if (i == 0 && !mddev->bitmap_info.external)
1272 static void mddev_set_timeout(struct mddev *mddev, unsigned long timeout,
1278 thread = rcu_dereference(mddev->thread);
1294 void md_bitmap_daemon_work(struct mddev *mddev)
1305 mutex_lock(&mddev->bitmap_info.mutex);
1306 bitmap = mddev->bitmap;
1308 mutex_unlock(&mddev->bitmap_info.mutex);
1312 + mddev->bitmap_info.daemon_sleep))
1317 mddev_set_timeout(mddev, MAX_SCHEDULE_TIMEOUT, true);
1322 if (bitmap->mddev->queue)
1323 blk_add_trace_msg(bitmap->mddev->queue,
1337 mddev->bitmap_info.external == 0) {
1413 mddev_set_timeout(mddev, mddev->bitmap_info.daemon_sleep, true);
1414 mutex_unlock(&mddev->bitmap_info.mutex);
1480 bw, bitmap->mddev->bitmap_info.max_write_behind);
1541 bitmap->mddev->bitmap_info.max_write_behind);
1556 if (success && !bitmap->mddev->degraded &&
1557 bitmap->events_cleared < bitmap->mddev->events) {
1558 bitmap->events_cleared = bitmap->mddev->events;
1677 while (sector < bitmap->mddev->resync_max_sectors) {
1696 + bitmap->mddev->bitmap_info.daemon_sleep)))
1698 wait_event(bitmap->mddev->recovery_wait,
1699 atomic_read(&bitmap->mddev->recovery_active) == 0);
1701 bitmap->mddev->curr_resync_completed = sector;
1702 set_bit(MD_SB_CHANGE_CLEAN, &bitmap->mddev->sb_flags);
1705 while (s < sector && s < bitmap->mddev->resync_max_sectors) {
1710 sysfs_notify_dirent_safe(bitmap->mddev->sysfs_completed);
1714 void md_bitmap_sync_with_cluster(struct mddev *mddev,
1718 struct bitmap *bitmap = mddev->bitmap;
1770 if (sec < bitmap->mddev->recovery_cp)
1775 bitmap->mddev->recovery_cp = sec;
1782 void md_bitmap_flush(struct mddev *mddev)
1784 struct bitmap *bitmap = mddev->bitmap;
1793 sleep = mddev->bitmap_info.daemon_sleep * 2;
1795 md_bitmap_daemon_work(mddev);
1797 md_bitmap_daemon_work(mddev);
1799 md_bitmap_daemon_work(mddev);
1800 if (mddev->bitmap_info.external)
1801 md_super_wait(mddev);
1819 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info &&
1820 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev))
1821 md_cluster_stop(bitmap->mddev);
1844 void md_bitmap_wait_behind_writes(struct mddev *mddev)
1846 struct bitmap *bitmap = mddev->bitmap;
1851 mdname(mddev));
1858 void md_bitmap_destroy(struct mddev *mddev)
1860 struct bitmap *bitmap = mddev->bitmap;
1865 md_bitmap_wait_behind_writes(mddev);
1866 if (!mddev->serialize_policy)
1867 mddev_destroy_serial_pool(mddev, NULL, true);
1869 mutex_lock(&mddev->bitmap_info.mutex);
1870 spin_lock(&mddev->lock);
1871 mddev->bitmap = NULL; /* disconnect from the md device */
1872 spin_unlock(&mddev->lock);
1873 mutex_unlock(&mddev->bitmap_info.mutex);
1874 mddev_set_timeout(mddev, MAX_SCHEDULE_TIMEOUT, true);
1882 * once mddev->bitmap is set
1884 struct bitmap *md_bitmap_create(struct mddev *mddev, int slot)
1887 sector_t blocks = mddev->resync_max_sectors;
1888 struct file *file = mddev->bitmap_info.file;
1894 BUG_ON(file && mddev->bitmap_info.offset);
1896 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) {
1898 mdname(mddev));
1912 bitmap->mddev = mddev;
1915 if (mddev->kobj.sd)
1916 bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap");
1932 /* read superblock from bitmap file (this sets mddev->bitmap_info.chunksize) */
1933 if (!mddev->bitmap_info.external) {
1938 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags))
1944 if (mddev->bitmap_info.chunksize == 0 ||
1945 mddev->bitmap_info.daemon_sleep == 0)
1954 err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1);
1971 int md_bitmap_load(struct mddev *mddev)
1976 struct bitmap *bitmap = mddev->bitmap;
1982 rdev_for_each(rdev, mddev)
1983 mddev_create_serial_pool(mddev, rdev, true);
1985 if (mddev_is_clustered(mddev))
1986 md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes);
1993 while (sector < mddev->resync_max_sectors) {
2000 if (mddev->degraded == 0
2001 || bitmap->events_cleared == mddev->events)
2004 start = mddev->recovery_cp;
2006 mutex_lock(&mddev->bitmap_info.mutex);
2008 mutex_unlock(&mddev->bitmap_info.mutex);
2015 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery);
2017 mddev_set_timeout(mddev, mddev->bitmap_info.daemon_sleep, true);
2018 md_wakeup_thread(mddev->thread);
2030 struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot)
2035 bitmap = md_bitmap_create(mddev, slot);
2054 int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
2062 bitmap = get_bitmap_from_slot(mddev, slot);
2076 md_bitmap_set_memory_bits(mddev->bitmap, block, 1);
2077 md_bitmap_file_set_bit(mddev->bitmap, block);
2090 md_bitmap_unplug(mddev->bitmap);
2110 chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10;
2117 chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize,
2160 long space = bitmap->mddev->bitmap_info.space;
2167 if (!bitmap->mddev->bitmap_info.external)
2170 bitmap->mddev->bitmap_info.space = space;
2179 if (!bitmap->mddev->bitmap_info.external)
2188 if (bitmap->mddev->bitmap_info.offset || bitmap->mddev->bitmap_info.file)
2190 !bitmap->mddev->bitmap_info.external,
2191 mddev_is_clustered(bitmap->mddev)
2208 bitmap->mddev->pers->quiesce(bitmap->mddev, 1);
2227 bitmap->mddev->bitmap_info.chunksize = 1UL << (chunkshift +
2234 if (mddev_is_clustered(bitmap->mddev)) {
2253 bitmap->mddev->bitmap_info.chunksize =
2327 bitmap->mddev->pers->quiesce(bitmap->mddev, 0);
2336 location_show(struct mddev *mddev, char *page)
2339 if (mddev->bitmap_info.file)
2341 else if (mddev->bitmap_info.offset)
2342 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset);
2350 location_store(struct mddev *mddev, const char *buf, size_t len)
2354 rv = mddev_lock(mddev);
2357 if (mddev->pers) {
2358 if (!mddev->pers->quiesce) {
2362 if (mddev->recovery || mddev->sync_thread) {
2368 if (mddev->bitmap || mddev->bitmap_info.file ||
2369 mddev->bitmap_info.offset) {
2375 if (mddev->pers) {
2376 mddev_suspend(mddev);
2377 md_bitmap_destroy(mddev);
2378 mddev_resume(mddev);
2380 mddev->bitmap_info.offset = 0;
2381 if (mddev->bitmap_info.file) {
2382 struct file *f = mddev->bitmap_info.file;
2383 mddev->bitmap_info.file = NULL;
2406 if (mddev->bitmap_info.external == 0 &&
2407 mddev->major_version == 0 &&
2408 offset != mddev->bitmap_info.default_offset) {
2412 mddev->bitmap_info.offset = offset;
2413 if (mddev->pers) {
2415 bitmap = md_bitmap_create(mddev, -1);
2416 mddev_suspend(mddev);
2420 mddev->bitmap = bitmap;
2421 rv = md_bitmap_load(mddev);
2423 mddev->bitmap_info.offset = 0;
2426 md_bitmap_destroy(mddev);
2427 mddev_resume(mddev);
2430 mddev_resume(mddev);
2434 if (!mddev->external) {
2438 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
2439 md_wakeup_thread(mddev->thread);
2443 mddev_unlock(mddev);
2457 space_show(struct mddev *mddev, char *page)
2459 return sprintf(page, "%lu\n", mddev->bitmap_info.space);
2463 space_store(struct mddev *mddev, const char *buf, size_t len)
2475 if (mddev->bitmap &&
2476 sectors < (mddev->bitmap->storage.bytes + 511) >> 9)
2482 mddev->bitmap_info.space = sectors;
2490 timeout_show(struct mddev *mddev, char *page)
2493 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ;
2494 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ;
2504 timeout_store(struct mddev *mddev, const char *buf, size_t len)
2523 mddev->bitmap_info.daemon_sleep = timeout;
2524 mddev_set_timeout(mddev, timeout, false);
2525 md_wakeup_thread(mddev->thread);
2534 backlog_show(struct mddev *mddev, char *page)
2536 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind);
2540 backlog_store(struct mddev *mddev, const char *buf, size_t len)
2543 unsigned long old_mwb = mddev->bitmap_info.max_write_behind;
2552 rv = mddev_lock(mddev);
2560 rdev_for_each(rdev, mddev) {
2568 mdname(mddev));
2569 mddev_unlock(mddev);
2573 mddev->bitmap_info.max_write_behind = backlog;
2574 if (!backlog && mddev->serial_info_pool) {
2576 if (!mddev->serialize_policy)
2577 mddev_destroy_serial_pool(mddev, NULL, false);
2578 } else if (backlog && !mddev->serial_info_pool) {
2580 rdev_for_each(rdev, mddev)
2581 mddev_create_serial_pool(mddev, rdev, false);
2584 md_bitmap_update_sb(mddev->bitmap);
2586 mddev_unlock(mddev);
2594 chunksize_show(struct mddev *mddev, char *page)
2596 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize);
2600 chunksize_store(struct mddev *mddev, const char *buf, size_t len)
2605 if (mddev->bitmap)
2616 mddev->bitmap_info.chunksize = csize;
2623 static ssize_t metadata_show(struct mddev *mddev, char *page)
2625 if (mddev_is_clustered(mddev))
2627 return sprintf(page, "%s\n", (mddev->bitmap_info.external
2631 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len)
2633 if (mddev->bitmap ||
2634 mddev->bitmap_info.file ||
2635 mddev->bitmap_info.offset)
2638 mddev->bitmap_info.external = 1;
2641 mddev->bitmap_info.external = 0;
2650 static ssize_t can_clear_show(struct mddev *mddev, char *page)
2653 spin_lock(&mddev->lock);
2654 if (mddev->bitmap)
2655 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ?
2659 spin_unlock(&mddev->lock);
2663 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len)
2665 if (mddev->bitmap == NULL)
2668 mddev->bitmap->need_sync = 1;
2670 if (mddev->degraded)
2672 mddev->bitmap->need_sync = 0;
2682 behind_writes_used_show(struct mddev *mddev, char *page)
2685 spin_lock(&mddev->lock);
2686 if (mddev->bitmap == NULL)
2690 mddev->bitmap->behind_writes_used);
2691 spin_unlock(&mddev->lock);
2696 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len)
2698 if (mddev->bitmap)
2699 mddev->bitmap->behind_writes_used = 0;