10 May, 2007

1 commit

  • Switch the kblockd flushing from a global flush to a more specific
    flush_work().

    (akpm: bypassed maintainers, sorry. There are other patches which depend on
    this)

    Cc: "Maciej W. Rozycki"
    Cc: David Howells
    Cc: Jens Axboe
    Cc: Nick Piggin
    Cc: Oleg Nesterov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

30 Apr, 2007

1 commit


12 Feb, 2007

1 commit


19 Dec, 2006

2 commits

  • The blk_rq_unmap_user() API is not very nice. It expects the caller to
    know that rq->bio has to be reset to the original bio, and it will
    silently do nothing if that is not done. Instead make it explicit that
    we need to pass in the first bio, by expecting a bio argument.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • We have full flexibility of merging parameters now, so we can remove the
    hooks that define back/front/request merge strategies. Nobody is using
    them anymore.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

12 Dec, 2006

1 commit

  • While working on bidi support at struct request level
    I have found that blk_queue_activity_fn is actually never used.
    The only user is in ide-probe.c with this code:

    /* enable led activity for disk drives only */
    if (drive->media == ide_disk && hwif->led_act)
    blk_queue_activity_fn(q, hwif->led_act, drive);

    And led_act is never initialized anywhere.
    (Looking back at older kernels it was used in the PPC arch, but was removed around 2.6.18)
    Unless it is all for future use off course.
    (this patch is against linux-2.6-block.git as off 2006/12/4)

    Signed-off-by: Boaz Harrosh
    Signed-off-by: Jens Axboe

    Boaz Harrosh
     

01 Dec, 2006

1 commit


21 Oct, 2006

2 commits

  • Separate out the concept of "queue congestion" from "backing-dev congestion".
    Congestion is a backing-dev concept, not a queue concept.

    The blk_* congestion functions are retained, as wrappers around the core
    backing-dev congestion functions.

    This proper layering is needed so that NFS can cleanly use the congestion
    functions, and so that CONFIG_BLOCK=n actually links.

    Cc: "Thomas Maier"
    Cc: "Jens Axboe"
    Cc: Trond Myklebust
    Cc: David Howells
    Cc: Peter Osterlund
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Export the clear_queue_congested() and set_queue_congested() functions
    located in ll_rw_blk.c

    The functions are renamed to blk_clear_queue_congested() and
    blk_set_queue_congested().

    (needed in the pktcdvd driver's bio write congestion control)

    Signed-off-by: Thomas Maier
    Cc: Peter Osterlund
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Maier
     

12 Oct, 2006

1 commit


05 Oct, 2006

1 commit


01 Oct, 2006

16 commits

  • Don't just do nothing: it'll cause busywaits all over writeback and page
    reclaim.

    For now, take a fixed-length nap. Will improve when NFS starts waking up
    throttled processes.

    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Andrew Morton
     
  • Make it possible to disable the block layer. Not all embedded devices require
    it, some can make do with just JFFS2, NFS, ramfs, etc - none of which require
    the block layer to be present.

    This patch does the following:

    (*) Introduces CONFIG_BLOCK to disable the block layer, buffering and blockdev
    support.

    (*) Adds dependencies on CONFIG_BLOCK to any configuration item that controls
    an item that uses the block layer. This includes:

    (*) Block I/O tracing.

    (*) Disk partition code.

    (*) All filesystems that are block based, eg: Ext3, ReiserFS, ISOFS.

    (*) The SCSI layer. As far as I can tell, even SCSI chardevs use the
    block layer to do scheduling. Some drivers that use SCSI facilities -
    such as USB storage - end up disabled indirectly from this.

    (*) Various block-based device drivers, such as IDE and the old CDROM
    drivers.

    (*) MTD blockdev handling and FTL.

    (*) JFFS - which uses set_bdev_super(), something it could avoid doing by
    taking a leaf out of JFFS2's book.

    (*) Makes most of the contents of linux/blkdev.h, linux/buffer_head.h and
    linux/elevator.h contingent on CONFIG_BLOCK being set. sector_div() is,
    however, still used in places, and so is still available.

    (*) Also made contingent are the contents of linux/mpage.h, linux/genhd.h and
    parts of linux/fs.h.

    (*) Makes a number of files in fs/ contingent on CONFIG_BLOCK.

    (*) Makes mm/bounce.c (bounce buffering) contingent on CONFIG_BLOCK.

    (*) set_page_dirty() doesn't call __set_page_dirty_buffers() if CONFIG_BLOCK
    is not enabled.

    (*) fs/no-block.c is created to hold out-of-line stubs and things that are
    required when CONFIG_BLOCK is not set:

    (*) Default blockdev file operations (to give error ENODEV on opening).

    (*) Makes some /proc changes:

    (*) /proc/devices does not list any blockdevs.

    (*) /proc/diskstats and /proc/partitions are contingent on CONFIG_BLOCK.

    (*) Makes some compat ioctl handling contingent on CONFIG_BLOCK.

    (*) If CONFIG_BLOCK is not defined, makes sys_quotactl() return -ENODEV if
    given command other than Q_SYNC or if a special device is specified.

    (*) In init/do_mounts.c, no reference is made to the blockdev routines if
    CONFIG_BLOCK is not defined. This does not prohibit NFS roots or JFFS2.

    (*) The bdflush, ioprio_set and ioprio_get syscalls can now be absent (return
    error ENOSYS by way of cond_syscall if so).

    (*) The seclvl_bd_claim() and seclvl_bd_release() security calls do nothing if
    CONFIG_BLOCK is not set, since they can't then happen.

    Signed-Off-By: David Howells
    Signed-off-by: Jens Axboe

    David Howells
     
  • We can use this information for making more intelligent priority
    decisions, and it will also be useful for blktrace.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • CFQ implements this on its own now, but it's really block layer
    knowledge. Tells a device queue to start dispatching requests to
    the driver, taking care to unplug if needed. Also fixes the issue
    where as/cfq will invoke a stopped queue, which we really don't
    want.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Some were kmalloc_node(), some were still kmalloc(). Change them all to
    kmalloc_node().

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Signed-off-by: Jens Axboe

    Jens Axboe
     
  • cfq_exit_lock is protecting two things now:

    - The per-ioc rbtree of cfq_io_contexts

    - The per-cfqd linked list of cfq_io_contexts

    The per-cfqd linked list can be protected by the queue lock, as it is (by
    definition) per cfqd as the queue lock is.

    The per-ioc rbtree is mainly used and updated by the process itself only.
    The only outside use is the io priority changing. If we move the
    priority changing to not browsing the rbtree, we can remove any locking
    from the rbtree updates and lookup completely. Let the sys_ioprio syscall
    just mark processes as having the iopriority changed and lazily update
    the private cfq io contexts the next time io is queued, and we can
    remove this locking as well.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Move some members around and unionize completion_data and rb_node since
    they cannot ever be used at the same time.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • After Christophs SCSI change, the only usage left is RQ_ACTIVE
    and RQ_INACTIVE. The block layer sets RQ_INACTIVE right before freeing
    the request, so any check for RQ_INACTIVE in a driver is a bug and
    indicates use-after-free.

    So kill/clean the remaining users, straight forward.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • It is always identical to &q->rq, and we only use it for detecting
    whether this request came out of our mempool or not. So replace it
    with an additional ->flags bit flag.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • As the comments indicates in blkdev.h, we can fold it into ->end_io_data
    usage as that is really what ->waiting is. Fixup the users of
    blk_end_sync_rq().

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Then we have enough room in the request to get rid of the dynamic
    allocations in CFQ/AS.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • We can track this in struct request.

    Signed-off-by: Jens Axboe
    Signed-off-by: Nick Piggin

    Jens Axboe
     
  • The rbtree sort/lookup/reposition logic is mostly duplicated in
    cfq/deadline/as, so move it to the elevator core. The io schedulers
    still provide the actual rb root, as we don't want to impose any sort
    of specific handling on the schedulers.

    Introduce the helpers and rb_node in struct request to help migrate the
    IO schedulers.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Right now, every IO scheduler implements its own backmerging (except for
    noop, which does no merging). That results in duplicated code for
    essentially the same operation, which is never a good thing. This patch
    moves the backmerging out of the io schedulers and into the elevator
    core. We save 1.6kb of text and as a bonus get backmerging for noop as
    well. Win-win!

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Right now ->flags is a bit of a mess: some are request types, and
    others are just modifiers. Clean this up by splitting it into
    ->cmd_type and ->cmd_flags. This allows introduction of generic
    Linux block message types, useful for sending generic Linux commands
    to block devices.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

30 Sep, 2006

1 commit


24 Sep, 2006

1 commit


23 Sep, 2006

1 commit


31 Aug, 2006

1 commit

  • The current block queue implementation already contains most of the
    machinery for shared tag maps. The only remaining pieces are a way to
    allocate and destroy a tag map independently of the queues (so that
    the maps can be managed on the life cycle of the overseeing entity)

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

    James Bottomley
     

23 Jun, 2006

3 commits

  • This saves 8 bytes of data in 64-bit archs.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • The IDE power management can just use the ->end_io_data member to store
    it's data.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • A process flag to indicate whether we are doing sync io is incredibly
    ugly. It also causes performance problems when one does a lot of async
    io and then proceeds to sync it. Part of the io will go out as async,
    and the other part as sync. This causes a disconnect between the
    previously submitted io and the synced io. For io schedulers such as CFQ,
    this will cause us lost merges and suboptimal behaviour in scheduling.

    Remove PF_SYNCWRITE completely from the fsync/msync paths, and let
    the O_DIRECT path just directly indicate that the writes are sync
    by using WRITE_SYNC instead.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

22 Jun, 2006

1 commit

  • * master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (85 commits)
    [SCSI] 53c700: remove reliance on deprecated cmnd fields
    [SCSI] hptiop: don't use cmnd->bufflen
    [SCSI] hptiop: HighPoint RocketRAID 3xxx controller driver
    [SCSI] aacraid: small misc. cleanups
    [SCSI] aacraid: Update supported product information
    [SCSI] aacraid: Fix return code interpretation
    [SCSI] scsi_transport_sas: fix panic in sas_free_rphy
    [SCSI] remove RQ_SCSI_* flags
    [SCSI] remove scsi_request infrastructure
    [SCSI] mptfusion: change driver revision to 3.03.10
    [SCSI] mptfc: abort of board reset leaves port dead requiring reboot
    [SCSI] mptfc: fix fibre channel infinite request/response loop
    [SCSI] mptfc: set fibre channel fw target missing timers to one second
    [SCSI] mptfusion: move fc event/reset handling to mptfc
    [SCSI] spi transport: don't allow dt to be set on SE or HVD buses
    [SCSI] aic7xxx: expose the bus setting to sysfs
    [SCSI] scsi: remove Documentation/scsi/cpqfc.txt
    [SCSI] drivers/scsi: Use ARRAY_SIZE macro
    [SCSI] Remove last page_address from dc395x.c
    [SCSI] hptiop: HighPoint RocketRAID 3xxx controller driver
    ...

    Fixed up conflicts in drivers/message/fusion/mptbase.c manually (due to
    the sparc interrupt cleanups)

    Linus Torvalds
     

11 Jun, 2006

1 commit

  • The RQ_SCSI_* flags are a vestiage of a long past history. The EH code
    still sets them but we never make use of that information. The other
    users is pluto.c which never had a chance to work but needs to be kept
    compiling to keep Davem happy, so copy over the definition there.

    We could probably get rid of RQ_ACTIVE/RQ_INACTIVE aswell with some
    work, there's only two more or less bogus looking uses in ubd and scsi.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: James Bottomley

    Christoph Hellwig
     

26 Apr, 2006

1 commit


13 Apr, 2006

1 commit

  • We currently have two implementations of this obsolete ioctl, one in
    the block layer and one in the scsi code. Both of them have drawbacks.

    This patch kills the scsi layer version after updating the block version
    with the missing bits:

    - argument checking
    - use scatterlist I/O
    - set number of retries based on the submitted command

    This is the last user of non-S/G I/O except for the gdth driver, so
    getting this in ASAP and through the scsi tree would be nie to kill
    the non-S/G I/O path. Jens, what do you think about adding a check
    for non-S/G I/O in the midlayer?

    Thanks to Or Gerlitz for testing this patch.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: James Bottomley

    Christoph Hellwig
     

28 Mar, 2006

2 commits

  • Detect whether a given process is seeky and if so disable (mostly) the
    idle window if it is. We still allow just a little idle time, just enough
    to allow that process to submit a new request. That is needed to maintain
    fairness across priority groups.

    In some cases, we could setup several async queues. This is not optimal
    from a performance POV, since we want all async io in one queue to perform
    good sorting on it. It also impacted sync queues, as async io got too much
    slice time.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • On setups with many disks, we spend a considerable amount of time
    looking up the process-disk mapping on each queue of io. Testing with
    a NULL based block driver, this costs 40-50% reduction in throughput
    for 1000 disks.

    Signed-off-by: Jens Axboe

    Jens Axboe