10 Mar, 2009

1 commit


06 Mar, 2009

1 commit

  • Commit 1e42807918d17e8c93bf14fbb74be84b141334c1 introduced a bug where we
    don't get front/back segment sizes in the bio in blk_recount_segments().
    Fix this by tracking the back bio as well as the front bio in
    __blk_recalc_rq_segments(), this also cleans up the interface by getting
    rid of the segment size pointer passing.

    Tested-by: Thomas Gleixner
    Tested-by: Ingo Molnar
    Signed-off-by: Jens Axboe

    Jens Axboe
     

27 Feb, 2009

1 commit


26 Feb, 2009

2 commits

  • 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
     
  • Add documentation for register_blkdev() function and for the parameters.

    Signed-off-by: Márton Németh
    Cc: Greg Kroah-Hartman
    Signed-off-by: Jens Axboe

    Márton Németh
     

19 Feb, 2009

1 commit


18 Feb, 2009

4 commits

  • blk_abort_queue() iterates the timeout list and aborts each request on the
    list, but if the driver error handling readds a request to the timeout list
    during this processing, we could be looping forever. Fix this by splicing
    current entries to a local list and run over that list instead.

    Signed-off-by: Jens Axboe

    Hannes Reinecke
     
  • Hi Tejun,

    it looks like your commit:

    block: don't depend on consecutive minor space
    f331c0296f2a9fee0d396a70598b954062603015

    broke a particular case for booting from partitioned md/raid devices.
    That is the second time this has been broken recently. The previous
    time was fixed by

    block: do_mounts - accept root=
    30f2f0eb4bd2c43d10a8b0d872c6e5ad8f31c9a0

    Because the data isn't available when an md device is first created
    (we add disks and set it up after creation), the initial partition
    scan finds nothing. It is not until the device is opened that
    another partition scan happens and finds something.

    So at the point where the kernel parameter "root=/dev/md_d0p1" is
    being parsed, md_d0 exists, but md_d0p1 does not.
    However if we let blk_lookup_devt return the correct device number
    even though the device doesn't exist, then the attempt to mount it
    will successfully find the partition.

    I have tried in the past to find a way to get the partition table to
    be read as soon as the array is assembled but that proved impossible
    (at the time). I don't remember the details, and could possibly
    revisit it. However it would be really nice if blk_lookup_devt
    could be adjusted to again accept non existant partitions.

    Signed-off-by: Jens Axboe

    Neil Brown
     
  • We can't OR shift values, so get rid of BIO_RW_SYNC and use BIO_RW_SYNCIO
    and BIO_RW_UNPLUG explicitly. This brings back the behaviour from before
    213d9417fec62ef4c3675621b9364a667954d4dd.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • When submitting requests via SG_IO, which does a sync io, a
    bsg_command is not allocated. So an in-Kernel sense_buffer was not
    set. However when calling blk_execute_rq() with no sense buffer
    one is provided from the stack. Now bsg at blk_complete_sgv4_hdr_rq()
    would check if rq->sense_len and a sense was requested by sg_io_v4
    the rq->sense was copy_user() back, but by now it is already mangled
    stack memory.

    I have fixed that by forcing a sense_buffer when calling bsg_map_hdr().
    The bsg_command->sense is provided in the write/read path like before,
    and on-the-stack buffer is provided when doing SG_IO.

    I have also fixed a dprintk message to print rq->errors in hex because
    of the scsi bit-field use of this member. For other block devices it
    does not matter anyway.

    Signed-off-by: Boaz Harrosh
    Acked-by: FUJITA Tomonori
    Signed-off-by: Jens Axboe

    Boaz Harrosh
     

09 Feb, 2009

1 commit


06 Feb, 2009

3 commits

  • Impact: cleanup

    To make it easy for ftrace plugin writers, as this was open coded in
    the existing plugins

    Signed-off-by: Arnaldo Carvalho de Melo
    Acked-by: Frédéric Weisbecker
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Impact: new API

    These new functions do what previously was being open coded, reducing
    the number of details ftrace plugin writers have to worry about.

    It also standardizes the handling of stacktrace, userstacktrace and
    other trace options we may introduce in the future.

    With this patch, for instance, the blk tracer (and some others already
    in the tree) can use the "userstacktrace" /d/tracing/trace_options
    facility.

    $ codiff /tmp/vmlinux.before /tmp/vmlinux.after
    linux-2.6-tip/kernel/trace/trace.c:
    trace_vprintk | -5
    trace_graph_return | -22
    trace_graph_entry | -26
    trace_function | -45
    __ftrace_trace_stack | -27
    ftrace_trace_userstack | -29
    tracing_sched_switch_trace | -66
    tracing_stop | +1
    trace_seq_to_user | -1
    ftrace_trace_special | -63
    ftrace_special | +1
    tracing_sched_wakeup_trace | -70
    tracing_reset_online_cpus | -1
    13 functions changed, 2 bytes added, 355 bytes removed, diff: -353

    linux-2.6-tip/block/blktrace.c:
    __blk_add_trace | -58
    1 function changed, 58 bytes removed, diff: -58

    linux-2.6-tip/kernel/trace/trace.c:
    trace_buffer_lock_reserve | +88
    trace_buffer_unlock_commit | +86
    2 functions changed, 174 bytes added, diff: +174

    /tmp/vmlinux.after:
    16 functions changed, 176 bytes added, 413 bytes removed, diff: -237

    Signed-off-by: Arnaldo Carvalho de Melo
    Acked-by: Frédéric Weisbecker
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Impact: API change, cleanup

    >From ring_buffer_{lock_reserve,unlock_commit}.

    $ codiff /tmp/vmlinux.before /tmp/vmlinux.after
    linux-2.6-tip/kernel/trace/trace.c:
    trace_vprintk | -14
    trace_graph_return | -14
    trace_graph_entry | -10
    trace_function | -8
    __ftrace_trace_stack | -8
    ftrace_trace_userstack | -8
    tracing_sched_switch_trace | -8
    ftrace_trace_special | -12
    tracing_sched_wakeup_trace | -8
    9 functions changed, 90 bytes removed, diff: -90

    linux-2.6-tip/block/blktrace.c:
    __blk_add_trace | -1
    1 function changed, 1 bytes removed, diff: -1

    /tmp/vmlinux.after:
    10 functions changed, 91 bytes removed, diff: -91

    Signed-off-by: Arnaldo Carvalho de Melo
    Acked-by: Frédéric Weisbecker
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     

05 Feb, 2009

4 commits


03 Feb, 2009

4 commits


02 Feb, 2009

1 commit


30 Jan, 2009

8 commits


29 Jan, 2009

1 commit


27 Jan, 2009

2 commits


26 Jan, 2009

1 commit

  • Impact: New way of using the blktrace infrastructure

    This drops the requirement of userspace utilities to use the blktrace
    facility.

    Configuration is done thru sysfs, adding a "trace" directory to the
    partition directory where blktrace can be enabled for the associated
    request_queue.

    The same filters present in the IOCTL interface are present as sysfs
    device attributes.

    The /sys/block/sdX/sdXN/trace/enable file allows tracing without any
    filters.

    The other files in this directory: pid, act_mask, start_lba and end_lba
    can be used with the same meaning as with the IOCTL interface.

    Using the sysfs interface will only setup the request_queue->blk_trace
    fields, tracing will only take place when the "blk" tracer is selected
    via the ftrace interface, as in the following example:

    To see the trace, one can use the /d/tracing/trace file or the
    /d/tracign/trace_pipe file, with semantics defined in the ftrace
    documentation in Documentation/ftrace.txt.

    [root@f10-1 ~]# cat /t/trace
    kjournald-305 [000] 3046.491224: 8,1 A WBS 6367 + 8 -0 [000] 3046.511914: 8,1 C RS 6367 + 8 [6367]
    [root@f10-1 ~]#

    The default line context (prefix) format is the one described in the ftrace
    documentation, with the blktrace specific bits using its existing format,
    described in blkparse(8).

    If one wants to have the classic blktrace formatting, this is possible by
    using:

    [root@f10-1 ~]# echo blk_classic > /t/trace_options
    [root@f10-1 ~]# cat /t/trace
    8,1 0 3046.491224 305 A WBS 6367 + 8 /t/trace_options
    [root@f10-1 ~]# echo stacktrace > /t/trace_options

    [root@f10-1 ~]# cat /t/trace
    kjournald-305 [000] 3318.826779: 8,1 A WBS 6375 + 8
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     

09 Jan, 2009

2 commits

  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (57 commits)
    jbd2: Fix oops in jbd2_journal_init_inode() on corrupted fs
    ext4: Remove "extents" mount option
    block: Add Kconfig help which notes that ext4 needs CONFIG_LBD
    ext4: Make printk's consistently prefixed with "EXT4-fs: "
    ext4: Add sanity checks for the superblock before mounting the filesystem
    ext4: Add mount option to set kjournald's I/O priority
    jbd2: Submit writes to the journal using WRITE_SYNC
    jbd2: Add pid and journal device name to the "kjournald2 starting" message
    ext4: Add markers for better debuggability
    ext4: Remove code to create the journal inode
    ext4: provide function to release metadata pages under memory pressure
    ext3: provide function to release metadata pages under memory pressure
    add releasepage hooks to block devices which can be used by file systems
    ext4: Fix s_dirty_blocks_counter if block allocation failed with nodelalloc
    ext4: Init the complete page while building buddy cache
    ext4: Don't allow new groups to be added during block allocation
    ext4: mark the blocks/inode bitmap beyond end of group as used
    ext4: Use new buffer_head flag to check uninit group bitmaps initialization
    ext4: Fix the race between read_inode_bitmap() and ext4_new_inode()
    ext4: code cleanup
    ...

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (45 commits)
    [SCSI] qla2xxx: Update version number to 8.03.00-k1.
    [SCSI] qla2xxx: Add ISP81XX support.
    [SCSI] qla2xxx: Use proper request/response queues with MQ instantiations.
    [SCSI] qla2xxx: Correct MQ-chain information retrieval during a firmware dump.
    [SCSI] qla2xxx: Collapse EFT/FCE copy procedures during a firmware dump.
    [SCSI] qla2xxx: Don't pollute kernel logs with ZIO/RIO status messages.
    [SCSI] qla2xxx: Don't fallback to interrupt-polling during re-initialization with MSI-X enabled.
    [SCSI] qla2xxx: Remove support for reading/writing HW-event-log.
    [SCSI] cxgb3i: add missing include
    [SCSI] scsi_lib: fix DID_RESET status problems
    [SCSI] fc transport: restore missing dev_loss_tmo callback to LLDD
    [SCSI] aha152x_cs: Fix regression that keeps driver from using shared interrupts
    [SCSI] sd: Correctly handle 6-byte commands with DIX
    [SCSI] sd: DIF: Fix tagging on platforms with signed char
    [SCSI] sd: DIF: Show app tag on error
    [SCSI] Fix error handling for DIF/DIX
    [SCSI] scsi_lib: don't decrement busy counters when inserting commands
    [SCSI] libsas: fix test for negative unsigned and typos
    [SCSI] a2091, gvp11: kill warn_unused_result warnings
    [SCSI] fusion: Move a dereference below a NULL test
    ...

    Fixed up trivial conflict due to moving the async part of sd_probe
    around in the async probes vs using dev_set_name() in naming.

    Linus Torvalds
     

07 Jan, 2009

2 commits


03 Jan, 2009

1 commit

  • The commit 818827669d85b84241696ffef2de485db46b0b5e (block: make
    blk_rq_map_user take a NULL user-space buffer) extended
    blk_rq_map_user to accept a NULL user-space buffer with a READ
    command. It was necessary to convert sg to use the block layer mapping
    API.

    This patch extends blk_rq_map_user again for a WRITE command. It is
    necessary to convert st and osst drivers to use the block layer
    apping API.

    Signed-off-by: FUJITA Tomonori
    Acked-by: Jens Axboe
    Signed-off-by: James Bottomley

    FUJITA Tomonori