Jens Axboe
1e42807918
block: reduce stack footprint of blk_recount_segments()
blk_recalc_rq_segments() requires a request structure passed in, which
we don't have from blk_recount_segments(). So the latter allocates one on
the stack, using > 400 bytes of stack for that. This can cause us to spill
over one page of stack from ext4 at least:
0) 4560 400 blk_recount_segments+0x43/0x62
1) 4160 32 bio_phys_segments+0x1c/0x24
2) 4128 32 blk_rq_bio_prep+0x2a/0xf9
3) 4096 32 init_request_from_bio+0xf9/0xfe
4) 4064 112 __make_request+0x33c/0x3f6
5) 3952 144 generic_make_request+0x2d1/0x321
6) 3808 64 submit_bio+0xb9/0xc3
7) 3744 48 submit_bh+0xea/0x10e
8) 3696 368 ext4_mb_init_cache+0x257/0xa6a [ext4]
9) 3328 288 ext4_mb_regular_allocator+0x421/0xcd9 [ext4]
10) 3040 160 ext4_mb_new_blocks+0x211/0x4b4 [ext4]
11) 2880 336 ext4_ext_get_blocks+0xb61/0xd45 [ext4]
12) 2544 96 ext4_get_blocks_wrap+0xf2/0x200 [ext4]
13) 2448 80 ext4_da_get_block_write+0x6e/0x16b [ext4]
14) 2368 352 mpage_da_map_blocks+0x7e/0x4b3 [ext4]
15) 2016 352 ext4_da_writepages+0x2ce/0x43c [ext4]
16) 1664 32 do_writepages+0x2d/0x3c
17) 1632 144 __writeback_single_inode+0x162/0x2cd
18) 1488 96 generic_sync_sb_inodes+0x1e3/0x32b
19) 1392 16 sync_sb_inodes+0xe/0x10
20) 1376 48 writeback_inodes+0x69/0xb3
21) 1328 208 balance_dirty_pages_ratelimited_nr+0x187/0x2f9
22) 1120 224 generic_file_buffered_write+0x1d4/0x2c4
23) 896 176 __generic_file_aio_write_nolock+0x35f/0x393
24) 720 80 generic_file_aio_write+0x6c/0xc8
25) 640 80 ext4_file_write+0xa9/0x137 [ext4]
26) 560 320 do_sync_write+0xf0/0x137
27) 240 48 vfs_write+0xb3/0x13c
28) 192 64 sys_write+0x4c/0x74
29) 128 128 system_call_fastpath+0x16/0x1b
Split the segment counting out into a __blk_recalc_rq_segments() helper
to avoid allocating an onstack request just for checking the physical
segment count.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
|
2009-02-26 10:45:48 +01:00 |
| .. |
|
as-iosched.c
|
block: get rid of elevator_t typedef
|
2008-12-29 08:29:50 +01:00 |
|
blk-barrier.c
|
block: Fix documentation for blkdev_issue_flush()
|
2009-01-30 12:34:37 +01:00 |
|
blk-core.c
|
block: fix oops in blk_queue_io_stat()
|
2009-02-02 08:42:32 +01:00 |
|
blk-exec.c
|
Add some block/ source files to the kernel-api docbook. Fix kernel-doc notation in them as needed. Fix changed function parameter names. Fix typos/spellos. In comments, change REQ_SPECIAL to REQ_TYPE_SPECIAL and REQ_BLOCK_PC to REQ_TYPE_BLOCK_PC.
|
2008-10-09 08:56:03 +02:00 |
|
blk-integrity.c
|
block: Allow empty integrity profile
|
2009-01-30 12:34:36 +01:00 |
|
blk-ioc.c
|
cfq-iosched: fix RCU race in the cfq io_context destructor handling
|
2008-05-07 09:28:57 +02:00 |
|
blk-map.c
|
[SCSI] block: make blk_rq_map_user take a NULL user-space buffer for WRITE
|
2009-01-02 11:10:35 -06:00 |
|
blk-merge.c
|
block: reduce stack footprint of blk_recount_segments()
|
2009-02-26 10:45:48 +01:00 |
|
blk-settings.c
|
block: use min_not_zero in blk_queue_stack_limits
|
2008-12-29 08:29:51 +01:00 |
|
blk-softirq.c
|
block: make blk_softirq_init() static
|
2008-12-29 08:29:51 +01:00 |
|
blk-sysfs.c
|
block: add sysfs file for controlling io stats accounting
|
2009-01-30 12:34:38 +01:00 |
|
blk-tag.c
|
block/blk-tag.c: cleanup kernel-doc
|
2008-12-29 08:28:43 +01:00 |
|
blk-timeout.c
|
block: fix deadlock in blk_abort_queue() for drivers that readd to timeout list
|
2009-02-18 10:34:16 +01:00 |
|
blk.h
|
block: fix oops in blk_queue_io_stat()
|
2009-02-02 08:42:32 +01:00 |
|
blktrace.c
|
block: fix bad definition of BIO_RW_SYNC
|
2009-02-18 10:32:00 +01:00 |
|
bsg.c
|
bsg: Fix sense buffer bug in SG_IO
|
2009-02-18 10:32:00 +01:00 |
|
cfq-iosched.c
|
cfq-iosched: Allow RT requests to pre-empt ongoing BE timeslice
|
2009-01-30 12:47:33 +01:00 |
|
cmd-filter.c
|
[PATCH] introduce fmode_t, do annotations
|
2008-10-21 07:47:06 -04:00 |
|
compat_ioctl.c
|
block: don't take lock on changing ra_pages
|
2008-12-29 08:28:43 +01:00 |
|
deadline-iosched.c
|
block: get rid of elevator_t typedef
|
2008-12-29 08:29:50 +01:00 |
|
elevator.c
|
block: get rid of elevator_t typedef
|
2008-12-29 08:29:50 +01:00 |
|
genhd.c
|
block: add documentation for register_blkdev()
|
2009-02-26 10:45:48 +01:00 |
|
ioctl.c
|
block: don't take lock on changing ra_pages
|
2008-12-29 08:28:43 +01:00 |
|
Kconfig
|
block: Add Kconfig help which notes that ext4 needs CONFIG_LBD
|
2009-01-06 15:16:33 -05:00 |
|
Kconfig.iosched
|
update I/O sched Kconfig help texts - CFQ is now default, not AS.
|
2007-02-17 20:08:22 +01:00 |
|
Makefile
|
block: unify request timeout handling
|
2008-10-09 08:56:13 +02:00 |
|
noop-iosched.c
|
block: get rid of elevator_t typedef
|
2008-12-29 08:29:50 +01:00 |
|
scsi_ioctl.c
|
scsi-ioctl: use clock_t <> jiffies
|
2008-12-29 08:28:42 +01:00 |