Here is an obvious sem2mutex patch for the block device semaphore,
bd_sem, relative to 2.6.15.
Kedar.
bd_sem : Use mutex instead of semaphore.
Signed-Off-by: Kedar Sovani <[email protected]>
---
Documentation/filesystems/Locking | 2 +-
block/ioctl.c | 22 +++++++++++-----------
drivers/block/rd.c | 4 ++--
drivers/s390/block/dasd_ioctl.c | 8 ++++----
fs/block_dev.c | 26 +++++++++++++-------------
5 files changed, 31 insertions(+), 31 deletions(-)
diff -urp linux-2.6.15-orig/Documentation/filesystems/Locking
linux-2.6.15/Documentation/filesystems/Locking
--- linux-2.6.15-orig/Documentation/filesystems/Locking 2006-01-12
18:38:18.000000000 +0530
+++ linux-2.6.15/Documentation/filesystems/Locking 2006-01-12
19:26:32.000000000 +0530
@@ -342,7 +342,7 @@ prototypes:
int (*revalidate_disk) (struct gendisk *);
locking rules:
- BKL bd_sem
+ BKL bd_mutex
open: yes yes
release: yes yes
ioctl: yes no
diff -urp linux-2.6.15-orig/block/ioctl.c linux-2.6.15/block/ioctl.c
--- linux-2.6.15-orig/block/ioctl.c 2006-01-12 18:38:24.000000000 +0530
+++ linux-2.6.15/block/ioctl.c 2006-01-12 19:00:06.000000000 +0530
@@ -41,9 +41,9 @@ static int blkpg_ioctl(struct block_devi
return -EINVAL;
}
/* partition number in use? */
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
if (disk->part[part - 1]) {
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return -EBUSY;
}
/* overlap? */
@@ -54,13 +54,13 @@ static int blkpg_ioctl(struct block_devi
continue;
if (!(start+length <= s->start_sect ||
start >= s->start_sect + s->nr_sects)) {
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return -EBUSY;
}
}
/* all seems OK */
add_partition(disk, part, start, length);
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return 0;
case BLKPG_DEL_PARTITION:
if (!disk->part[part-1])
@@ -70,9 +70,9 @@ static int blkpg_ioctl(struct block_devi
bdevp = bdget_disk(disk, part);
if (!bdevp)
return -ENOMEM;
- down(&bdevp->bd_sem);
+ mutex_lock(&bdevp->bd_mutex);
if (bdevp->bd_openers) {
- up(&bdevp->bd_sem);
+ mutex_unlock(&bdevp->bd_mutex);
bdput(bdevp);
return -EBUSY;
}
@@ -80,10 +80,10 @@ static int blkpg_ioctl(struct block_devi
fsync_bdev(bdevp);
invalidate_bdev(bdevp, 0);
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
delete_partition(disk, part);
- up(&bdev->bd_sem);
- up(&bdevp->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
+ mutex_unlock(&bdevp->bd_mutex);
bdput(bdevp);
return 0;
@@ -101,10 +101,10 @@ static int blkdev_reread_part(struct blo
return -EINVAL;
if (!capable(CAP_SYS_ADMIN))
return -EACCES;
- if (down_trylock(&bdev->bd_sem))
+ if (mutex_trylock(&bdev->bd_mutex) == 0)
return -EBUSY;
res = rescan_partitions(disk, bdev);
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return res;
}
diff -urp linux-2.6.15-orig/drivers/block/rd.c
linux-2.6.15/drivers/block/rd.c
--- linux-2.6.15-orig/drivers/block/rd.c 2006-01-12 18:38:29.000000000
+0530
+++ linux-2.6.15/drivers/block/rd.c 2006-01-12 19:04:07.000000000 +0530
@@ -310,12 +310,12 @@ static int rd_ioctl(struct inode *inode,
* cache
*/
error = -EBUSY;
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
if (bdev->bd_openers <= 2) {
truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
error = 0;
}
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return error;
}
diff -urp linux-2.6.15-orig/drivers/s390/block/dasd_ioctl.c
linux-2.6.15/drivers/s390/block/dasd_ioctl.c
--- linux-2.6.15-orig/drivers/s390/block/dasd_ioctl.c 2006-01-12
18:38:49.000000000 +0530
+++ linux-2.6.15/drivers/s390/block/dasd_ioctl.c 2006-01-12
19:16:29.000000000 +0530
@@ -141,9 +141,9 @@ dasd_ioctl_enable(struct block_device *b
return -ENODEV;
dasd_enable_device(device);
/* Formatting the dasd device can change the capacity. */
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
i_size_write(bdev->bd_inode, (loff_t)get_capacity(device->gdp) << 9);
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return 0;
}
@@ -174,9 +174,9 @@ dasd_ioctl_disable(struct block_device *
* Set i_size to zero, since read, write, etc. check against this
* value.
*/
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
i_size_write(bdev->bd_inode, 0);
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
return 0;
}
diff -urp linux-2.6.15-orig/fs/block_dev.c linux-2.6.15/fs/block_dev.c
--- linux-2.6.15-orig/fs/block_dev.c 2006-01-12 18:42:47.000000000 +0530
+++ linux-2.6.15/fs/block_dev.c 2006-01-12 18:35:49.000000000 +0530
@@ -265,7 +265,7 @@ static void init_once(void * foo, kmem_c
SLAB_CTOR_CONSTRUCTOR)
{
memset(bdev, 0, sizeof(*bdev));
- sema_init(&bdev->bd_sem, 1);
+ mutex_init(&bdev->bd_mutex);
sema_init(&bdev->bd_mount_sem, 1);
INIT_LIST_HEAD(&bdev->bd_inodes);
INIT_LIST_HEAD(&bdev->bd_list);
@@ -574,7 +574,7 @@ static int do_open(struct block_device *
}
owner = disk->fops->owner;
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
if (!bdev->bd_openers) {
bdev->bd_disk = disk;
bdev->bd_contains = bdev;
@@ -605,21 +605,21 @@ static int do_open(struct block_device *
if (ret)
goto out_first;
bdev->bd_contains = whole;
- down(&whole->bd_sem);
+ mutex_lock(&whole->bd_mutex);
whole->bd_part_count++;
p = disk->part[part - 1];
bdev->bd_inode->i_data.backing_dev_info =
whole->bd_inode->i_data.backing_dev_info;
if (!(disk->flags & GENHD_FL_UP) || !p || !p->nr_sects) {
whole->bd_part_count--;
- up(&whole->bd_sem);
+ mutex_unlock(&whole->bd_mutex);
ret = -ENXIO;
goto out_first;
}
kobject_get(&p->kobj);
bdev->bd_part = p;
bd_set_size(bdev, (loff_t) p->nr_sects << 9);
- up(&whole->bd_sem);
+ mutex_unlock(&whole->bd_mutex);
}
} else {
put_disk(disk);
@@ -633,13 +633,13 @@ static int do_open(struct block_device *
if (bdev->bd_invalidated)
rescan_partitions(bdev->bd_disk, bdev);
} else {
- down(&bdev->bd_contains->bd_sem);
+ mutex_lock(&bdev->bd_contains->bd_mutex);
bdev->bd_contains->bd_part_count++;
- up(&bdev->bd_contains->bd_sem);
+ mutex_unlock(&bdev->bd_contains->bd_mutex);
}
}
bdev->bd_openers++;
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
unlock_kernel();
return 0;
@@ -652,7 +652,7 @@ out_first:
put_disk(disk);
module_put(owner);
out:
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
unlock_kernel();
if (ret)
bdput(bdev);
@@ -714,7 +714,7 @@ int blkdev_put(struct block_device *bdev
struct inode *bd_inode = bdev->bd_inode;
struct gendisk *disk = bdev->bd_disk;
- down(&bdev->bd_sem);
+ mutex_lock(&bdev->bd_mutex);
lock_kernel();
if (!--bdev->bd_openers) {
sync_blockdev(bdev);
@@ -724,9 +724,9 @@ int blkdev_put(struct block_device *bdev
if (disk->fops->release)
ret = disk->fops->release(bd_inode, NULL);
} else {
- down(&bdev->bd_contains->bd_sem);
+ mutex_lock(&bdev->bd_contains->bd_mutex);
bdev->bd_contains->bd_part_count--;
- up(&bdev->bd_contains->bd_sem);
+ mutex_unlock(&bdev->bd_contains->bd_mutex);
}
if (!bdev->bd_openers) {
struct module *owner = disk->fops->owner;
@@ -746,7 +746,7 @@ int blkdev_put(struct block_device *bdev
bdev->bd_contains = NULL;
}
unlock_kernel();
- up(&bdev->bd_sem);
+ mutex_unlock(&bdev->bd_mutex);
bdput(bdev);
return ret;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]