Lines Matching defs:mddev
37 return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
142 static int read_sb_page(struct mddev *mddev, loff_t offset,
151 rdev_for_each(rdev, mddev) {
169 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev)
171 /* Iterate the disks of an mddev, using rcu to protect access to the
187 rdev = list_entry(&mddev->disks, struct md_rdev, same_set);
190 rdev_dec_pending(rdev, mddev);
192 list_for_each_entry_continue_rcu(rdev, &mddev->disks, same_set) {
209 struct mddev *mddev = bitmap->mddev;
214 while ((rdev = next_active_rdev(rdev, mddev)) != NULL) {
216 loff_t offset = mddev->bitmap_info.offset;
230 if (mddev->external) {
237 < (rdev->data_offset + mddev->dev_sectors
247 if (rdev->data_offset + mddev->dev_sectors
262 md_super_write(mddev, rdev,
269 if (wait && md_super_wait(mddev) < 0)
432 md_super_wait(bitmap->mddev);
441 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
443 if (bitmap->mddev->bitmap_info.external)
448 sb->events = cpu_to_le64(bitmap->mddev->events);
449 if (bitmap->mddev->events < bitmap->events_cleared)
451 bitmap->events_cleared = bitmap->mddev->events;
459 sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ);
460 sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind);
462 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
463 sb->chunksize = cpu_to_le32(bitmap->mddev->bitmap_info.chunksize);
464 sb->nodes = cpu_to_le32(bitmap->mddev->bitmap_info.nodes);
465 sb->sectors_reserved = cpu_to_le32(bitmap->mddev->
527 chunksize = bitmap->mddev->bitmap_info.chunksize;
536 daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep;
542 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
548 write_behind = bitmap->mddev->bitmap_info.max_write_behind;
552 bitmap->mddev->bitmap_info.max_write_behind = write_behind;
555 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
557 memcpy(sb->uuid, bitmap->mddev->uuid, 16);
561 bitmap->events_cleared = bitmap->mddev->events;
562 sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
563 bitmap->mddev->bitmap_info.nodes = 0;
581 loff_t offset = bitmap->mddev->bitmap_info.offset;
583 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) {
600 sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
603 (bitmap->mddev->bitmap_info.chunksize >> 9));
608 offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3));
620 err = read_sb_page(bitmap->mddev,
662 strlcpy(bitmap->mddev->bitmap_info.cluster_name,
667 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
669 if (bitmap->mddev->persistent) {
672 * bitmap's UUID and event counter to the mddev's
674 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
680 if (!nodes && (events < bitmap->mddev->events)) {
683 (unsigned long long) bitmap->mddev->events);
693 strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64);
700 bitmap->mddev->bitmap_info.chunksize = chunksize;
701 err = md_setup_cluster(bitmap->mddev, nodes);
707 bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev);
714 bitmap->events_cleared = bitmap->mddev->events;
715 bitmap->mddev->bitmap_info.chunksize = chunksize;
716 bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
717 bitmap->mddev->bitmap_info.max_write_behind = write_behind;
718 bitmap->mddev->bitmap_info.nodes = nodes;
719 if (bitmap->mddev->bitmap_info.space == 0 ||
720 bitmap->mddev->bitmap_info.space > sectors_reserved)
721 bitmap->mddev->bitmap_info.space = sectors_reserved;
725 md_cluster_stop(bitmap->mddev);
928 if (mddev_is_clustered(bitmap->mddev))
957 if (mddev_is_clustered(bitmap->mddev))
1020 if (bitmap->mddev->queue)
1021 blk_add_trace_msg(bitmap->mddev->queue,
1064 if (!file && !bitmap->mddev->bitmap_info.offset) {
1093 if (!bitmap->mddev->bitmap_info.external)
1096 if (mddev_is_clustered(bitmap->mddev))
1116 bitmap->mddev,
1117 bitmap->mddev->bitmap_info.offset,
1220 void md_bitmap_daemon_work(struct mddev *mddev)
1231 mutex_lock(&mddev->bitmap_info.mutex);
1232 bitmap = mddev->bitmap;
1234 mutex_unlock(&mddev->bitmap_info.mutex);
1238 + mddev->bitmap_info.daemon_sleep))
1243 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT;
1248 if (bitmap->mddev->queue)
1249 blk_add_trace_msg(bitmap->mddev->queue,
1263 mddev->bitmap_info.external == 0) {
1340 mddev->thread->timeout =
1341 mddev->bitmap_info.daemon_sleep;
1342 mutex_unlock(&mddev->bitmap_info.mutex);
1408 bw, bitmap->mddev->bitmap_info.max_write_behind);
1469 bitmap->mddev->bitmap_info.max_write_behind);
1484 if (success && !bitmap->mddev->degraded &&
1485 bitmap->events_cleared < bitmap->mddev->events) {
1486 bitmap->events_cleared = bitmap->mddev->events;
1605 while (sector < bitmap->mddev->resync_max_sectors) {
1624 + bitmap->mddev->bitmap_info.daemon_sleep)))
1626 wait_event(bitmap->mddev->recovery_wait,
1627 atomic_read(&bitmap->mddev->recovery_active) == 0);
1629 bitmap->mddev->curr_resync_completed = sector;
1630 set_bit(MD_SB_CHANGE_CLEAN, &bitmap->mddev->sb_flags);
1633 while (s < sector && s < bitmap->mddev->resync_max_sectors) {
1638 sysfs_notify_dirent_safe(bitmap->mddev->sysfs_completed);
1642 void md_bitmap_sync_with_cluster(struct mddev *mddev,
1646 struct bitmap *bitmap = mddev->bitmap;
1698 if (sec < bitmap->mddev->recovery_cp)
1703 bitmap->mddev->recovery_cp = sec;
1710 void md_bitmap_flush(struct mddev *mddev)
1712 struct bitmap *bitmap = mddev->bitmap;
1721 sleep = mddev->bitmap_info.daemon_sleep * 2;
1723 md_bitmap_daemon_work(mddev);
1725 md_bitmap_daemon_work(mddev);
1727 md_bitmap_daemon_work(mddev);
1728 if (mddev->bitmap_info.external)
1729 md_super_wait(mddev);
1747 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info &&
1748 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev))
1749 md_cluster_stop(bitmap->mddev);
1772 void md_bitmap_wait_behind_writes(struct mddev *mddev)
1774 struct bitmap *bitmap = mddev->bitmap;
1779 mdname(mddev));
1786 void md_bitmap_destroy(struct mddev *mddev)
1788 struct bitmap *bitmap = mddev->bitmap;
1793 md_bitmap_wait_behind_writes(mddev);
1794 if (!mddev->serialize_policy)
1795 mddev_destroy_serial_pool(mddev, NULL, true);
1797 mutex_lock(&mddev->bitmap_info.mutex);
1798 spin_lock(&mddev->lock);
1799 mddev->bitmap = NULL; /* disconnect from the md device */
1800 spin_unlock(&mddev->lock);
1801 mutex_unlock(&mddev->bitmap_info.mutex);
1802 if (mddev->thread)
1803 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT;
1811 * once mddev->bitmap is set
1813 struct bitmap *md_bitmap_create(struct mddev *mddev, int slot)
1816 sector_t blocks = mddev->resync_max_sectors;
1817 struct file *file = mddev->bitmap_info.file;
1823 BUG_ON(file && mddev->bitmap_info.offset);
1825 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) {
1827 mdname(mddev));
1841 bitmap->mddev = mddev;
1844 if (mddev->kobj.sd)
1845 bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap");
1861 /* read superblock from bitmap file (this sets mddev->bitmap_info.chunksize) */
1862 if (!mddev->bitmap_info.external) {
1867 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags))
1873 if (mddev->bitmap_info.chunksize == 0 ||
1874 mddev->bitmap_info.daemon_sleep == 0)
1883 err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1);
1900 int md_bitmap_load(struct mddev *mddev)
1905 struct bitmap *bitmap = mddev->bitmap;
1911 rdev_for_each(rdev, mddev)
1912 mddev_create_serial_pool(mddev, rdev, true);
1914 if (mddev_is_clustered(mddev))
1915 md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes);
1922 while (sector < mddev->resync_max_sectors) {
1929 if (mddev->degraded == 0
1930 || bitmap->events_cleared == mddev->events)
1933 start = mddev->recovery_cp;
1935 mutex_lock(&mddev->bitmap_info.mutex);
1937 mutex_unlock(&mddev->bitmap_info.mutex);
1944 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery);
1946 mddev->thread->timeout = mddev->bitmap_info.daemon_sleep;
1947 md_wakeup_thread(mddev->thread);
1959 struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot)
1964 bitmap = md_bitmap_create(mddev, slot);
1983 int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
1991 bitmap = get_bitmap_from_slot(mddev, slot);
2005 md_bitmap_set_memory_bits(mddev->bitmap, block, 1);
2006 md_bitmap_file_set_bit(mddev->bitmap, block);
2019 md_bitmap_unplug(mddev->bitmap);
2039 chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10;
2046 chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize,
2089 long space = bitmap->mddev->bitmap_info.space;
2096 if (!bitmap->mddev->bitmap_info.external)
2099 bitmap->mddev->bitmap_info.space = space;
2108 if (!bitmap->mddev->bitmap_info.external)
2117 if (bitmap->mddev->bitmap_info.offset || bitmap->mddev->bitmap_info.file)
2119 !bitmap->mddev->bitmap_info.external,
2120 mddev_is_clustered(bitmap->mddev)
2137 bitmap->mddev->pers->quiesce(bitmap->mddev, 1);
2156 bitmap->mddev->bitmap_info.chunksize = 1UL << (chunkshift +
2163 if (mddev_is_clustered(bitmap->mddev)) {
2182 bitmap->mddev->bitmap_info.chunksize =
2256 bitmap->mddev->pers->quiesce(bitmap->mddev, 0);
2265 location_show(struct mddev *mddev, char *page)
2268 if (mddev->bitmap_info.file)
2270 else if (mddev->bitmap_info.offset)
2271 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset);
2279 location_store(struct mddev *mddev, const char *buf, size_t len)
2283 rv = mddev_lock(mddev);
2286 if (mddev->pers) {
2287 if (!mddev->pers->quiesce) {
2291 if (mddev->recovery || mddev->sync_thread) {
2297 if (mddev->bitmap || mddev->bitmap_info.file ||
2298 mddev->bitmap_info.offset) {
2304 if (mddev->pers) {
2305 mddev_suspend(mddev);
2306 md_bitmap_destroy(mddev);
2307 mddev_resume(mddev);
2309 mddev->bitmap_info.offset = 0;
2310 if (mddev->bitmap_info.file) {
2311 struct file *f = mddev->bitmap_info.file;
2312 mddev->bitmap_info.file = NULL;
2335 if (mddev->bitmap_info.external == 0 &&
2336 mddev->major_version == 0 &&
2337 offset != mddev->bitmap_info.default_offset) {
2341 mddev->bitmap_info.offset = offset;
2342 if (mddev->pers) {
2344 bitmap = md_bitmap_create(mddev, -1);
2345 mddev_suspend(mddev);
2349 mddev->bitmap = bitmap;
2350 rv = md_bitmap_load(mddev);
2352 mddev->bitmap_info.offset = 0;
2355 md_bitmap_destroy(mddev);
2356 mddev_resume(mddev);
2359 mddev_resume(mddev);
2363 if (!mddev->external) {
2367 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
2368 md_wakeup_thread(mddev->thread);
2372 mddev_unlock(mddev);
2386 space_show(struct mddev *mddev, char *page)
2388 return sprintf(page, "%lu\n", mddev->bitmap_info.space);
2392 space_store(struct mddev *mddev, const char *buf, size_t len)
2404 if (mddev->bitmap &&
2405 sectors < (mddev->bitmap->storage.bytes + 511) >> 9)
2411 mddev->bitmap_info.space = sectors;
2419 timeout_show(struct mddev *mddev, char *page)
2422 unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ;
2423 unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ;
2433 timeout_store(struct mddev *mddev, const char *buf, size_t len)
2451 mddev->bitmap_info.daemon_sleep = timeout;
2452 if (mddev->thread) {
2457 if (mddev->thread->timeout < MAX_SCHEDULE_TIMEOUT) {
2458 mddev->thread->timeout = timeout;
2459 md_wakeup_thread(mddev->thread);
2469 backlog_show(struct mddev *mddev, char *page)
2471 return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind);
2475 backlog_store(struct mddev *mddev, const char *buf, size_t len)
2478 unsigned long old_mwb = mddev->bitmap_info.max_write_behind;
2487 rv = mddev_lock(mddev);
2495 rdev_for_each(rdev, mddev) {
2503 mdname(mddev));
2504 mddev_unlock(mddev);
2508 mddev->bitmap_info.max_write_behind = backlog;
2509 if (!backlog && mddev->serial_info_pool) {
2511 if (!mddev->serialize_policy)
2512 mddev_destroy_serial_pool(mddev, NULL, false);
2513 } else if (backlog && !mddev->serial_info_pool) {
2515 rdev_for_each(rdev, mddev)
2516 mddev_create_serial_pool(mddev, rdev, false);
2519 md_bitmap_update_sb(mddev->bitmap);
2521 mddev_unlock(mddev);
2529 chunksize_show(struct mddev *mddev, char *page)
2531 return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize);
2535 chunksize_store(struct mddev *mddev, const char *buf, size_t len)
2540 if (mddev->bitmap)
2551 mddev->bitmap_info.chunksize = csize;
2558 static ssize_t metadata_show(struct mddev *mddev, char *page)
2560 if (mddev_is_clustered(mddev))
2562 return sprintf(page, "%s\n", (mddev->bitmap_info.external
2566 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len)
2568 if (mddev->bitmap ||
2569 mddev->bitmap_info.file ||
2570 mddev->bitmap_info.offset)
2573 mddev->bitmap_info.external = 1;
2576 mddev->bitmap_info.external = 0;
2585 static ssize_t can_clear_show(struct mddev *mddev, char *page)
2588 spin_lock(&mddev->lock);
2589 if (mddev->bitmap)
2590 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ?
2594 spin_unlock(&mddev->lock);
2598 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len)
2600 if (mddev->bitmap == NULL)
2603 mddev->bitmap->need_sync = 1;
2605 if (mddev->degraded)
2607 mddev->bitmap->need_sync = 0;
2617 behind_writes_used_show(struct mddev *mddev, char *page)
2620 spin_lock(&mddev->lock);
2621 if (mddev->bitmap == NULL)
2625 mddev->bitmap->behind_writes_used);
2626 spin_unlock(&mddev->lock);
2631 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len)
2633 if (mddev->bitmap)
2634 mddev->bitmap->behind_writes_used = 0;