提交 9ea06415 编写于 作者: S Shaohua Li

Merge branch 'mymd/for-next' into mymd/for-linus

...@@ -10174,6 +10174,7 @@ S: Supported ...@@ -10174,6 +10174,7 @@ S: Supported
F: drivers/media/pci/solo6x10/ F: drivers/media/pci/solo6x10/
SOFTWARE RAID (Multiple Disks) SUPPORT SOFTWARE RAID (Multiple Disks) SUPPORT
M: Shaohua Li <shli@kernel.org>
L: linux-raid@vger.kernel.org L: linux-raid@vger.kernel.org
T: git git://neil.brown.name/md T: git git://neil.brown.name/md
S: Supported S: Supported
......
...@@ -210,10 +210,6 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait) ...@@ -210,10 +210,6 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait)
struct block_device *bdev; struct block_device *bdev;
struct mddev *mddev = bitmap->mddev; struct mddev *mddev = bitmap->mddev;
struct bitmap_storage *store = &bitmap->storage; struct bitmap_storage *store = &bitmap->storage;
int node_offset = 0;
if (mddev_is_clustered(bitmap->mddev))
node_offset = bitmap->cluster_slot * store->file_pages;
while ((rdev = next_active_rdev(rdev, mddev)) != NULL) { while ((rdev = next_active_rdev(rdev, mddev)) != NULL) {
int size = PAGE_SIZE; int size = PAGE_SIZE;
......
...@@ -170,7 +170,7 @@ static void add_sector(struct faulty_conf *conf, sector_t start, int mode) ...@@ -170,7 +170,7 @@ static void add_sector(struct faulty_conf *conf, sector_t start, int mode)
conf->nfaults = n+1; conf->nfaults = n+1;
} }
static void make_request(struct mddev *mddev, struct bio *bio) static void faulty_make_request(struct mddev *mddev, struct bio *bio)
{ {
struct faulty_conf *conf = mddev->private; struct faulty_conf *conf = mddev->private;
int failit = 0; int failit = 0;
...@@ -226,7 +226,7 @@ static void make_request(struct mddev *mddev, struct bio *bio) ...@@ -226,7 +226,7 @@ static void make_request(struct mddev *mddev, struct bio *bio)
generic_make_request(bio); generic_make_request(bio);
} }
static void status(struct seq_file *seq, struct mddev *mddev) static void faulty_status(struct seq_file *seq, struct mddev *mddev)
{ {
struct faulty_conf *conf = mddev->private; struct faulty_conf *conf = mddev->private;
int n; int n;
...@@ -259,7 +259,7 @@ static void status(struct seq_file *seq, struct mddev *mddev) ...@@ -259,7 +259,7 @@ static void status(struct seq_file *seq, struct mddev *mddev)
} }
static int reshape(struct mddev *mddev) static int faulty_reshape(struct mddev *mddev)
{ {
int mode = mddev->new_layout & ModeMask; int mode = mddev->new_layout & ModeMask;
int count = mddev->new_layout >> ModeShift; int count = mddev->new_layout >> ModeShift;
...@@ -299,7 +299,7 @@ static sector_t faulty_size(struct mddev *mddev, sector_t sectors, int raid_disk ...@@ -299,7 +299,7 @@ static sector_t faulty_size(struct mddev *mddev, sector_t sectors, int raid_disk
return sectors; return sectors;
} }
static int run(struct mddev *mddev) static int faulty_run(struct mddev *mddev)
{ {
struct md_rdev *rdev; struct md_rdev *rdev;
int i; int i;
...@@ -327,7 +327,7 @@ static int run(struct mddev *mddev) ...@@ -327,7 +327,7 @@ static int run(struct mddev *mddev)
md_set_array_sectors(mddev, faulty_size(mddev, 0, 0)); md_set_array_sectors(mddev, faulty_size(mddev, 0, 0));
mddev->private = conf; mddev->private = conf;
reshape(mddev); faulty_reshape(mddev);
return 0; return 0;
} }
...@@ -344,11 +344,11 @@ static struct md_personality faulty_personality = ...@@ -344,11 +344,11 @@ static struct md_personality faulty_personality =
.name = "faulty", .name = "faulty",
.level = LEVEL_FAULTY, .level = LEVEL_FAULTY,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = faulty_make_request,
.run = run, .run = faulty_run,
.free = faulty_free, .free = faulty_free,
.status = status, .status = faulty_status,
.check_reshape = reshape, .check_reshape = faulty_reshape,
.size = faulty_size, .size = faulty_size,
}; };
......
...@@ -293,6 +293,7 @@ static void recover_bitmaps(struct md_thread *thread) ...@@ -293,6 +293,7 @@ static void recover_bitmaps(struct md_thread *thread)
dlm_unlock: dlm_unlock:
dlm_unlock_sync(bm_lockres); dlm_unlock_sync(bm_lockres);
clear_bit: clear_bit:
lockres_free(bm_lockres);
clear_bit(slot, &cinfo->recovery_map); clear_bit(slot, &cinfo->recovery_map);
} }
} }
...@@ -682,8 +683,10 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots) ...@@ -682,8 +683,10 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots)
bm_lockres = lockres_init(mddev, str, NULL, 1); bm_lockres = lockres_init(mddev, str, NULL, 1);
if (!bm_lockres) if (!bm_lockres)
return -ENOMEM; return -ENOMEM;
if (i == (cinfo->slot_number - 1)) if (i == (cinfo->slot_number - 1)) {
lockres_free(bm_lockres);
continue; continue;
}
bm_lockres->flags |= DLM_LKF_NOQUEUE; bm_lockres->flags |= DLM_LKF_NOQUEUE;
ret = dlm_lock_sync(bm_lockres, DLM_LOCK_PW); ret = dlm_lock_sync(bm_lockres, DLM_LOCK_PW);
...@@ -858,6 +861,7 @@ static int leave(struct mddev *mddev) ...@@ -858,6 +861,7 @@ static int leave(struct mddev *mddev)
lockres_free(cinfo->token_lockres); lockres_free(cinfo->token_lockres);
lockres_free(cinfo->ack_lockres); lockres_free(cinfo->ack_lockres);
lockres_free(cinfo->no_new_dev_lockres); lockres_free(cinfo->no_new_dev_lockres);
lockres_free(cinfo->resync_lockres);
lockres_free(cinfo->bitmap_lockres); lockres_free(cinfo->bitmap_lockres);
unlock_all_bitmaps(mddev); unlock_all_bitmaps(mddev);
dlm_release_lockspace(cinfo->lockspace, 2); dlm_release_lockspace(cinfo->lockspace, 2);
......
...@@ -1044,7 +1044,7 @@ static void raid1_unplug(struct blk_plug_cb *cb, bool from_schedule) ...@@ -1044,7 +1044,7 @@ static void raid1_unplug(struct blk_plug_cb *cb, bool from_schedule)
kfree(plug); kfree(plug);
} }
static void make_request(struct mddev *mddev, struct bio * bio) static void raid1_make_request(struct mddev *mddev, struct bio * bio)
{ {
struct r1conf *conf = mddev->private; struct r1conf *conf = mddev->private;
struct raid1_info *mirror; struct raid1_info *mirror;
...@@ -1422,7 +1422,7 @@ static void make_request(struct mddev *mddev, struct bio * bio) ...@@ -1422,7 +1422,7 @@ static void make_request(struct mddev *mddev, struct bio * bio)
wake_up(&conf->wait_barrier); wake_up(&conf->wait_barrier);
} }
static void status(struct seq_file *seq, struct mddev *mddev) static void raid1_status(struct seq_file *seq, struct mddev *mddev)
{ {
struct r1conf *conf = mddev->private; struct r1conf *conf = mddev->private;
int i; int i;
...@@ -1439,7 +1439,7 @@ static void status(struct seq_file *seq, struct mddev *mddev) ...@@ -1439,7 +1439,7 @@ static void status(struct seq_file *seq, struct mddev *mddev)
seq_printf(seq, "]"); seq_printf(seq, "]");
} }
static void error(struct mddev *mddev, struct md_rdev *rdev) static void raid1_error(struct mddev *mddev, struct md_rdev *rdev)
{ {
char b[BDEVNAME_SIZE]; char b[BDEVNAME_SIZE];
struct r1conf *conf = mddev->private; struct r1conf *conf = mddev->private;
...@@ -2472,7 +2472,8 @@ static int init_resync(struct r1conf *conf) ...@@ -2472,7 +2472,8 @@ static int init_resync(struct r1conf *conf)
* that can be installed to exclude normal IO requests. * that can be installed to exclude normal IO requests.
*/ */
static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipped) static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
int *skipped)
{ {
struct r1conf *conf = mddev->private; struct r1conf *conf = mddev->private;
struct r1bio *r1_bio; struct r1bio *r1_bio;
...@@ -2890,7 +2891,7 @@ static struct r1conf *setup_conf(struct mddev *mddev) ...@@ -2890,7 +2891,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
} }
static void raid1_free(struct mddev *mddev, void *priv); static void raid1_free(struct mddev *mddev, void *priv);
static int run(struct mddev *mddev) static int raid1_run(struct mddev *mddev)
{ {
struct r1conf *conf; struct r1conf *conf;
int i; int i;
...@@ -3170,15 +3171,15 @@ static struct md_personality raid1_personality = ...@@ -3170,15 +3171,15 @@ static struct md_personality raid1_personality =
.name = "raid1", .name = "raid1",
.level = 1, .level = 1,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = raid1_make_request,
.run = run, .run = raid1_run,
.free = raid1_free, .free = raid1_free,
.status = status, .status = raid1_status,
.error_handler = error, .error_handler = raid1_error,
.hot_add_disk = raid1_add_disk, .hot_add_disk = raid1_add_disk,
.hot_remove_disk= raid1_remove_disk, .hot_remove_disk= raid1_remove_disk,
.spare_active = raid1_spare_active, .spare_active = raid1_spare_active,
.sync_request = sync_request, .sync_request = raid1_sync_request,
.resize = raid1_resize, .resize = raid1_resize,
.size = raid1_size, .size = raid1_size,
.check_reshape = raid1_reshape, .check_reshape = raid1_reshape,
......
...@@ -1442,7 +1442,7 @@ static void __make_request(struct mddev *mddev, struct bio *bio) ...@@ -1442,7 +1442,7 @@ static void __make_request(struct mddev *mddev, struct bio *bio)
one_write_done(r10_bio); one_write_done(r10_bio);
} }
static void make_request(struct mddev *mddev, struct bio *bio) static void raid10_make_request(struct mddev *mddev, struct bio *bio)
{ {
struct r10conf *conf = mddev->private; struct r10conf *conf = mddev->private;
sector_t chunk_mask = (conf->geo.chunk_mask & conf->prev.chunk_mask); sector_t chunk_mask = (conf->geo.chunk_mask & conf->prev.chunk_mask);
...@@ -1484,7 +1484,7 @@ static void make_request(struct mddev *mddev, struct bio *bio) ...@@ -1484,7 +1484,7 @@ static void make_request(struct mddev *mddev, struct bio *bio)
wake_up(&conf->wait_barrier); wake_up(&conf->wait_barrier);
} }
static void status(struct seq_file *seq, struct mddev *mddev) static void raid10_status(struct seq_file *seq, struct mddev *mddev)
{ {
struct r10conf *conf = mddev->private; struct r10conf *conf = mddev->private;
int i; int i;
...@@ -1562,7 +1562,7 @@ static int enough(struct r10conf *conf, int ignore) ...@@ -1562,7 +1562,7 @@ static int enough(struct r10conf *conf, int ignore)
_enough(conf, 1, ignore); _enough(conf, 1, ignore);
} }
static void error(struct mddev *mddev, struct md_rdev *rdev) static void raid10_error(struct mddev *mddev, struct md_rdev *rdev)
{ {
char b[BDEVNAME_SIZE]; char b[BDEVNAME_SIZE];
struct r10conf *conf = mddev->private; struct r10conf *conf = mddev->private;
...@@ -2802,7 +2802,7 @@ static int init_resync(struct r10conf *conf) ...@@ -2802,7 +2802,7 @@ static int init_resync(struct r10conf *conf)
* *
*/ */
static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
int *skipped) int *skipped)
{ {
struct r10conf *conf = mddev->private; struct r10conf *conf = mddev->private;
...@@ -3523,7 +3523,7 @@ static struct r10conf *setup_conf(struct mddev *mddev) ...@@ -3523,7 +3523,7 @@ static struct r10conf *setup_conf(struct mddev *mddev)
return ERR_PTR(err); return ERR_PTR(err);
} }
static int run(struct mddev *mddev) static int raid10_run(struct mddev *mddev)
{ {
struct r10conf *conf; struct r10conf *conf;
int i, disk_idx, chunk_size; int i, disk_idx, chunk_size;
...@@ -4617,15 +4617,15 @@ static struct md_personality raid10_personality = ...@@ -4617,15 +4617,15 @@ static struct md_personality raid10_personality =
.name = "raid10", .name = "raid10",
.level = 10, .level = 10,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = raid10_make_request,
.run = run, .run = raid10_run,
.free = raid10_free, .free = raid10_free,
.status = status, .status = raid10_status,
.error_handler = error, .error_handler = raid10_error,
.hot_add_disk = raid10_add_disk, .hot_add_disk = raid10_add_disk,
.hot_remove_disk= raid10_remove_disk, .hot_remove_disk= raid10_remove_disk,
.spare_active = raid10_spare_active, .spare_active = raid10_spare_active,
.sync_request = sync_request, .sync_request = raid10_sync_request,
.quiesce = raid10_quiesce, .quiesce = raid10_quiesce,
.size = raid10_size, .size = raid10_size,
.resize = raid10_resize, .resize = raid10_resize,
......
...@@ -2496,7 +2496,7 @@ static void raid5_build_block(struct stripe_head *sh, int i, int previous) ...@@ -2496,7 +2496,7 @@ static void raid5_build_block(struct stripe_head *sh, int i, int previous)
dev->sector = raid5_compute_blocknr(sh, i, previous); dev->sector = raid5_compute_blocknr(sh, i, previous);
} }
static void error(struct mddev *mddev, struct md_rdev *rdev) static void raid5_error(struct mddev *mddev, struct md_rdev *rdev)
{ {
char b[BDEVNAME_SIZE]; char b[BDEVNAME_SIZE];
struct r5conf *conf = mddev->private; struct r5conf *conf = mddev->private;
...@@ -2958,7 +2958,7 @@ static int add_stripe_bio(struct stripe_head *sh, struct bio *bi, int dd_idx, ...@@ -2958,7 +2958,7 @@ static int add_stripe_bio(struct stripe_head *sh, struct bio *bi, int dd_idx,
* If several bio share a stripe. The bio bi_phys_segments acts as a * If several bio share a stripe. The bio bi_phys_segments acts as a
* reference count to avoid race. The reference count should already be * reference count to avoid race. The reference count should already be
* increased before this function is called (for example, in * increased before this function is called (for example, in
* make_request()), so other bio sharing this stripe will not free the * raid5_make_request()), so other bio sharing this stripe will not free the
* stripe. If a stripe is owned by one stripe, the stripe lock will * stripe. If a stripe is owned by one stripe, the stripe lock will
* protect it. * protect it.
*/ */
...@@ -5135,7 +5135,7 @@ static void make_discard_request(struct mddev *mddev, struct bio *bi) ...@@ -5135,7 +5135,7 @@ static void make_discard_request(struct mddev *mddev, struct bio *bi)
} }
} }
static void make_request(struct mddev *mddev, struct bio * bi) static void raid5_make_request(struct mddev *mddev, struct bio * bi)
{ {
struct r5conf *conf = mddev->private; struct r5conf *conf = mddev->private;
int dd_idx; int dd_idx;
...@@ -5225,7 +5225,7 @@ static void make_request(struct mddev *mddev, struct bio * bi) ...@@ -5225,7 +5225,7 @@ static void make_request(struct mddev *mddev, struct bio * bi)
new_sector = raid5_compute_sector(conf, logical_sector, new_sector = raid5_compute_sector(conf, logical_sector,
previous, previous,
&dd_idx, NULL); &dd_idx, NULL);
pr_debug("raid456: make_request, sector %llu logical %llu\n", pr_debug("raid456: raid5_make_request, sector %llu logical %llu\n",
(unsigned long long)new_sector, (unsigned long long)new_sector,
(unsigned long long)logical_sector); (unsigned long long)logical_sector);
...@@ -5575,7 +5575,8 @@ static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *sk ...@@ -5575,7 +5575,8 @@ static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *sk
return retn; return retn;
} }
static inline sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipped) static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_nr,
int *skipped)
{ {
struct r5conf *conf = mddev->private; struct r5conf *conf = mddev->private;
struct stripe_head *sh; struct stripe_head *sh;
...@@ -6674,7 +6675,7 @@ static int only_parity(int raid_disk, int algo, int raid_disks, int max_degraded ...@@ -6674,7 +6675,7 @@ static int only_parity(int raid_disk, int algo, int raid_disks, int max_degraded
return 0; return 0;
} }
static int run(struct mddev *mddev) static int raid5_run(struct mddev *mddev)
{ {
struct r5conf *conf; struct r5conf *conf;
int working_disks = 0; int working_disks = 0;
...@@ -7048,7 +7049,7 @@ static void raid5_free(struct mddev *mddev, void *priv) ...@@ -7048,7 +7049,7 @@ static void raid5_free(struct mddev *mddev, void *priv)
mddev->to_remove = &raid5_attrs_group; mddev->to_remove = &raid5_attrs_group;
} }
static void status(struct seq_file *seq, struct mddev *mddev) static void raid5_status(struct seq_file *seq, struct mddev *mddev)
{ {
struct r5conf *conf = mddev->private; struct r5conf *conf = mddev->private;
int i; int i;
...@@ -7864,15 +7865,15 @@ static struct md_personality raid6_personality = ...@@ -7864,15 +7865,15 @@ static struct md_personality raid6_personality =
.name = "raid6", .name = "raid6",
.level = 6, .level = 6,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = raid5_make_request,
.run = run, .run = raid5_run,
.free = raid5_free, .free = raid5_free,
.status = status, .status = raid5_status,
.error_handler = error, .error_handler = raid5_error,
.hot_add_disk = raid5_add_disk, .hot_add_disk = raid5_add_disk,
.hot_remove_disk= raid5_remove_disk, .hot_remove_disk= raid5_remove_disk,
.spare_active = raid5_spare_active, .spare_active = raid5_spare_active,
.sync_request = sync_request, .sync_request = raid5_sync_request,
.resize = raid5_resize, .resize = raid5_resize,
.size = raid5_size, .size = raid5_size,
.check_reshape = raid6_check_reshape, .check_reshape = raid6_check_reshape,
...@@ -7887,15 +7888,15 @@ static struct md_personality raid5_personality = ...@@ -7887,15 +7888,15 @@ static struct md_personality raid5_personality =
.name = "raid5", .name = "raid5",
.level = 5, .level = 5,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = raid5_make_request,
.run = run, .run = raid5_run,
.free = raid5_free, .free = raid5_free,
.status = status, .status = raid5_status,
.error_handler = error, .error_handler = raid5_error,
.hot_add_disk = raid5_add_disk, .hot_add_disk = raid5_add_disk,
.hot_remove_disk= raid5_remove_disk, .hot_remove_disk= raid5_remove_disk,
.spare_active = raid5_spare_active, .spare_active = raid5_spare_active,
.sync_request = sync_request, .sync_request = raid5_sync_request,
.resize = raid5_resize, .resize = raid5_resize,
.size = raid5_size, .size = raid5_size,
.check_reshape = raid5_check_reshape, .check_reshape = raid5_check_reshape,
...@@ -7911,15 +7912,15 @@ static struct md_personality raid4_personality = ...@@ -7911,15 +7912,15 @@ static struct md_personality raid4_personality =
.name = "raid4", .name = "raid4",
.level = 4, .level = 4,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.make_request = make_request, .make_request = raid5_make_request,
.run = run, .run = raid5_run,
.free = raid5_free, .free = raid5_free,
.status = status, .status = raid5_status,
.error_handler = error, .error_handler = raid5_error,
.hot_add_disk = raid5_add_disk, .hot_add_disk = raid5_add_disk,
.hot_remove_disk= raid5_remove_disk, .hot_remove_disk= raid5_remove_disk,
.spare_active = raid5_spare_active, .spare_active = raid5_spare_active,
.sync_request = sync_request, .sync_request = raid5_sync_request,
.resize = raid5_resize, .resize = raid5_resize,
.size = raid5_size, .size = raid5_size,
.check_reshape = raid5_check_reshape, .check_reshape = raid5_check_reshape,
......
...@@ -152,6 +152,8 @@ void raid6_dual_recov(int disks, size_t bytes, int faila, int failb, ...@@ -152,6 +152,8 @@ void raid6_dual_recov(int disks, size_t bytes, int faila, int failb,
# define jiffies raid6_jiffies() # define jiffies raid6_jiffies()
# define printk printf # define printk printf
# define pr_err(format, ...) fprintf(stderr, format, ## __VA_ARGS__)
# define pr_info(format, ...) fprintf(stdout, format, ## __VA_ARGS__)
# define GFP_KERNEL 0 # define GFP_KERNEL 0
# define __get_free_pages(x, y) ((unsigned long)mmap(NULL, PAGE_SIZE << (y), \ # define __get_free_pages(x, y) ((unsigned long)mmap(NULL, PAGE_SIZE << (y), \
PROT_READ|PROT_WRITE, \ PROT_READ|PROT_WRITE, \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册