Lines Matching refs:mddev

35 	return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";  in bmname()
145 static int read_sb_page(struct mddev *mddev, loff_t offset, in read_sb_page() argument
154 rdev_for_each(rdev, mddev) { in read_sb_page()
171 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev) in next_active_rdev() argument
189 rdev = list_entry(&mddev->disks, struct md_rdev, same_set); in next_active_rdev()
192 rdev_dec_pending(rdev, mddev); in next_active_rdev()
194 list_for_each_entry_continue_rcu(rdev, &mddev->disks, same_set) { in next_active_rdev()
211 struct mddev *mddev = bitmap->mddev; in write_sb_page() local
215 if (mddev_is_clustered(bitmap->mddev)) in write_sb_page()
218 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) { in write_sb_page()
220 loff_t offset = mddev->bitmap_info.offset; in write_sb_page()
234 if (mddev->external) { in write_sb_page()
241 < (rdev->data_offset + mddev->dev_sectors in write_sb_page()
251 if (rdev->data_offset + mddev->dev_sectors in write_sb_page()
266 md_super_write(mddev, rdev, in write_sb_page()
274 md_super_wait(mddev); in write_sb_page()
426 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */ in bitmap_update_sb()
428 if (bitmap->mddev->bitmap_info.external) in bitmap_update_sb()
433 sb->events = cpu_to_le64(bitmap->mddev->events); in bitmap_update_sb()
434 if (bitmap->mddev->events < bitmap->events_cleared) in bitmap_update_sb()
436 bitmap->events_cleared = bitmap->mddev->events; in bitmap_update_sb()
440 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ); in bitmap_update_sb()
441 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind); in bitmap_update_sb()
443 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in bitmap_update_sb()
444 sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize); in bitmap_update_sb()
445 sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes); in bitmap_update_sb()
446 sb->sectors_reserved = cpu_to_le32(bitmap->mddev-> in bitmap_update_sb()
507 chunksize = bitmap->mddev->bitmap_info.chunksize; in bitmap_new_disk_sb()
516 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep; in bitmap_new_disk_sb()
523 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in bitmap_new_disk_sb()
529 write_behind = bitmap->mddev->bitmap_info.max_write_behind; in bitmap_new_disk_sb()
533 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in bitmap_new_disk_sb()
536 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in bitmap_new_disk_sb()
538 memcpy(sb->uuid, bitmap->mddev->uuid, 16); in bitmap_new_disk_sb()
542 bitmap->events_cleared = bitmap->mddev->events; in bitmap_new_disk_sb()
543 sb->events_cleared = cpu_to_le64(bitmap->mddev->events); in bitmap_new_disk_sb()
544 bitmap->mddev->bitmap_info.nodes = 0; in bitmap_new_disk_sb()
563 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) { in bitmap_read_sb()
580 sector_t bm_blocks = bitmap->mddev->resync_max_sectors; in bitmap_read_sb()
583 bitmap->mddev->bitmap_info.chunksize >> 9); in bitmap_read_sb()
588 bitmap->mddev->bitmap_info.offset += bitmap->cluster_slot * (bm_blocks << 3); in bitmap_read_sb()
590 bitmap->cluster_slot, (unsigned long long)bitmap->mddev->bitmap_info.offset); in bitmap_read_sb()
600 err = read_sb_page(bitmap->mddev, in bitmap_read_sb()
601 bitmap->mddev->bitmap_info.offset, in bitmap_read_sb()
620 if (!bitmap->mddev->sync_super) { in bitmap_read_sb()
622 strlcpy(bitmap->mddev->bitmap_info.cluster_name, in bitmap_read_sb()
647 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors); in bitmap_read_sb()
649 if (bitmap->mddev->persistent) { in bitmap_read_sb()
654 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) { in bitmap_read_sb()
661 if (!nodes && (events < bitmap->mddev->events)) { in bitmap_read_sb()
666 (unsigned long long) bitmap->mddev->events); in bitmap_read_sb()
676 strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64); in bitmap_read_sb()
682 bitmap->mddev->bitmap_info.chunksize = chunksize; in bitmap_read_sb()
684 err = md_setup_cluster(bitmap->mddev, nodes); in bitmap_read_sb()
690 bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev); in bitmap_read_sb()
697 bitmap->events_cleared = bitmap->mddev->events; in bitmap_read_sb()
698 bitmap->mddev->bitmap_info.chunksize = chunksize; in bitmap_read_sb()
699 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep; in bitmap_read_sb()
700 bitmap->mddev->bitmap_info.max_write_behind = write_behind; in bitmap_read_sb()
701 bitmap->mddev->bitmap_info.nodes = nodes; in bitmap_read_sb()
702 if (bitmap->mddev->bitmap_info.space == 0 || in bitmap_read_sb()
703 bitmap->mddev->bitmap_info.space > sectors_reserved) in bitmap_read_sb()
704 bitmap->mddev->bitmap_info.space = sectors_reserved; in bitmap_read_sb()
708 md_cluster_stop(bitmap->mddev); in bitmap_read_sb()
1002 md_super_wait(bitmap->mddev); in bitmap_unplug()
1036 if (!file && !bitmap->mddev->bitmap_info.offset) { in bitmap_init_from_disk()
1066 if (!bitmap->mddev->bitmap_info.external) in bitmap_init_from_disk()
1069 if (mddev_is_clustered(bitmap->mddev)) in bitmap_init_from_disk()
1089 bitmap->mddev, in bitmap_init_from_disk()
1090 bitmap->mddev->bitmap_info.offset, in bitmap_init_from_disk()
1194 void bitmap_daemon_work(struct mddev *mddev) in bitmap_daemon_work() argument
1205 mutex_lock(&mddev->bitmap_info.mutex); in bitmap_daemon_work()
1206 bitmap = mddev->bitmap; in bitmap_daemon_work()
1208 mutex_unlock(&mddev->bitmap_info.mutex); in bitmap_daemon_work()
1212 + mddev->bitmap_info.daemon_sleep)) in bitmap_daemon_work()
1217 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; in bitmap_daemon_work()
1233 mddev->bitmap_info.external == 0) { in bitmap_daemon_work()
1310 mddev->thread->timeout = in bitmap_daemon_work()
1311 mddev->bitmap_info.daemon_sleep; in bitmap_daemon_work()
1312 mutex_unlock(&mddev->bitmap_info.mutex); in bitmap_daemon_work()
1370 bw, bitmap->mddev->bitmap_info.max_write_behind); in bitmap_startwrite()
1431 bitmap->mddev->bitmap_info.max_write_behind); in bitmap_endwrite()
1446 if (success && !bitmap->mddev->degraded && in bitmap_endwrite()
1447 bitmap->events_cleared < bitmap->mddev->events) { in bitmap_endwrite()
1448 bitmap->events_cleared = bitmap->mddev->events; in bitmap_endwrite()
1567 while (sector < bitmap->mddev->resync_max_sectors) { in bitmap_close_sync()
1586 + bitmap->mddev->bitmap_info.daemon_sleep))) in bitmap_cond_end_sync()
1588 wait_event(bitmap->mddev->recovery_wait, in bitmap_cond_end_sync()
1589 atomic_read(&bitmap->mddev->recovery_active) == 0); in bitmap_cond_end_sync()
1591 bitmap->mddev->curr_resync_completed = sector; in bitmap_cond_end_sync()
1592 set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags); in bitmap_cond_end_sync()
1595 while (s < sector && s < bitmap->mddev->resync_max_sectors) { in bitmap_cond_end_sync()
1600 sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed"); in bitmap_cond_end_sync()
1639 if (sec < bitmap->mddev->recovery_cp) in bitmap_dirty_bits()
1644 bitmap->mddev->recovery_cp = sec; in bitmap_dirty_bits()
1651 void bitmap_flush(struct mddev *mddev) in bitmap_flush() argument
1653 struct bitmap *bitmap = mddev->bitmap; in bitmap_flush()
1662 sleep = mddev->bitmap_info.daemon_sleep * 2; in bitmap_flush()
1664 bitmap_daemon_work(mddev); in bitmap_flush()
1666 bitmap_daemon_work(mddev); in bitmap_flush()
1668 bitmap_daemon_work(mddev); in bitmap_flush()
1683 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info && in bitmap_free()
1684 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev)) in bitmap_free()
1685 md_cluster_stop(bitmap->mddev); in bitmap_free()
1707 void bitmap_destroy(struct mddev *mddev) in bitmap_destroy() argument
1709 struct bitmap *bitmap = mddev->bitmap; in bitmap_destroy()
1714 mutex_lock(&mddev->bitmap_info.mutex); in bitmap_destroy()
1715 spin_lock(&mddev->lock); in bitmap_destroy()
1716 mddev->bitmap = NULL; /* disconnect from the md device */ in bitmap_destroy()
1717 spin_unlock(&mddev->lock); in bitmap_destroy()
1718 mutex_unlock(&mddev->bitmap_info.mutex); in bitmap_destroy()
1719 if (mddev->thread) in bitmap_destroy()
1720 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; in bitmap_destroy()
1732 struct bitmap *bitmap_create(struct mddev *mddev, int slot) in bitmap_create() argument
1735 sector_t blocks = mddev->resync_max_sectors; in bitmap_create()
1736 struct file *file = mddev->bitmap_info.file; in bitmap_create()
1742 BUG_ON(file && mddev->bitmap_info.offset); in bitmap_create()
1754 bitmap->mddev = mddev; in bitmap_create()
1757 if (mddev->kobj.sd) in bitmap_create()
1758 bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap"); in bitmap_create()
1775 if (!mddev->bitmap_info.external) { in bitmap_create()
1780 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags)) in bitmap_create()
1786 if (mddev->bitmap_info.chunksize == 0 || in bitmap_create()
1787 mddev->bitmap_info.daemon_sleep == 0) in bitmap_create()
1796 err = bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1); in bitmap_create()
1813 int bitmap_load(struct mddev *mddev) in bitmap_load() argument
1818 struct bitmap *bitmap = mddev->bitmap; in bitmap_load()
1828 while (sector < mddev->resync_max_sectors) { in bitmap_load()
1835 if (mddev->degraded == 0 in bitmap_load()
1836 || bitmap->events_cleared == mddev->events) in bitmap_load()
1839 start = mddev->recovery_cp; in bitmap_load()
1841 mutex_lock(&mddev->bitmap_info.mutex); in bitmap_load()
1843 mutex_unlock(&mddev->bitmap_info.mutex); in bitmap_load()
1850 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery); in bitmap_load()
1852 mddev->thread->timeout = mddev->bitmap_info.daemon_sleep; in bitmap_load()
1853 md_wakeup_thread(mddev->thread); in bitmap_load()
1867 int bitmap_copy_from_slot(struct mddev *mddev, int slot, in bitmap_copy_from_slot() argument
1873 struct bitmap *bitmap = bitmap_create(mddev, slot); in bitmap_copy_from_slot()
1894 bitmap_set_memory_bits(mddev->bitmap, block, 1); in bitmap_copy_from_slot()
1895 bitmap_file_set_bit(mddev->bitmap, block); in bitmap_copy_from_slot()
1928 chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10; in bitmap_status()
1935 chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize, in bitmap_status()
1973 long space = bitmap->mddev->bitmap_info.space; in bitmap_resize()
1980 if (!bitmap->mddev->bitmap_info.external) in bitmap_resize()
1983 bitmap->mddev->bitmap_info.space = space; in bitmap_resize()
1992 if (!bitmap->mddev->bitmap_info.external) in bitmap_resize()
2000 if (bitmap->mddev->bitmap_info.offset || bitmap->mddev->bitmap_info.file) in bitmap_resize()
2002 !bitmap->mddev->bitmap_info.external, in bitmap_resize()
2003 mddev_is_clustered(bitmap->mddev) in bitmap_resize()
2018 bitmap->mddev->pers->quiesce(bitmap->mddev, 1); in bitmap_resize()
2036 bitmap->mddev->bitmap_info.chunksize = 1 << (chunkshift + in bitmap_resize()
2103 bitmap->mddev->pers->quiesce(bitmap->mddev, 0); in bitmap_resize()
2112 location_show(struct mddev *mddev, char *page) in location_show() argument
2115 if (mddev->bitmap_info.file) in location_show()
2117 else if (mddev->bitmap_info.offset) in location_show()
2118 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset); in location_show()
2126 location_store(struct mddev *mddev, const char *buf, size_t len) in location_store() argument
2129 if (mddev->pers) { in location_store()
2130 if (!mddev->pers->quiesce) in location_store()
2132 if (mddev->recovery || mddev->sync_thread) in location_store()
2136 if (mddev->bitmap || mddev->bitmap_info.file || in location_store()
2137 mddev->bitmap_info.offset) { in location_store()
2141 if (mddev->pers) { in location_store()
2142 mddev->pers->quiesce(mddev, 1); in location_store()
2143 bitmap_destroy(mddev); in location_store()
2144 mddev->pers->quiesce(mddev, 0); in location_store()
2146 mddev->bitmap_info.offset = 0; in location_store()
2147 if (mddev->bitmap_info.file) { in location_store()
2148 struct file *f = mddev->bitmap_info.file; in location_store()
2149 mddev->bitmap_info.file = NULL; in location_store()
2170 if (mddev->bitmap_info.external == 0 && in location_store()
2171 mddev->major_version == 0 && in location_store()
2172 offset != mddev->bitmap_info.default_offset) in location_store()
2174 mddev->bitmap_info.offset = offset; in location_store()
2175 if (mddev->pers) { in location_store()
2177 mddev->pers->quiesce(mddev, 1); in location_store()
2178 bitmap = bitmap_create(mddev, -1); in location_store()
2182 mddev->bitmap = bitmap; in location_store()
2183 rv = bitmap_load(mddev); in location_store()
2185 bitmap_destroy(mddev); in location_store()
2186 mddev->bitmap_info.offset = 0; in location_store()
2189 mddev->pers->quiesce(mddev, 0); in location_store()
2195 if (!mddev->external) { in location_store()
2199 set_bit(MD_CHANGE_DEVS, &mddev->flags); in location_store()
2200 md_wakeup_thread(mddev->thread); in location_store()
2213 space_show(struct mddev *mddev, char *page) in space_show() argument
2215 return sprintf(page, "%lu\n", mddev->bitmap_info.space); in space_show()
2219 space_store(struct mddev *mddev, const char *buf, size_t len) in space_store() argument
2231 if (mddev->bitmap && in space_store()
2232 sectors < (mddev->bitmap->storage.bytes + 511) >> 9) in space_store()
2238 mddev->bitmap_info.space = sectors; in space_store()
2246 timeout_show(struct mddev *mddev, char *page) in timeout_show() argument
2249 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ; in timeout_show()
2250 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ; in timeout_show()
2260 timeout_store(struct mddev *mddev, const char *buf, size_t len) in timeout_store() argument
2278 mddev->bitmap_info.daemon_sleep = timeout; in timeout_store()
2279 if (mddev->thread) { in timeout_store()
2284 if (mddev->thread->timeout < MAX_SCHEDULE_TIMEOUT) { in timeout_store()
2285 mddev->thread->timeout = timeout; in timeout_store()
2286 md_wakeup_thread(mddev->thread); in timeout_store()
2296 backlog_show(struct mddev *mddev, char *page) in backlog_show() argument
2298 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind); in backlog_show()
2302 backlog_store(struct mddev *mddev, const char *buf, size_t len) in backlog_store() argument
2310 mddev->bitmap_info.max_write_behind = backlog; in backlog_store()
2318 chunksize_show(struct mddev *mddev, char *page) in chunksize_show() argument
2320 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize); in chunksize_show()
2324 chunksize_store(struct mddev *mddev, const char *buf, size_t len) in chunksize_store() argument
2329 if (mddev->bitmap) in chunksize_store()
2337 mddev->bitmap_info.chunksize = csize; in chunksize_store()
2344 static ssize_t metadata_show(struct mddev *mddev, char *page) in metadata_show() argument
2346 if (mddev_is_clustered(mddev)) in metadata_show()
2348 return sprintf(page, "%s\n", (mddev->bitmap_info.external in metadata_show()
2352 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len) in metadata_store() argument
2354 if (mddev->bitmap || in metadata_store()
2355 mddev->bitmap_info.file || in metadata_store()
2356 mddev->bitmap_info.offset) in metadata_store()
2359 mddev->bitmap_info.external = 1; in metadata_store()
2362 mddev->bitmap_info.external = 0; in metadata_store()
2371 static ssize_t can_clear_show(struct mddev *mddev, char *page) in can_clear_show() argument
2374 spin_lock(&mddev->lock); in can_clear_show()
2375 if (mddev->bitmap) in can_clear_show()
2376 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ? in can_clear_show()
2380 spin_unlock(&mddev->lock); in can_clear_show()
2384 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len) in can_clear_store() argument
2386 if (mddev->bitmap == NULL) in can_clear_store()
2389 mddev->bitmap->need_sync = 1; in can_clear_store()
2391 if (mddev->degraded) in can_clear_store()
2393 mddev->bitmap->need_sync = 0; in can_clear_store()
2403 behind_writes_used_show(struct mddev *mddev, char *page) in behind_writes_used_show() argument
2406 spin_lock(&mddev->lock); in behind_writes_used_show()
2407 if (mddev->bitmap == NULL) in behind_writes_used_show()
2411 mddev->bitmap->behind_writes_used); in behind_writes_used_show()
2412 spin_unlock(&mddev->lock); in behind_writes_used_show()
2417 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len) in behind_writes_used_reset() argument
2419 if (mddev->bitmap) in behind_writes_used_reset()
2420 mddev->bitmap->behind_writes_used = 0; in behind_writes_used_reset()