don't take lock on changing ra_pages
PATCH 1/1 don't take lock on changing ra_pages
There's no need to take queue_lock or kernel_lock when modifying bdi->ra_pages. So remove them. Also remove out of date comment for queue_max_sectors_store().
Signed-off-by Wu Fengguang <[email protected]>
--- block/blk-sysfs.c | 7 +------ block/compat_ioctl.c | 2 -- block/ioctl.c | 2 -- 3 files changed, 1 insertion(+), 10 deletions(-)
block/blk-sysfs.c +1 -6
@@ -88,9 +88,7 @@ queue_ra_store(struct request_queue *q,unsigned long ra_kb;ssize_t ret =queue_var_store (&ra_kb, page, count); -spin_lock_irq (q->queue_lock); q->backing_dev_info.ra_pages = ra_kb >> (PAGE_CACHE_SHIFT -10 ); -spin_unlock_irq (q->queue_lock);return ret; }
@@ -117,10 +115,7 @@ queue_max_sectors_store(struct request_qif (max_sectors_kb > max_hw_sectors_kb || max_sectors_kb < page_kb)return -EINVAL ; -/* -* Take the queue lock to update the readahead and max_sectors -* values synchronously: -*/ +spin_lock_irq (q->queue_lock); q->max_sectors = max_sectors_kb <<1 ;spin_unlock_irq (q->queue_lock);
block/compat_ioctl.c +0 -2
@@ -745,9 +745,7 @@ long compat_blkdev_ioctl(struct file *fi bdi =blk_get_backing_dev_info (bdev);if (bdi ==NULL )return -ENOTTY ; -lock_kernel (); bdi->ra_pages = (arg *512 ) /PAGE_CACHE_SIZE ; -unlock_kernel ();return 0 ;case BLKGETSIZE : size = bdev->bd_inode->i_size;
block/ioctl.c +0 -2
@@ -323,9 +323,7 @@ int blkdev_ioctl(struct block_device *bd bdi =blk_get_backing_dev_info (bdev);if (bdi ==NULL )return -ENOTTY ; -lock_kernel (); bdi->ra_pages = (arg *512 ) /PAGE_CACHE_SIZE ; -unlock_kernel ();return 0 ;case BLKBSZSET :/* set the logical block size */
Jens Axboe
AppliedQuoted 3 lines · Wu Fengguang
There's no need to take
queue_lockorkernel_lockwhen modifyingbdi->ra_pages. So remove them. Also remove out of date comment forqueue_max_sectors_store().
Thanks, applied to for-2.6.29.
Signature · 1 line
Jens Axboe