aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-02-02 22:19:50 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-02-02 22:19:50 -0500
commit86adf8adfcb3d3f4b6c30aeb40da480da02de1d1 (patch)
tree87800568dc48006f3418689e4d23578f5c1d79b7
parent3fff0179e33cd7d0a688dab65700c46ad089e934 (diff)
parentcbb5901b904e122139e97c6f4caed9b1f13c3455 (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.txt63
-rw-r--r--block/blk-core.c6
-rw-r--r--block/blk.h8
-rw-r--r--include/linux/bio.h10
-rw-r--r--include/linux/blkdev.h2
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 @@
1Queue sysfs files
2=================
3
4This text file will detail the queue files that are located in the sysfs tree
5for each block device. Note that stacked devices typically do not export
6any settings, since their queue merely functions are a remapping target.
7These files are the ones found in the /sys/block/xxx/queue/ directory.
8
9Files denoted with a RO postfix are readonly and the RW postfix means
10read-write.
11
12hw_sector_size (RO)
13-------------------
14This is the hardware sector size of the device, in bytes.
15
16max_hw_sectors_kb (RO)
17----------------------
18This is the maximum number of kilobytes supported in a single data transfer.
19
20max_sectors_kb (RW)
21-------------------
22This is the maximum number of kilobytes that the block layer will allow
23for a filesystem request. Must be smaller than or equal to the maximum
24size allowed by the hardware.
25
26nomerges (RW)
27-------------
28This enables the user to disable the lookup logic involved with IO merging
29requests in the block layer. Merging may still occur through a direct
301-hit cache, since that comes for (almost) free. The IO scheduler will not
31waste cycles doing tree/hash lookups for merges if nomerges is 1. Defaults
32to 0, enabling all merges.
33
34nr_requests (RW)
35----------------
36This controls how many requests may be allocated in the block layer for
37read or write requests. Note that the total allocated number may be twice
38this amount, since it applies only to reads or writes (not the accumulated
39sum).
40
41read_ahead_kb (RW)
42------------------
43Maximum number of kilobytes to read-ahead for filesystems on this block
44device.
45
46rq_affinity (RW)
47----------------
48If this option is enabled, the block layer will migrate request completions
49to the CPU that originally submitted the request. For some workloads
50this provides a significant reduction in CPU cycles due to caching effects.
51
52scheduler (RW)
53--------------
54When read, this file will display the current and available IO schedulers
55for this block device. The currently active IO scheduler will be enclosed
56in [] brackets. Writing an IO scheduler name to this file will switch
57control of this block device to that new IO scheduler. Note that writing
58an IO scheduler name to this file will attempt to load that IO scheduler
59module, if it isn't already present in the system.
60
61
62
63Jens 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
111static 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 */
459static inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags) 459static __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
475static inline void bvec_kunmap_irq(char *buffer, unsigned long *flags) 476static __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
460static inline int queue_is_locked(struct request_queue *q) 460static inline int queue_is_locked(struct request_queue *q)
461{ 461{