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"); |