]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/md/dm.c
Merge branch 'for-2.6.37/barrier' of git://git.kernel.dk/linux-2.6-block
[mv-sheeva.git] / drivers / md / dm.c
index f934e9878436300252483632b31693bb6e497ea8..7cb1352f7e7a5e2b4b5e400319b981406ec69005 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/blkpg.h>
 #include <linux/bio.h>
 #include <linux/buffer_head.h>
-#include <linux/smp_lock.h>
 #include <linux/mempool.h>
 #include <linux/slab.h>
 #include <linux/idr.h>
@@ -33,6 +32,7 @@
 #define DM_COOKIE_ENV_VAR_NAME "DM_COOKIE"
 #define DM_COOKIE_LENGTH 24
 
+static DEFINE_MUTEX(dm_mutex);
 static const char *_name = DM_NAME;
 
 static unsigned int major = 0;
@@ -328,7 +328,7 @@ static int dm_blk_open(struct block_device *bdev, fmode_t mode)
 {
        struct mapped_device *md;
 
-       lock_kernel();
+       mutex_lock(&dm_mutex);
        spin_lock(&_minor_lock);
 
        md = bdev->bd_disk->private_data;
@@ -346,7 +346,7 @@ static int dm_blk_open(struct block_device *bdev, fmode_t mode)
 
 out:
        spin_unlock(&_minor_lock);
-       unlock_kernel();
+       mutex_unlock(&dm_mutex);
 
        return md ? 0 : -ENXIO;
 }
@@ -355,10 +355,10 @@ static int dm_blk_close(struct gendisk *disk, fmode_t mode)
 {
        struct mapped_device *md = disk->private_data;
 
-       lock_kernel();
+       mutex_lock(&dm_mutex);
        atomic_dec(&md->open_count);
        dm_put(md);
-       unlock_kernel();
+       mutex_unlock(&dm_mutex);
 
        return 0;
 }