X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=drivers%2Fmd%2Fdm.c;h=a3f21dc02bd891fb84d8df00c5b22b2ad15a2e64;hb=682c30ed2165d5694a414d31eac7c63ac5700fb0;hp=d505a96845c11774228cedd553646f8866cb8f7f;hpb=00fff26539bfe3fad21c164fc4002d9ede056fb0;p=~andy%2Flinux diff --git a/drivers/md/dm.c b/drivers/md/dm.c index d505a96845c..a3f21dc02bd 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -338,6 +339,7 @@ static int dm_blk_open(struct block_device *bdev, fmode_t mode) { struct mapped_device *md; + lock_kernel(); spin_lock(&_minor_lock); md = bdev->bd_disk->private_data; @@ -355,6 +357,7 @@ static int dm_blk_open(struct block_device *bdev, fmode_t mode) out: spin_unlock(&_minor_lock); + unlock_kernel(); return md ? 0 : -ENXIO; } @@ -362,8 +365,12 @@ out: static int dm_blk_close(struct gendisk *disk, fmode_t mode) { struct mapped_device *md = disk->private_data; + + lock_kernel(); atomic_dec(&md->open_count); dm_put(md); + unlock_kernel(); + return 0; }