Lines Matching refs:mddev

37 	return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";  in bmname()
144 static int read_sb_page(struct mddev *mddev, loff_t offset, in read_sb_page() argument
148 sector_t sector = mddev->bitmap_info.offset + offset + in read_sb_page()
152 rdev_for_each(rdev, mddev) { in read_sb_page()
166 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev) in next_active_rdev() argument
184 rdev = list_entry(&mddev->disks, struct md_rdev, same_set); in next_active_rdev()
187 rdev_dec_pending(rdev, mddev); in next_active_rdev()
189 list_for_each_entry_continue_rcu(rdev, &mddev->disks, same_set) { in next_active_rdev()
228 struct mddev *mddev = bitmap->mddev; in __write_sb_page() local
230 loff_t sboff, offset = mddev->bitmap_info.offset; in __write_sb_page()
250 if (mddev->external) { in __write_sb_page()
253 sboff < (doff + mddev->dev_sectors + PAGE_SIZE / SECTOR_SIZE)) in __write_sb_page()
262 if (doff + mddev->dev_sectors > sboff) in __write_sb_page()
275 md_super_write(mddev, rdev, sboff + ps, (int) size, page); in __write_sb_page()
282 struct mddev *mddev = bitmap->mddev; in write_sb_page() local
287 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) { in write_sb_page()
293 } while (wait && md_super_wait(mddev) < 0); in write_sb_page()
440 if (mddev_is_clustered(bitmap->mddev)) { in filemap_write_page()
469 md_super_wait(bitmap->mddev); in md_bitmap_wait_writes()
478 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */ in md_bitmap_update_sb()
480 if (bitmap->mddev->bitmap_info.external) in md_bitmap_update_sb()
485 sb->events = cpu_to_le64(bitmap->mddev->events); in md_bitmap_update_sb()
486 if (bitmap->mddev->events < bitmap->events_cleared) in md_bitmap_update_sb()
488 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_update_sb()
496 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ); in md_bitmap_update_sb()
497 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_update_sb()
499 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_update_sb()
500 sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize); in md_bitmap_update_sb()
501 sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes); in md_bitmap_update_sb()
502 sb->sectors_reserved = cpu_to_le32(bitmap->mddev-> in md_bitmap_update_sb()
569 chunksize = bitmap->mddev->bitmap_info.chunksize; in md_bitmap_new_disk_sb()
578 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep; in md_bitmap_new_disk_sb()
584 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in md_bitmap_new_disk_sb()
590 write_behind = bitmap->mddev->bitmap_info.max_write_behind; in md_bitmap_new_disk_sb()
594 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in md_bitmap_new_disk_sb()
597 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_new_disk_sb()
599 memcpy(sb->uuid, bitmap->mddev->uuid, 16); in md_bitmap_new_disk_sb()
603 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_new_disk_sb()
604 sb->events_cleared = cpu_to_le64(bitmap->mddev->events); in md_bitmap_new_disk_sb()
605 bitmap->mddev->bitmap_info.nodes = 0; in md_bitmap_new_disk_sb()
625 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) { in md_bitmap_read_sb()
642 sector_t bm_blocks = bitmap->mddev->resync_max_sectors; in md_bitmap_read_sb()
645 (bitmap->mddev->bitmap_info.chunksize >> 9)); in md_bitmap_read_sb()
662 err = read_sb_page(bitmap->mddev, offset, sb_page, 0, in md_bitmap_read_sb()
702 strscpy(bitmap->mddev->bitmap_info.cluster_name, in md_bitmap_read_sb()
707 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_read_sb()
709 if (bitmap->mddev->persistent) { in md_bitmap_read_sb()
714 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) { in md_bitmap_read_sb()
720 if (!nodes && (events < bitmap->mddev->events)) { in md_bitmap_read_sb()
723 (unsigned long long) bitmap->mddev->events); in md_bitmap_read_sb()
739 bitmap->mddev->bitmap_info.chunksize = chunksize; in md_bitmap_read_sb()
740 err = md_setup_cluster(bitmap->mddev, nodes); in md_bitmap_read_sb()
746 bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev); in md_bitmap_read_sb()
753 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_read_sb()
754 bitmap->mddev->bitmap_info.chunksize = chunksize; in md_bitmap_read_sb()
755 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in md_bitmap_read_sb()
756 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in md_bitmap_read_sb()
757 bitmap->mddev->bitmap_info.nodes = nodes; in md_bitmap_read_sb()
758 if (bitmap->mddev->bitmap_info.space == 0 || in md_bitmap_read_sb()
759 bitmap->mddev->bitmap_info.space > sectors_reserved) in md_bitmap_read_sb()
760 bitmap->mddev->bitmap_info.space = sectors_reserved; in md_bitmap_read_sb()
764 md_cluster_stop(bitmap->mddev); in md_bitmap_read_sb()
955 if (mddev_is_clustered(bitmap->mddev)) in md_bitmap_file_set_bit()
985 if (mddev_is_clustered(bitmap->mddev)) in md_bitmap_file_clear_bit()
1046 if (bitmap->mddev->queue) in md_bitmap_unplug()
1047 blk_add_trace_msg(bitmap->mddev->queue, in md_bitmap_unplug()
1108 struct mddev *mddev = bitmap->mddev; in md_bitmap_init_from_disk() local
1117 if (!file && !mddev->bitmap_info.offset) { in md_bitmap_init_from_disk()
1141 if (mddev_is_clustered(mddev)) in md_bitmap_init_from_disk()
1157 ret = read_sb_page(mddev, 0, page, i + node_offset, in md_bitmap_init_from_disk()
1172 if (i == 0 && !mddev->bitmap_info.external) in md_bitmap_init_from_disk()
1269 static void mddev_set_timeout(struct mddev *mddev, unsigned long timeout, in mddev_set_timeout() argument
1275 thread = rcu_dereference(mddev->thread); in mddev_set_timeout()
1291 void md_bitmap_daemon_work(struct mddev *mddev) in md_bitmap_daemon_work() argument
1302 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1303 bitmap = mddev->bitmap; in md_bitmap_daemon_work()
1305 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1309 + mddev->bitmap_info.daemon_sleep)) in md_bitmap_daemon_work()
1314 mddev_set_timeout(mddev, MAX_SCHEDULE_TIMEOUT, true); in md_bitmap_daemon_work()
1319 if (bitmap->mddev->queue) in md_bitmap_daemon_work()
1320 blk_add_trace_msg(bitmap->mddev->queue, in md_bitmap_daemon_work()
1334 mddev->bitmap_info.external == 0) { in md_bitmap_daemon_work()
1410 mddev_set_timeout(mddev, mddev->bitmap_info.daemon_sleep, true); in md_bitmap_daemon_work()
1411 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1477 bw, bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_startwrite()
1538 bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_endwrite()
1553 if (success && !bitmap->mddev->degraded && in md_bitmap_endwrite()
1554 bitmap->events_cleared < bitmap->mddev->events) { in md_bitmap_endwrite()
1555 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_endwrite()
1674 while (sector < bitmap->mddev->resync_max_sectors) { in md_bitmap_close_sync()
1693 + bitmap->mddev->bitmap_info.daemon_sleep))) in md_bitmap_cond_end_sync()
1695 wait_event(bitmap->mddev->recovery_wait, in md_bitmap_cond_end_sync()
1696 atomic_read(&bitmap->mddev->recovery_active) == 0); in md_bitmap_cond_end_sync()
1698 bitmap->mddev->curr_resync_completed = sector; in md_bitmap_cond_end_sync()
1699 set_bit(MD_SB_CHANGE_CLEAN, &bitmap->mddev->sb_flags); in md_bitmap_cond_end_sync()
1702 while (s < sector && s < bitmap->mddev->resync_max_sectors) { in md_bitmap_cond_end_sync()
1707 sysfs_notify_dirent_safe(bitmap->mddev->sysfs_completed); in md_bitmap_cond_end_sync()
1711 void md_bitmap_sync_with_cluster(struct mddev *mddev, in md_bitmap_sync_with_cluster() argument
1715 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_sync_with_cluster()
1767 if (sec < bitmap->mddev->recovery_cp) in md_bitmap_dirty_bits()
1772 bitmap->mddev->recovery_cp = sec; in md_bitmap_dirty_bits()
1779 void md_bitmap_flush(struct mddev *mddev) in md_bitmap_flush() argument
1781 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_flush()
1790 sleep = mddev->bitmap_info.daemon_sleep * 2; in md_bitmap_flush()
1792 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1794 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1796 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1797 if (mddev->bitmap_info.external) in md_bitmap_flush()
1798 md_super_wait(mddev); in md_bitmap_flush()
1816 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info && in md_bitmap_free()
1817 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev)) in md_bitmap_free()
1818 md_cluster_stop(bitmap->mddev); in md_bitmap_free()
1841 void md_bitmap_wait_behind_writes(struct mddev *mddev) in md_bitmap_wait_behind_writes() argument
1843 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_wait_behind_writes()
1848 mdname(mddev)); in md_bitmap_wait_behind_writes()
1855 void md_bitmap_destroy(struct mddev *mddev) in md_bitmap_destroy() argument
1857 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_destroy()
1862 md_bitmap_wait_behind_writes(mddev); in md_bitmap_destroy()
1863 if (!mddev->serialize_policy) in md_bitmap_destroy()
1864 mddev_destroy_serial_pool(mddev, NULL, true); in md_bitmap_destroy()
1866 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_destroy()
1867 spin_lock(&mddev->lock); in md_bitmap_destroy()
1868 mddev->bitmap = NULL; /* disconnect from the md device */ in md_bitmap_destroy()
1869 spin_unlock(&mddev->lock); in md_bitmap_destroy()
1870 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_destroy()
1871 mddev_set_timeout(mddev, MAX_SCHEDULE_TIMEOUT, true); in md_bitmap_destroy()
1881 struct bitmap *md_bitmap_create(struct mddev *mddev, int slot) in md_bitmap_create() argument
1884 sector_t blocks = mddev->resync_max_sectors; in md_bitmap_create()
1885 struct file *file = mddev->bitmap_info.file; in md_bitmap_create()
1891 BUG_ON(file && mddev->bitmap_info.offset); in md_bitmap_create()
1893 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) { in md_bitmap_create()
1895 mdname(mddev)); in md_bitmap_create()
1909 bitmap->mddev = mddev; in md_bitmap_create()
1912 if (mddev->kobj.sd) in md_bitmap_create()
1913 bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap"); in md_bitmap_create()
1930 if (!mddev->bitmap_info.external) { in md_bitmap_create()
1935 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags)) in md_bitmap_create()
1941 if (mddev->bitmap_info.chunksize == 0 || in md_bitmap_create()
1942 mddev->bitmap_info.daemon_sleep == 0) in md_bitmap_create()
1951 err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1); in md_bitmap_create()
1968 int md_bitmap_load(struct mddev *mddev) in md_bitmap_load() argument
1973 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_load()
1979 rdev_for_each(rdev, mddev) in md_bitmap_load()
1980 mddev_create_serial_pool(mddev, rdev, true); in md_bitmap_load()
1982 if (mddev_is_clustered(mddev)) in md_bitmap_load()
1983 md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes); in md_bitmap_load()
1990 while (sector < mddev->resync_max_sectors) { in md_bitmap_load()
1997 if (mddev->degraded == 0 in md_bitmap_load()
1998 || bitmap->events_cleared == mddev->events) in md_bitmap_load()
2001 start = mddev->recovery_cp; in md_bitmap_load()
2003 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_load()
2005 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_load()
2012 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery); in md_bitmap_load()
2014 mddev_set_timeout(mddev, mddev->bitmap_info.daemon_sleep, true); in md_bitmap_load()
2015 md_wakeup_thread(mddev->thread); in md_bitmap_load()
2027 struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot) in get_bitmap_from_slot() argument
2032 bitmap = md_bitmap_create(mddev, slot); in get_bitmap_from_slot()
2051 int md_bitmap_copy_from_slot(struct mddev *mddev, int slot, in md_bitmap_copy_from_slot() argument
2059 bitmap = get_bitmap_from_slot(mddev, slot); in md_bitmap_copy_from_slot()
2073 md_bitmap_set_memory_bits(mddev->bitmap, block, 1); in md_bitmap_copy_from_slot()
2074 md_bitmap_file_set_bit(mddev->bitmap, block); in md_bitmap_copy_from_slot()
2087 md_bitmap_unplug(mddev->bitmap); in md_bitmap_copy_from_slot()
2107 chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10; in md_bitmap_status()
2114 chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize, in md_bitmap_status()
2157 long space = bitmap->mddev->bitmap_info.space; in md_bitmap_resize()
2164 if (!bitmap->mddev->bitmap_info.external) in md_bitmap_resize()
2167 bitmap->mddev->bitmap_info.space = space; in md_bitmap_resize()
2176 if (!bitmap->mddev->bitmap_info.external) in md_bitmap_resize()
2185 if (bitmap->mddev->bitmap_info.offset || bitmap->mddev->bitmap_info.file) in md_bitmap_resize()
2187 !bitmap->mddev->bitmap_info.external, in md_bitmap_resize()
2188 mddev_is_clustered(bitmap->mddev) in md_bitmap_resize()
2205 bitmap->mddev->pers->quiesce(bitmap->mddev, 1); in md_bitmap_resize()
2224 bitmap->mddev->bitmap_info.chunksize = 1UL << (chunkshift + in md_bitmap_resize()
2231 if (mddev_is_clustered(bitmap->mddev)) { in md_bitmap_resize()
2250 bitmap->mddev->bitmap_info.chunksize = in md_bitmap_resize()
2324 bitmap->mddev->pers->quiesce(bitmap->mddev, 0); in md_bitmap_resize()
2333 location_show(struct mddev *mddev, char *page) in location_show() argument
2336 if (mddev->bitmap_info.file) in location_show()
2338 else if (mddev->bitmap_info.offset) in location_show()
2339 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset); in location_show()
2347 location_store(struct mddev *mddev, const char *buf, size_t len) in location_store() argument
2351 rv = mddev_lock(mddev); in location_store()
2354 if (mddev->pers) { in location_store()
2355 if (!mddev->pers->quiesce) { in location_store()
2359 if (mddev->recovery || mddev->sync_thread) { in location_store()
2365 if (mddev->bitmap || mddev->bitmap_info.file || in location_store()
2366 mddev->bitmap_info.offset) { in location_store()
2372 if (mddev->pers) { in location_store()
2373 mddev_suspend(mddev); in location_store()
2374 md_bitmap_destroy(mddev); in location_store()
2375 mddev_resume(mddev); in location_store()
2377 mddev->bitmap_info.offset = 0; in location_store()
2378 if (mddev->bitmap_info.file) { in location_store()
2379 struct file *f = mddev->bitmap_info.file; in location_store()
2380 mddev->bitmap_info.file = NULL; in location_store()
2403 if (mddev->bitmap_info.external == 0 && in location_store()
2404 mddev->major_version == 0 && in location_store()
2405 offset != mddev->bitmap_info.default_offset) { in location_store()
2409 mddev->bitmap_info.offset = offset; in location_store()
2410 if (mddev->pers) { in location_store()
2412 bitmap = md_bitmap_create(mddev, -1); in location_store()
2413 mddev_suspend(mddev); in location_store()
2417 mddev->bitmap = bitmap; in location_store()
2418 rv = md_bitmap_load(mddev); in location_store()
2420 mddev->bitmap_info.offset = 0; in location_store()
2423 md_bitmap_destroy(mddev); in location_store()
2424 mddev_resume(mddev); in location_store()
2427 mddev_resume(mddev); in location_store()
2431 if (!mddev->external) { in location_store()
2435 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in location_store()
2436 md_wakeup_thread(mddev->thread); in location_store()
2440 mddev_unlock(mddev); in location_store()
2454 space_show(struct mddev *mddev, char *page) in space_show() argument
2456 return sprintf(page, "%lu\n", mddev->bitmap_info.space); in space_show()
2460 space_store(struct mddev *mddev, const char *buf, size_t len) in space_store() argument
2472 if (mddev->bitmap && in space_store()
2473 sectors < (mddev->bitmap->storage.bytes + 511) >> 9) in space_store()
2479 mddev->bitmap_info.space = sectors; in space_store()
2487 timeout_show(struct mddev *mddev, char *page) in timeout_show() argument
2490 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ; in timeout_show()
2491 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ; in timeout_show()
2501 timeout_store(struct mddev *mddev, const char *buf, size_t len) in timeout_store() argument
2520 mddev->bitmap_info.daemon_sleep = timeout; in timeout_store()
2521 mddev_set_timeout(mddev, timeout, false); in timeout_store()
2522 md_wakeup_thread(mddev->thread); in timeout_store()
2531 backlog_show(struct mddev *mddev, char *page) in backlog_show() argument
2533 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind); in backlog_show()
2537 backlog_store(struct mddev *mddev, const char *buf, size_t len) in backlog_store() argument
2540 unsigned long old_mwb = mddev->bitmap_info.max_write_behind; in backlog_store()
2549 rv = mddev_lock(mddev); in backlog_store()
2557 rdev_for_each(rdev, mddev) { in backlog_store()
2565 mdname(mddev)); in backlog_store()
2566 mddev_unlock(mddev); in backlog_store()
2570 mddev->bitmap_info.max_write_behind = backlog; in backlog_store()
2571 if (!backlog && mddev->serial_info_pool) { in backlog_store()
2573 if (!mddev->serialize_policy) in backlog_store()
2574 mddev_destroy_serial_pool(mddev, NULL, false); in backlog_store()
2575 } else if (backlog && !mddev->serial_info_pool) { in backlog_store()
2577 rdev_for_each(rdev, mddev) in backlog_store()
2578 mddev_create_serial_pool(mddev, rdev, false); in backlog_store()
2581 md_bitmap_update_sb(mddev->bitmap); in backlog_store()
2583 mddev_unlock(mddev); in backlog_store()
2591 chunksize_show(struct mddev *mddev, char *page) in chunksize_show() argument
2593 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize); in chunksize_show()
2597 chunksize_store(struct mddev *mddev, const char *buf, size_t len) in chunksize_store() argument
2602 if (mddev->bitmap) in chunksize_store()
2613 mddev->bitmap_info.chunksize = csize; in chunksize_store()
2620 static ssize_t metadata_show(struct mddev *mddev, char *page) in metadata_show() argument
2622 if (mddev_is_clustered(mddev)) in metadata_show()
2624 return sprintf(page, "%s\n", (mddev->bitmap_info.external in metadata_show()
2628 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len) in metadata_store() argument
2630 if (mddev->bitmap || in metadata_store()
2631 mddev->bitmap_info.file || in metadata_store()
2632 mddev->bitmap_info.offset) in metadata_store()
2635 mddev->bitmap_info.external = 1; in metadata_store()
2638 mddev->bitmap_info.external = 0; in metadata_store()
2647 static ssize_t can_clear_show(struct mddev *mddev, char *page) in can_clear_show() argument
2650 spin_lock(&mddev->lock); in can_clear_show()
2651 if (mddev->bitmap) in can_clear_show()
2652 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ? in can_clear_show()
2656 spin_unlock(&mddev->lock); in can_clear_show()
2660 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len) in can_clear_store() argument
2662 if (mddev->bitmap == NULL) in can_clear_store()
2665 mddev->bitmap->need_sync = 1; in can_clear_store()
2667 if (mddev->degraded) in can_clear_store()
2669 mddev->bitmap->need_sync = 0; in can_clear_store()
2679 behind_writes_used_show(struct mddev *mddev, char *page) in behind_writes_used_show() argument
2682 spin_lock(&mddev->lock); in behind_writes_used_show()
2683 if (mddev->bitmap == NULL) in behind_writes_used_show()
2687 mddev->bitmap->behind_writes_used); in behind_writes_used_show()
2688 spin_unlock(&mddev->lock); in behind_writes_used_show()
2693 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len) in behind_writes_used_reset() argument
2695 if (mddev->bitmap) in behind_writes_used_reset()
2696 mddev->bitmap->behind_writes_used = 0; in behind_writes_used_reset()