Lines Matching refs:mddev
37 return bitmap->mddev ? mdname(bitmap->mddev) : "mdX"; in bmname()
149 static int read_sb_page(struct mddev *mddev, loff_t offset, in read_sb_page() argument
158 rdev_for_each(rdev, mddev) { in read_sb_page()
176 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev) in next_active_rdev() argument
194 rdev = list_entry(&mddev->disks, struct md_rdev, same_set); in next_active_rdev()
197 rdev_dec_pending(rdev, mddev); in next_active_rdev()
199 list_for_each_entry_continue_rcu(rdev, &mddev->disks, same_set) { in next_active_rdev()
216 struct mddev *mddev = bitmap->mddev; in write_sb_page() local
221 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) { in write_sb_page()
223 loff_t offset = mddev->bitmap_info.offset; in write_sb_page()
237 if (mddev->external) { in write_sb_page()
244 < (rdev->data_offset + mddev->dev_sectors in write_sb_page()
254 if (rdev->data_offset + mddev->dev_sectors in write_sb_page()
269 md_super_write(mddev, rdev, in write_sb_page()
276 if (wait && md_super_wait(mddev) < 0) in write_sb_page()
442 md_super_wait(bitmap->mddev); in md_bitmap_wait_writes()
451 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */ in md_bitmap_update_sb()
453 if (bitmap->mddev->bitmap_info.external) in md_bitmap_update_sb()
458 sb->events = cpu_to_le64(bitmap->mddev->events); in md_bitmap_update_sb()
459 if (bitmap->mddev->events < bitmap->events_cleared) in md_bitmap_update_sb()
461 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_update_sb()
469 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ); in md_bitmap_update_sb()
470 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_update_sb()
472 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_update_sb()
473 sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize); in md_bitmap_update_sb()
474 sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes); in md_bitmap_update_sb()
475 sb->sectors_reserved = cpu_to_le32(bitmap->mddev-> in md_bitmap_update_sb()
537 chunksize = bitmap->mddev->bitmap_info.chunksize; in md_bitmap_new_disk_sb()
546 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep; in md_bitmap_new_disk_sb()
552 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in md_bitmap_new_disk_sb()
558 write_behind = bitmap->mddev->bitmap_info.max_write_behind; in md_bitmap_new_disk_sb()
562 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in md_bitmap_new_disk_sb()
565 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_new_disk_sb()
567 memcpy(sb->uuid, bitmap->mddev->uuid, 16); in md_bitmap_new_disk_sb()
571 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_new_disk_sb()
572 sb->events_cleared = cpu_to_le64(bitmap->mddev->events); in md_bitmap_new_disk_sb()
573 bitmap->mddev->bitmap_info.nodes = 0; in md_bitmap_new_disk_sb()
591 loff_t offset = bitmap->mddev->bitmap_info.offset; in md_bitmap_read_sb()
593 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) { in md_bitmap_read_sb()
610 sector_t bm_blocks = bitmap->mddev->resync_max_sectors; in md_bitmap_read_sb()
613 bitmap->mddev->bitmap_info.chunksize >> 9); in md_bitmap_read_sb()
618 offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3)); in md_bitmap_read_sb()
630 err = read_sb_page(bitmap->mddev, in md_bitmap_read_sb()
650 strlcpy(bitmap->mddev->bitmap_info.cluster_name, in md_bitmap_read_sb()
675 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in md_bitmap_read_sb()
677 if (bitmap->mddev->persistent) { in md_bitmap_read_sb()
682 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) { in md_bitmap_read_sb()
688 if (!nodes && (events < bitmap->mddev->events)) { in md_bitmap_read_sb()
691 (unsigned long long) bitmap->mddev->events); in md_bitmap_read_sb()
701 strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64); in md_bitmap_read_sb()
707 bitmap->mddev->bitmap_info.chunksize = chunksize; in md_bitmap_read_sb()
709 err = md_setup_cluster(bitmap->mddev, nodes); in md_bitmap_read_sb()
715 bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev); in md_bitmap_read_sb()
722 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_read_sb()
723 bitmap->mddev->bitmap_info.chunksize = chunksize; in md_bitmap_read_sb()
724 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in md_bitmap_read_sb()
725 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in md_bitmap_read_sb()
726 bitmap->mddev->bitmap_info.nodes = nodes; in md_bitmap_read_sb()
727 if (bitmap->mddev->bitmap_info.space == 0 || in md_bitmap_read_sb()
728 bitmap->mddev->bitmap_info.space > sectors_reserved) in md_bitmap_read_sb()
729 bitmap->mddev->bitmap_info.space = sectors_reserved; in md_bitmap_read_sb()
733 md_cluster_stop(bitmap->mddev); in md_bitmap_read_sb()
936 if (mddev_is_clustered(bitmap->mddev)) in md_bitmap_file_set_bit()
965 if (mddev_is_clustered(bitmap->mddev)) in md_bitmap_file_clear_bit()
1030 if (bitmap->mddev->queue) in md_bitmap_unplug()
1031 blk_add_trace_msg(bitmap->mddev->queue, in md_bitmap_unplug()
1074 if (!file && !bitmap->mddev->bitmap_info.offset) { in md_bitmap_init_from_disk()
1103 if (!bitmap->mddev->bitmap_info.external) in md_bitmap_init_from_disk()
1106 if (mddev_is_clustered(bitmap->mddev)) in md_bitmap_init_from_disk()
1126 bitmap->mddev, in md_bitmap_init_from_disk()
1127 bitmap->mddev->bitmap_info.offset, in md_bitmap_init_from_disk()
1230 void md_bitmap_daemon_work(struct mddev *mddev) in md_bitmap_daemon_work() argument
1241 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1242 bitmap = mddev->bitmap; in md_bitmap_daemon_work()
1244 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1248 + mddev->bitmap_info.daemon_sleep)) in md_bitmap_daemon_work()
1253 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; in md_bitmap_daemon_work()
1258 if (bitmap->mddev->queue) in md_bitmap_daemon_work()
1259 blk_add_trace_msg(bitmap->mddev->queue, in md_bitmap_daemon_work()
1273 mddev->bitmap_info.external == 0) { in md_bitmap_daemon_work()
1349 mddev->thread->timeout = in md_bitmap_daemon_work()
1350 mddev->bitmap_info.daemon_sleep; in md_bitmap_daemon_work()
1351 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_daemon_work()
1409 bw, bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_startwrite()
1470 bitmap->mddev->bitmap_info.max_write_behind); in md_bitmap_endwrite()
1485 if (success && !bitmap->mddev->degraded && in md_bitmap_endwrite()
1486 bitmap->events_cleared < bitmap->mddev->events) { in md_bitmap_endwrite()
1487 bitmap->events_cleared = bitmap->mddev->events; in md_bitmap_endwrite()
1606 while (sector < bitmap->mddev->resync_max_sectors) { in md_bitmap_close_sync()
1625 + bitmap->mddev->bitmap_info.daemon_sleep))) in md_bitmap_cond_end_sync()
1627 wait_event(bitmap->mddev->recovery_wait, in md_bitmap_cond_end_sync()
1628 atomic_read(&bitmap->mddev->recovery_active) == 0); in md_bitmap_cond_end_sync()
1630 bitmap->mddev->curr_resync_completed = sector; in md_bitmap_cond_end_sync()
1631 set_bit(MD_SB_CHANGE_CLEAN, &bitmap->mddev->sb_flags); in md_bitmap_cond_end_sync()
1634 while (s < sector && s < bitmap->mddev->resync_max_sectors) { in md_bitmap_cond_end_sync()
1639 sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed"); in md_bitmap_cond_end_sync()
1643 void md_bitmap_sync_with_cluster(struct mddev *mddev, in md_bitmap_sync_with_cluster() argument
1647 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_sync_with_cluster()
1699 if (sec < bitmap->mddev->recovery_cp) in md_bitmap_dirty_bits()
1704 bitmap->mddev->recovery_cp = sec; in md_bitmap_dirty_bits()
1711 void md_bitmap_flush(struct mddev *mddev) in md_bitmap_flush() argument
1713 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_flush()
1722 sleep = mddev->bitmap_info.daemon_sleep * 2; in md_bitmap_flush()
1724 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1726 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1728 md_bitmap_daemon_work(mddev); in md_bitmap_flush()
1746 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info && in md_bitmap_free()
1747 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev)) in md_bitmap_free()
1748 md_cluster_stop(bitmap->mddev); in md_bitmap_free()
1771 void md_bitmap_wait_behind_writes(struct mddev *mddev) in md_bitmap_wait_behind_writes() argument
1773 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_wait_behind_writes()
1778 mdname(mddev)); in md_bitmap_wait_behind_writes()
1785 void md_bitmap_destroy(struct mddev *mddev) in md_bitmap_destroy() argument
1787 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_destroy()
1792 md_bitmap_wait_behind_writes(mddev); in md_bitmap_destroy()
1793 mempool_destroy(mddev->wb_info_pool); in md_bitmap_destroy()
1794 mddev->wb_info_pool = NULL; in md_bitmap_destroy()
1796 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_destroy()
1797 spin_lock(&mddev->lock); in md_bitmap_destroy()
1798 mddev->bitmap = NULL; /* disconnect from the md device */ in md_bitmap_destroy()
1799 spin_unlock(&mddev->lock); in md_bitmap_destroy()
1800 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_destroy()
1801 if (mddev->thread) in md_bitmap_destroy()
1802 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; in md_bitmap_destroy()
1812 struct bitmap *md_bitmap_create(struct mddev *mddev, int slot) in md_bitmap_create() argument
1815 sector_t blocks = mddev->resync_max_sectors; in md_bitmap_create()
1816 struct file *file = mddev->bitmap_info.file; in md_bitmap_create()
1822 BUG_ON(file && mddev->bitmap_info.offset); in md_bitmap_create()
1824 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) { in md_bitmap_create()
1826 mdname(mddev)); in md_bitmap_create()
1840 bitmap->mddev = mddev; in md_bitmap_create()
1843 if (mddev->kobj.sd) in md_bitmap_create()
1844 bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap"); in md_bitmap_create()
1861 if (!mddev->bitmap_info.external) { in md_bitmap_create()
1866 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags)) in md_bitmap_create()
1872 if (mddev->bitmap_info.chunksize == 0 || in md_bitmap_create()
1873 mddev->bitmap_info.daemon_sleep == 0) in md_bitmap_create()
1882 err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1); in md_bitmap_create()
1899 int md_bitmap_load(struct mddev *mddev) in md_bitmap_load() argument
1904 struct bitmap *bitmap = mddev->bitmap; in md_bitmap_load()
1910 rdev_for_each(rdev, mddev) in md_bitmap_load()
1911 mddev_create_wb_pool(mddev, rdev, true); in md_bitmap_load()
1913 if (mddev_is_clustered(mddev)) in md_bitmap_load()
1914 md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes); in md_bitmap_load()
1921 while (sector < mddev->resync_max_sectors) { in md_bitmap_load()
1928 if (mddev->degraded == 0 in md_bitmap_load()
1929 || bitmap->events_cleared == mddev->events) in md_bitmap_load()
1932 start = mddev->recovery_cp; in md_bitmap_load()
1934 mutex_lock(&mddev->bitmap_info.mutex); in md_bitmap_load()
1936 mutex_unlock(&mddev->bitmap_info.mutex); in md_bitmap_load()
1943 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery); in md_bitmap_load()
1945 mddev->thread->timeout = mddev->bitmap_info.daemon_sleep; in md_bitmap_load()
1946 md_wakeup_thread(mddev->thread); in md_bitmap_load()
1957 struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot) in get_bitmap_from_slot() argument
1962 bitmap = md_bitmap_create(mddev, slot); in get_bitmap_from_slot()
1981 int md_bitmap_copy_from_slot(struct mddev *mddev, int slot, in md_bitmap_copy_from_slot() argument
1989 bitmap = get_bitmap_from_slot(mddev, slot); in md_bitmap_copy_from_slot()
2003 md_bitmap_set_memory_bits(mddev->bitmap, block, 1); in md_bitmap_copy_from_slot()
2004 md_bitmap_file_set_bit(mddev->bitmap, block); in md_bitmap_copy_from_slot()
2017 md_bitmap_unplug(mddev->bitmap); in md_bitmap_copy_from_slot()
2036 chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10; in md_bitmap_status()
2043 chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize, in md_bitmap_status()
2086 long space = bitmap->mddev->bitmap_info.space; in md_bitmap_resize()
2093 if (!bitmap->mddev->bitmap_info.external) in md_bitmap_resize()
2096 bitmap->mddev->bitmap_info.space = space; in md_bitmap_resize()
2105 if (!bitmap->mddev->bitmap_info.external) in md_bitmap_resize()
2113 if (bitmap->mddev->bitmap_info.offset || bitmap->mddev->bitmap_info.file) in md_bitmap_resize()
2115 !bitmap->mddev->bitmap_info.external, in md_bitmap_resize()
2116 mddev_is_clustered(bitmap->mddev) in md_bitmap_resize()
2133 bitmap->mddev->pers->quiesce(bitmap->mddev, 1); in md_bitmap_resize()
2152 bitmap->mddev->bitmap_info.chunksize = 1 << (chunkshift + in md_bitmap_resize()
2159 if (mddev_is_clustered(bitmap->mddev)) { in md_bitmap_resize()
2178 bitmap->mddev->bitmap_info.chunksize = 1 << (old_counts.chunkshift + in md_bitmap_resize()
2249 bitmap->mddev->pers->quiesce(bitmap->mddev, 0); in md_bitmap_resize()
2258 location_show(struct mddev *mddev, char *page) in location_show() argument
2261 if (mddev->bitmap_info.file) in location_show()
2263 else if (mddev->bitmap_info.offset) in location_show()
2264 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset); in location_show()
2272 location_store(struct mddev *mddev, const char *buf, size_t len) in location_store() argument
2276 rv = mddev_lock(mddev); in location_store()
2279 if (mddev->pers) { in location_store()
2280 if (!mddev->pers->quiesce) { in location_store()
2284 if (mddev->recovery || mddev->sync_thread) { in location_store()
2290 if (mddev->bitmap || mddev->bitmap_info.file || in location_store()
2291 mddev->bitmap_info.offset) { in location_store()
2297 if (mddev->pers) { in location_store()
2298 mddev_suspend(mddev); in location_store()
2299 md_bitmap_destroy(mddev); in location_store()
2300 mddev_resume(mddev); in location_store()
2302 mddev->bitmap_info.offset = 0; in location_store()
2303 if (mddev->bitmap_info.file) { in location_store()
2304 struct file *f = mddev->bitmap_info.file; in location_store()
2305 mddev->bitmap_info.file = NULL; in location_store()
2328 if (mddev->bitmap_info.external == 0 && in location_store()
2329 mddev->major_version == 0 && in location_store()
2330 offset != mddev->bitmap_info.default_offset) { in location_store()
2334 mddev->bitmap_info.offset = offset; in location_store()
2335 if (mddev->pers) { in location_store()
2337 bitmap = md_bitmap_create(mddev, -1); in location_store()
2338 mddev_suspend(mddev); in location_store()
2342 mddev->bitmap = bitmap; in location_store()
2343 rv = md_bitmap_load(mddev); in location_store()
2345 mddev->bitmap_info.offset = 0; in location_store()
2348 md_bitmap_destroy(mddev); in location_store()
2349 mddev_resume(mddev); in location_store()
2352 mddev_resume(mddev); in location_store()
2356 if (!mddev->external) { in location_store()
2360 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in location_store()
2361 md_wakeup_thread(mddev->thread); in location_store()
2365 mddev_unlock(mddev); in location_store()
2379 space_show(struct mddev *mddev, char *page) in space_show() argument
2381 return sprintf(page, "%lu\n", mddev->bitmap_info.space); in space_show()
2385 space_store(struct mddev *mddev, const char *buf, size_t len) in space_store() argument
2397 if (mddev->bitmap && in space_store()
2398 sectors < (mddev->bitmap->storage.bytes + 511) >> 9) in space_store()
2404 mddev->bitmap_info.space = sectors; in space_store()
2412 timeout_show(struct mddev *mddev, char *page) in timeout_show() argument
2415 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ; in timeout_show()
2416 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ; in timeout_show()
2426 timeout_store(struct mddev *mddev, const char *buf, size_t len) in timeout_store() argument
2444 mddev->bitmap_info.daemon_sleep = timeout; in timeout_store()
2445 if (mddev->thread) { in timeout_store()
2450 if (mddev->thread->timeout < MAX_SCHEDULE_TIMEOUT) { in timeout_store()
2451 mddev->thread->timeout = timeout; in timeout_store()
2452 md_wakeup_thread(mddev->thread); in timeout_store()
2462 backlog_show(struct mddev *mddev, char *page) in backlog_show() argument
2464 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind); in backlog_show()
2468 backlog_store(struct mddev *mddev, const char *buf, size_t len) in backlog_store() argument
2471 unsigned long old_mwb = mddev->bitmap_info.max_write_behind; in backlog_store()
2477 mddev->bitmap_info.max_write_behind = backlog; in backlog_store()
2478 if (!backlog && mddev->wb_info_pool) { in backlog_store()
2480 mempool_destroy(mddev->wb_info_pool); in backlog_store()
2481 mddev->wb_info_pool = NULL; in backlog_store()
2482 } else if (backlog && !mddev->wb_info_pool) { in backlog_store()
2486 rdev_for_each(rdev, mddev) in backlog_store()
2487 mddev_create_wb_pool(mddev, rdev, false); in backlog_store()
2490 md_bitmap_update_sb(mddev->bitmap); in backlog_store()
2498 chunksize_show(struct mddev *mddev, char *page) in chunksize_show() argument
2500 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize); in chunksize_show()
2504 chunksize_store(struct mddev *mddev, const char *buf, size_t len) in chunksize_store() argument
2509 if (mddev->bitmap) in chunksize_store()
2517 mddev->bitmap_info.chunksize = csize; in chunksize_store()
2524 static ssize_t metadata_show(struct mddev *mddev, char *page) in metadata_show() argument
2526 if (mddev_is_clustered(mddev)) in metadata_show()
2528 return sprintf(page, "%s\n", (mddev->bitmap_info.external in metadata_show()
2532 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len) in metadata_store() argument
2534 if (mddev->bitmap || in metadata_store()
2535 mddev->bitmap_info.file || in metadata_store()
2536 mddev->bitmap_info.offset) in metadata_store()
2539 mddev->bitmap_info.external = 1; in metadata_store()
2542 mddev->bitmap_info.external = 0; in metadata_store()
2551 static ssize_t can_clear_show(struct mddev *mddev, char *page) in can_clear_show() argument
2554 spin_lock(&mddev->lock); in can_clear_show()
2555 if (mddev->bitmap) in can_clear_show()
2556 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ? in can_clear_show()
2560 spin_unlock(&mddev->lock); in can_clear_show()
2564 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len) in can_clear_store() argument
2566 if (mddev->bitmap == NULL) in can_clear_store()
2569 mddev->bitmap->need_sync = 1; in can_clear_store()
2571 if (mddev->degraded) in can_clear_store()
2573 mddev->bitmap->need_sync = 0; in can_clear_store()
2583 behind_writes_used_show(struct mddev *mddev, char *page) in behind_writes_used_show() argument
2586 spin_lock(&mddev->lock); in behind_writes_used_show()
2587 if (mddev->bitmap == NULL) in behind_writes_used_show()
2591 mddev->bitmap->behind_writes_used); in behind_writes_used_show()
2592 spin_unlock(&mddev->lock); in behind_writes_used_show()
2597 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len) in behind_writes_used_reset() argument
2599 if (mddev->bitmap) in behind_writes_used_reset()
2600 mddev->bitmap->behind_writes_used = 0; in behind_writes_used_reset()