diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-02-02 22:19:50 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-02-02 22:19:50 -0500 |
| commit | 86adf8adfcb3d3f4b6c30aeb40da480da02de1d1 (patch) | |
| tree | 87800568dc48006f3418689e4d23578f5c1d79b7 | |
| parent | 3fff0179e33cd7d0a688dab65700c46ad089e934 (diff) | |
| parent | cbb5901b904e122139e97c6f4caed9b1f13c3455 (diff) | |
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
block: add text file detailing queue/ sysfs files
bio.h: If they MUST be inlined, then use __always_inline
Fix misleading comment in bio.h
block: fix inconsistent parenthesisation of QUEUE_FLAG_DEFAULT
block: fix oops in blk_queue_io_stat()
| -rw-r--r-- | Documentation/block/queue-sysfs.txt | 63 | ||||
| -rw-r--r-- | block/blk-core.c | 6 | ||||
| -rw-r--r-- | block/blk.h | 8 | ||||
| -rw-r--r-- | include/linux/bio.h | 10 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 2 |
5 files changed, 81 insertions, 8 deletions
diff --git a/Documentation/block/queue-sysfs.txt b/Documentation/block/queue-sysfs.txt new file mode 100644 index 000000000000..e164403f60e1 --- /dev/null +++ b/Documentation/block/queue-sysfs.txt | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | Queue sysfs files | ||
| 2 | ================= | ||
| 3 | |||
| 4 | This text file will detail the queue files that are located in the sysfs tree | ||
| 5 | for each block device. Note that stacked devices typically do not export | ||
| 6 | any settings, since their queue merely functions are a remapping target. | ||
| 7 | These files are the ones found in the /sys/block/xxx/queue/ directory. | ||
| 8 | |||
| 9 | Files denoted with a RO postfix are readonly and the RW postfix means | ||
| 10 | read-write. | ||
| 11 | |||
| 12 | hw_sector_size (RO) | ||
| 13 | ------------------- | ||
| 14 | This is the hardware sector size of the device, in bytes. | ||
| 15 | |||
| 16 | max_hw_sectors_kb (RO) | ||
| 17 | ---------------------- | ||
| 18 | This is the maximum number of kilobytes supported in a single data transfer. | ||
| 19 | |||
| 20 | max_sectors_kb (RW) | ||
| 21 | ------------------- | ||
| 22 | This is the maximum number of kilobytes that the block layer will allow | ||
| 23 | for a filesystem request. Must be smaller than or equal to the maximum | ||
| 24 | size allowed by the hardware. | ||
| 25 | |||
| 26 | nomerges (RW) | ||
| 27 | ------------- | ||
| 28 | This enables the user to disable the lookup logic involved with IO merging | ||
| 29 | requests in the block layer. Merging may still occur through a direct | ||
| 30 | 1-hit cache, since that comes for (almost) free. The IO scheduler will not | ||
| 31 | waste cycles doing tree/hash lookups for merges if nomerges is 1. Defaults | ||
| 32 | to 0, enabling all merges. | ||
| 33 | |||
| 34 | nr_requests (RW) | ||
| 35 | ---------------- | ||
| 36 | This controls how many requests may be allocated in the block layer for | ||
| 37 | read or write requests. Note that the total allocated number may be twice | ||
| 38 | this amount, since it applies only to reads or writes (not the accumulated | ||
| 39 | sum). | ||
| 40 | |||
| 41 | read_ahead_kb (RW) | ||
| 42 | ------------------ | ||
| 43 | Maximum number of kilobytes to read-ahead for filesystems on this block | ||
| 44 | device. | ||
| 45 | |||
| 46 | rq_affinity (RW) | ||
| 47 | ---------------- | ||
| 48 | If this option is enabled, the block layer will migrate request completions | ||
| 49 | to the CPU that originally submitted the request. For some workloads | ||
| 50 | this provides a significant reduction in CPU cycles due to caching effects. | ||
| 51 | |||
| 52 | scheduler (RW) | ||
| 53 | -------------- | ||
| 54 | When read, this file will display the current and available IO schedulers | ||
| 55 | for this block device. The currently active IO scheduler will be enclosed | ||
| 56 | in [] brackets. Writing an IO scheduler name to this file will switch | ||
| 57 | control of this block device to that new IO scheduler. Note that writing | ||
| 58 | an IO scheduler name to this file will attempt to load that IO scheduler | ||
| 59 | module, if it isn't already present in the system. | ||
| 60 | |||
| 61 | |||
| 62 | |||
| 63 | Jens Axboe <jens.axboe@oracle.com>, February 2009 | ||
diff --git a/block/blk-core.c b/block/blk-core.c index ca69f3d94100..29bcfac6c688 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
| @@ -69,7 +69,7 @@ static void drive_stat_acct(struct request *rq, int new_io) | |||
| 69 | int rw = rq_data_dir(rq); | 69 | int rw = rq_data_dir(rq); |
| 70 | int cpu; | 70 | int cpu; |
| 71 | 71 | ||
| 72 | if (!blk_fs_request(rq) || !disk || !blk_queue_io_stat(disk->queue)) | 72 | if (!blk_fs_request(rq) || !disk || !blk_do_io_stat(disk->queue)) |
| 73 | return; | 73 | return; |
| 74 | 74 | ||
| 75 | cpu = part_stat_lock(); | 75 | cpu = part_stat_lock(); |
| @@ -1667,7 +1667,7 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes) | |||
| 1667 | { | 1667 | { |
| 1668 | struct gendisk *disk = req->rq_disk; | 1668 | struct gendisk *disk = req->rq_disk; |
| 1669 | 1669 | ||
| 1670 | if (!disk || !blk_queue_io_stat(disk->queue)) | 1670 | if (!disk || !blk_do_io_stat(disk->queue)) |
| 1671 | return; | 1671 | return; |
| 1672 | 1672 | ||
| 1673 | if (blk_fs_request(req)) { | 1673 | if (blk_fs_request(req)) { |
| @@ -1686,7 +1686,7 @@ static void blk_account_io_done(struct request *req) | |||
| 1686 | { | 1686 | { |
| 1687 | struct gendisk *disk = req->rq_disk; | 1687 | struct gendisk *disk = req->rq_disk; |
| 1688 | 1688 | ||
| 1689 | if (!disk || !blk_queue_io_stat(disk->queue)) | 1689 | if (!disk || !blk_do_io_stat(disk->queue)) |
| 1690 | return; | 1690 | return; |
| 1691 | 1691 | ||
| 1692 | /* | 1692 | /* |
diff --git a/block/blk.h b/block/blk.h index 6e1ed40534e9..0dce92c37496 100644 --- a/block/blk.h +++ b/block/blk.h | |||
| @@ -108,4 +108,12 @@ static inline int blk_cpu_to_group(int cpu) | |||
| 108 | #endif | 108 | #endif |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | static inline int blk_do_io_stat(struct request_queue *q) | ||
| 112 | { | ||
| 113 | if (q) | ||
| 114 | return blk_queue_io_stat(q); | ||
| 115 | |||
| 116 | return 0; | ||
| 117 | } | ||
| 118 | |||
| 111 | #endif | 119 | #endif |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 0942765cf8c0..2aa283ab062b 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -451,12 +451,13 @@ extern struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly; | |||
| 451 | 451 | ||
| 452 | #ifdef CONFIG_HIGHMEM | 452 | #ifdef CONFIG_HIGHMEM |
| 453 | /* | 453 | /* |
| 454 | * remember to add offset! and never ever reenable interrupts between a | 454 | * remember never ever reenable interrupts between a bvec_kmap_irq and |
| 455 | * bvec_kmap_irq and bvec_kunmap_irq!! | 455 | * bvec_kunmap_irq! |
| 456 | * | 456 | * |
| 457 | * This function MUST be inlined - it plays with the CPU interrupt flags. | 457 | * This function MUST be inlined - it plays with the CPU interrupt flags. |
| 458 | */ | 458 | */ |
| 459 | static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags) | 459 | static __always_inline char *bvec_kmap_irq(struct bio_vec *bvec, |
| 460 | unsigned long *flags) | ||
| 460 | { | 461 | { |
| 461 | unsigned long addr; | 462 | unsigned long addr; |
| 462 | 463 | ||
| @@ -472,7 +473,8 @@ static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags) | |||
| 472 | return (char *) addr + bvec->bv_offset; | 473 | return (char *) addr + bvec->bv_offset; |
| 473 | } | 474 | } |
| 474 | 475 | ||
| 475 | static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags) | 476 | static __always_inline void bvec_kunmap_irq(char *buffer, |
| 477 | unsigned long *flags) | ||
| 476 | { | 478 | { |
| 477 | unsigned long ptr = (unsigned long) buffer & PAGE_MASK; | 479 | unsigned long ptr = (unsigned long) buffer & PAGE_MASK; |
| 478 | 480 | ||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d08c4b8219a6..dcaa0fd84b02 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -455,7 +455,7 @@ struct request_queue | |||
| 455 | 455 | ||
| 456 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 456 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
| 457 | (1 << QUEUE_FLAG_CLUSTER) | \ | 457 | (1 << QUEUE_FLAG_CLUSTER) | \ |
| 458 | 1 << QUEUE_FLAG_STACKABLE) | 458 | (1 << QUEUE_FLAG_STACKABLE)) |
| 459 | 459 | ||
| 460 | static inline int queue_is_locked(struct request_queue *q) | 460 | static inline int queue_is_locked(struct request_queue *q) |
| 461 | { | 461 | { |
