diff options
| -rw-r--r-- | drivers/md/dm-table.c | 11 | ||||
| -rw-r--r-- | drivers/md/dm.c | 19 | ||||
| -rw-r--r-- | drivers/md/kcopyd.c | 11 | ||||
| -rw-r--r-- | drivers/md/md.c | 11 |
4 files changed, 28 insertions, 24 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 76610a6ac01c..8f56a54cf0ce 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/ctype.h> | 14 | #include <linux/ctype.h> |
| 15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
| 16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
| 17 | #include <linux/mutex.h> | ||
| 17 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
| 18 | 19 | ||
| 19 | #define MAX_DEPTH 16 | 20 | #define MAX_DEPTH 16 |
| @@ -770,14 +771,14 @@ int dm_table_complete(struct dm_table *t) | |||
| 770 | return r; | 771 | return r; |
| 771 | } | 772 | } |
| 772 | 773 | ||
| 773 | static DECLARE_MUTEX(_event_lock); | 774 | static DEFINE_MUTEX(_event_lock); |
| 774 | void dm_table_event_callback(struct dm_table *t, | 775 | void dm_table_event_callback(struct dm_table *t, |
| 775 | void (*fn)(void *), void *context) | 776 | void (*fn)(void *), void *context) |
| 776 | { | 777 | { |
| 777 | down(&_event_lock); | 778 | mutex_lock(&_event_lock); |
| 778 | t->event_fn = fn; | 779 | t->event_fn = fn; |
| 779 | t->event_context = context; | 780 | t->event_context = context; |
| 780 | up(&_event_lock); | 781 | mutex_unlock(&_event_lock); |
| 781 | } | 782 | } |
| 782 | 783 | ||
| 783 | void dm_table_event(struct dm_table *t) | 784 | void dm_table_event(struct dm_table *t) |
| @@ -788,10 +789,10 @@ void dm_table_event(struct dm_table *t) | |||
| 788 | */ | 789 | */ |
| 789 | BUG_ON(in_interrupt()); | 790 | BUG_ON(in_interrupt()); |
| 790 | 791 | ||
| 791 | down(&_event_lock); | 792 | mutex_lock(&_event_lock); |
| 792 | if (t->event_fn) | 793 | if (t->event_fn) |
| 793 | t->event_fn(t->event_context); | 794 | t->event_fn(t->event_context); |
| 794 | up(&_event_lock); | 795 | mutex_unlock(&_event_lock); |
| 795 | } | 796 | } |
| 796 | 797 | ||
| 797 | sector_t dm_table_get_size(struct dm_table *t) | 798 | sector_t dm_table_get_size(struct dm_table *t) |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 973e63d530ae..4d710b7a133b 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 13 | #include <linux/mutex.h> | ||
| 13 | #include <linux/moduleparam.h> | 14 | #include <linux/moduleparam.h> |
| 14 | #include <linux/blkpg.h> | 15 | #include <linux/blkpg.h> |
| 15 | #include <linux/bio.h> | 16 | #include <linux/bio.h> |
| @@ -743,14 +744,14 @@ static int dm_any_congested(void *congested_data, int bdi_bits) | |||
| 743 | /*----------------------------------------------------------------- | 744 | /*----------------------------------------------------------------- |
| 744 | * An IDR is used to keep track of allocated minor numbers. | 745 | * An IDR is used to keep track of allocated minor numbers. |
| 745 | *---------------------------------------------------------------*/ | 746 | *---------------------------------------------------------------*/ |
| 746 | static DECLARE_MUTEX(_minor_lock); | 747 | static DEFINE_MUTEX(_minor_lock); |
| 747 | static DEFINE_IDR(_minor_idr); | 748 | static DEFINE_IDR(_minor_idr); |
| 748 | 749 | ||
| 749 | static void free_minor(unsigned int minor) | 750 | static void free_minor(unsigned int minor) |
| 750 | { | 751 | { |
| 751 | down(&_minor_lock); | 752 | mutex_lock(&_minor_lock); |
| 752 | idr_remove(&_minor_idr, minor); | 753 | idr_remove(&_minor_idr, minor); |
| 753 | up(&_minor_lock); | 754 | mutex_unlock(&_minor_lock); |
| 754 | } | 755 | } |
| 755 | 756 | ||
| 756 | /* | 757 | /* |
| @@ -763,7 +764,7 @@ static int specific_minor(struct mapped_device *md, unsigned int minor) | |||
| 763 | if (minor >= (1 << MINORBITS)) | 764 | if (minor >= (1 << MINORBITS)) |
| 764 | return -EINVAL; | 765 | return -EINVAL; |
| 765 | 766 | ||
| 766 | down(&_minor_lock); | 767 | mutex_lock(&_minor_lock); |
| 767 | 768 | ||
| 768 | if (idr_find(&_minor_idr, minor)) { | 769 | if (idr_find(&_minor_idr, minor)) { |
| 769 | r = -EBUSY; | 770 | r = -EBUSY; |
| @@ -788,7 +789,7 @@ static int specific_minor(struct mapped_device *md, unsigned int minor) | |||
| 788 | } | 789 | } |
| 789 | 790 | ||
| 790 | out: | 791 | out: |
| 791 | up(&_minor_lock); | 792 | mutex_unlock(&_minor_lock); |
| 792 | return r; | 793 | return r; |
| 793 | } | 794 | } |
| 794 | 795 | ||
| @@ -797,7 +798,7 @@ static int next_free_minor(struct mapped_device *md, unsigned int *minor) | |||
| 797 | int r; | 798 | int r; |
| 798 | unsigned int m; | 799 | unsigned int m; |
| 799 | 800 | ||
| 800 | down(&_minor_lock); | 801 | mutex_lock(&_minor_lock); |
| 801 | 802 | ||
| 802 | r = idr_pre_get(&_minor_idr, GFP_KERNEL); | 803 | r = idr_pre_get(&_minor_idr, GFP_KERNEL); |
| 803 | if (!r) { | 804 | if (!r) { |
| @@ -819,7 +820,7 @@ static int next_free_minor(struct mapped_device *md, unsigned int *minor) | |||
| 819 | *minor = m; | 820 | *minor = m; |
| 820 | 821 | ||
| 821 | out: | 822 | out: |
| 822 | up(&_minor_lock); | 823 | mutex_unlock(&_minor_lock); |
| 823 | return r; | 824 | return r; |
| 824 | } | 825 | } |
| 825 | 826 | ||
| @@ -1014,13 +1015,13 @@ static struct mapped_device *dm_find_md(dev_t dev) | |||
| 1014 | if (MAJOR(dev) != _major || minor >= (1 << MINORBITS)) | 1015 | if (MAJOR(dev) != _major || minor >= (1 << MINORBITS)) |
| 1015 | return NULL; | 1016 | return NULL; |
| 1016 | 1017 | ||
| 1017 | down(&_minor_lock); | 1018 | mutex_lock(&_minor_lock); |
| 1018 | 1019 | ||
| 1019 | md = idr_find(&_minor_idr, minor); | 1020 | md = idr_find(&_minor_idr, minor); |
| 1020 | if (!md || (dm_disk(md)->first_minor != minor)) | 1021 | if (!md || (dm_disk(md)->first_minor != minor)) |
| 1021 | md = NULL; | 1022 | md = NULL; |
| 1022 | 1023 | ||
| 1023 | up(&_minor_lock); | 1024 | mutex_unlock(&_minor_lock); |
| 1024 | 1025 | ||
| 1025 | return md; | 1026 | return md; |
| 1026 | } | 1027 | } |
diff --git a/drivers/md/kcopyd.c b/drivers/md/kcopyd.c index ed71f3f94620..72480a48d88b 100644 --- a/drivers/md/kcopyd.c +++ b/drivers/md/kcopyd.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
| 23 | #include <linux/vmalloc.h> | 23 | #include <linux/vmalloc.h> |
| 24 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
| 25 | #include <linux/mutex.h> | ||
| 25 | 26 | ||
| 26 | #include "kcopyd.h" | 27 | #include "kcopyd.h" |
| 27 | 28 | ||
| @@ -581,21 +582,21 @@ int kcopyd_cancel(struct kcopyd_job *job, int block) | |||
| 581 | /*----------------------------------------------------------------- | 582 | /*----------------------------------------------------------------- |
| 582 | * Unit setup | 583 | * Unit setup |
| 583 | *---------------------------------------------------------------*/ | 584 | *---------------------------------------------------------------*/ |
| 584 | static DECLARE_MUTEX(_client_lock); | 585 | static DEFINE_MUTEX(_client_lock); |
| 585 | static LIST_HEAD(_clients); | 586 | static LIST_HEAD(_clients); |
| 586 | 587 | ||
| 587 | static void client_add(struct kcopyd_client *kc) | 588 | static void client_add(struct kcopyd_client *kc) |
| 588 | { | 589 | { |
| 589 | down(&_client_lock); | 590 | mutex_lock(&_client_lock); |
| 590 | list_add(&kc->list, &_clients); | 591 | list_add(&kc->list, &_clients); |
| 591 | up(&_client_lock); | 592 | mutex_unlock(&_client_lock); |
| 592 | } | 593 | } |
| 593 | 594 | ||
| 594 | static void client_del(struct kcopyd_client *kc) | 595 | static void client_del(struct kcopyd_client *kc) |
| 595 | { | 596 | { |
| 596 | down(&_client_lock); | 597 | mutex_lock(&_client_lock); |
| 597 | list_del(&kc->list); | 598 | list_del(&kc->list); |
| 598 | up(&_client_lock); | 599 | mutex_unlock(&_client_lock); |
| 599 | } | 600 | } |
| 600 | 601 | ||
| 601 | static DEFINE_MUTEX(kcopyd_init_lock); | 602 | static DEFINE_MUTEX(kcopyd_init_lock); |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 147efcb1e8ca..c9c9c096ad80 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | #include <linux/buffer_head.h> /* for invalidate_bdev */ | 43 | #include <linux/buffer_head.h> /* for invalidate_bdev */ |
| 44 | #include <linux/suspend.h> | 44 | #include <linux/suspend.h> |
| 45 | #include <linux/poll.h> | 45 | #include <linux/poll.h> |
| 46 | #include <linux/mutex.h> | ||
| 46 | 47 | ||
| 47 | #include <linux/init.h> | 48 | #include <linux/init.h> |
| 48 | 49 | ||
| @@ -2500,7 +2501,7 @@ int mdp_major = 0; | |||
| 2500 | 2501 | ||
| 2501 | static struct kobject *md_probe(dev_t dev, int *part, void *data) | 2502 | static struct kobject *md_probe(dev_t dev, int *part, void *data) |
| 2502 | { | 2503 | { |
| 2503 | static DECLARE_MUTEX(disks_sem); | 2504 | static DEFINE_MUTEX(disks_mutex); |
| 2504 | mddev_t *mddev = mddev_find(dev); | 2505 | mddev_t *mddev = mddev_find(dev); |
| 2505 | struct gendisk *disk; | 2506 | struct gendisk *disk; |
| 2506 | int partitioned = (MAJOR(dev) != MD_MAJOR); | 2507 | int partitioned = (MAJOR(dev) != MD_MAJOR); |
| @@ -2510,15 +2511,15 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data) | |||
| 2510 | if (!mddev) | 2511 | if (!mddev) |
| 2511 | return NULL; | 2512 | return NULL; |
| 2512 | 2513 | ||
| 2513 | down(&disks_sem); | 2514 | mutex_lock(&disks_mutex); |
| 2514 | if (mddev->gendisk) { | 2515 | if (mddev->gendisk) { |
| 2515 | up(&disks_sem); | 2516 | mutex_unlock(&disks_mutex); |
| 2516 | mddev_put(mddev); | 2517 | mddev_put(mddev); |
| 2517 | return NULL; | 2518 | return NULL; |
| 2518 | } | 2519 | } |
| 2519 | disk = alloc_disk(1 << shift); | 2520 | disk = alloc_disk(1 << shift); |
| 2520 | if (!disk) { | 2521 | if (!disk) { |
| 2521 | up(&disks_sem); | 2522 | mutex_unlock(&disks_mutex); |
| 2522 | mddev_put(mddev); | 2523 | mddev_put(mddev); |
| 2523 | return NULL; | 2524 | return NULL; |
| 2524 | } | 2525 | } |
| @@ -2536,7 +2537,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data) | |||
| 2536 | disk->queue = mddev->queue; | 2537 | disk->queue = mddev->queue; |
| 2537 | add_disk(disk); | 2538 | add_disk(disk); |
| 2538 | mddev->gendisk = disk; | 2539 | mddev->gendisk = disk; |
| 2539 | up(&disks_sem); | 2540 | mutex_unlock(&disks_mutex); |
| 2540 | mddev->kobj.parent = &disk->kobj; | 2541 | mddev->kobj.parent = &disk->kobj; |
| 2541 | mddev->kobj.k_name = NULL; | 2542 | mddev->kobj.k_name = NULL; |
| 2542 | snprintf(mddev->kobj.name, KOBJ_NAME_LEN, "%s", "md"); | 2543 | snprintf(mddev->kobj.name, KOBJ_NAME_LEN, "%s", "md"); |
