Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Sep 12, 2012
  1. @petersenna @axboe

    block/blk-tag.c: Remove useless kfree

    petersenna authored axboe committed
    Remove useless kfree() and clean up code related to the removal.
    The semantic patch that finds this problem is as follows:
    // <smpl>
    @r exists@
    position p1,p2;
    expression x;
    if (x@p1 == NULL) { ... kfree@p2(x); ... return ...; }
    @unchanged exists@
    position r.p1,r.p2;
    expression e <= r.x,x,e1;
    iterator I;
    statement S;
    if (x@p1 == NULL) { ... when != I(x,...) S
                            when != e = e1
                            when != e += e1
                            when != e -= e1
                            when != ++e
                            when != --e
                            when != e++
                            when != e--
                            when != &e
       kfree@p2(x); ... return ...; }
    @ok depends on unchanged exists@
    position any r.p1;
    position r.p2;
    expression x;
    ... when != true x@p1 == NULL
    @depends on !ok && unchanged@
    position r.p2;
    expression x;
    // </smpl>
    Signed-off-by: Peter Senna Tschudin <>
    Signed-off-by: Jens Axboe <>
Commits on Dec 29, 2011
  1. @djbw @axboe

    block: fix blk_queue_end_tag()

    djbw authored axboe committed
    Commit 5e08159 "block: warn if tag is greater than real_max_depth"
    cleaned up blk_queue_end_tag() to warn when the tag is truly invalid
    (greater than real_max_depth).  However, it changed behavior in the tag <
    max_depth case to not end the request.  Leading to triggering of
    BUG_ON(blk_queued_rq(rq)) in the request completion path:
    In order to allow blk_queue_resize_tags() to shrink the tag space
    blk_queue_end_tag() must always complete tags with a value less than
    real_max_depth regardless of the current max_depth.  The comment about
    "handling the shrink case" seems to be what prompted changes in this
    space, so remove it and BUG on all invalid tags (made even simpler by
    Matthew's suggestion to use an unsigned compare).
    Signed-off-by: Dan Williams <>
    Cc: Tao Ma <>
    Cc: Matthew Wilcox <>
    Reported-by: Meelis Roos <>
    Reported-by: Ed Nadolski <>
    Cc: Tejun Heo <>
    Signed-off-by: Andrew Morton <>
    Signed-off-by: Jens Axboe <>
Commits on Oct 25, 2011
  1. @taoma-tm @axboe

    block: warn if tag is greater than real_max_depth.

    taoma-tm authored axboe committed
    In case tag depth is reduced, it is max_depth not real_max_depth.
    So we should allow a request with tag >= max_depth, but for a
    tag >= real_max_depth, there really should be some problem.
    Signed-off-by: Tao Ma <>
    Signed-off-by: Jens Axboe <>
Commits on Mar 30, 2010
  1. include cleanup: Update gfp.h and slab.h includes to prepare for brea…

    Tejun Heo authored
    …king implicit slab.h inclusion from percpu.h
    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files.  percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.
    percpu.h -> slab.h dependency is about to be removed.  Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability.  As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.
    The script does the followings.
    * Scan files for gfp and slab usages and update includes such that
      only the necessary includes are there.  ie. if only gfp is used,
      gfp.h, if slab is used, slab.h.
    * When the script inserts a new include, it looks at the include
      blocks and try to put the new include such that its order conforms
      to its surrounding.  It's put in the include block which contains
      core kernel includes, in the same order that the rest are ordered -
      alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
      doesn't seem to be any matching order.
    * If the script can't find a place to put a new include (mostly
      because the file doesn't have fitting include block), it prints out
      an error message indicating which .h file needs to be added to the
    The conversion was done in the following steps.
    1. The initial automatic conversion of all .c files updated slightly
       over 4000 files, deleting around 700 includes and adding ~480 gfp.h
       and ~3000 slab.h inclusions.  The script emitted errors for ~400
    2. Each error was manually checked.  Some didn't need the inclusion,
       some needed manual addition while adding it to implementation .h or
       embedding .c file was more appropriate for others.  This step added
       inclusions to around 150 files.
    3. The script was run again and the output was compared to the edits
       from #2 to make sure no file was left behind.
    4. Several build tests were done and a couple of problems were fixed.
       e.g. lib/decompress_*.c used malloc/free() wrappers around slab
       APIs requiring slab.h to be added manually.
    5. The script was run on all .h files but without automatically
       editing them as sprinkling gfp.h and slab.h inclusions around .h
       files could easily lead to inclusion dependency hell.  Most gfp.h
       inclusion directives were ignored as stuff from gfp.h was usually
       wildly available and often used in preprocessor macros.  Each
       slab.h inclusion directive was examined and added manually as
    6. percpu.h was updated not to include slab.h.
    7. Build test were done on the following configurations and failures
       were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
       distributed build env didn't work with gcov compiles) and a few
       more options had to be turned off depending on archs to make things
       build (like ipr on powerpc/64 which failed due to missing writeq).
       * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
       * powerpc and powerpc64 SMP allmodconfig
       * sparc and sparc64 SMP allmodconfig
       * ia64 SMP allmodconfig
       * s390 SMP allmodconfig
       * alpha SMP allmodconfig
       * um on x86_64 SMP allmodconfig
    8. percpu.h modifications were reverted so that it could be applied as
       a separate patch and serve as bisection point.
    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.
    Signed-off-by: Tejun Heo <>
    Guess-its-ok-by: Christoph Lameter <>
    Cc: Ingo Molnar <>
    Cc: Lee Schermerhorn <>
Commits on Oct 6, 2009
  1. block: use proper BLK_RW_ASYNC in blk_queue_start_tag()

    Jens Axboe authored
    Makes it easier to read than the 0.
    Signed-off-by: Jens Axboe <>
Commits on May 20, 2009
  1. block: change the tag sync vs async restriction logic

    Jens Axboe authored
    Make them fully share the tag space, but disallow async requests using
    the last any two slots.
    Signed-off-by: Jens Axboe <>
Commits on May 11, 2009
  1. block: implement and enforce request peek/start/fetch

    Tejun Heo authored Jens Axboe committed
    Till now block layer allowed two separate modes of request execution.
    A request is always acquired from the request queue via
    elv_next_request().  After that, drivers are free to either dequeue it
    or process it without dequeueing.  Dequeue allows elv_next_request()
    to return the next request so that multiple requests can be in flight.
    Executing requests without dequeueing has its merits mostly in
    allowing drivers for simpler devices which can't do sg to deal with
    segments only without considering request boundary.  However, the
    benefit this brings is dubious and declining while the cost of the API
    ambiguity is increasing.  Segment based drivers are usually for very
    old or limited devices and as converting to dequeueing model isn't
    difficult, it doesn't justify the API overhead it puts on block layer
    and its more modern users.
    Previous patches converted all block low level drivers to dequeueing
    model.  This patch completes the API transition by...
    * renaming elv_next_request() to blk_peek_request()
    * renaming blkdev_dequeue_request() to blk_start_request()
    * adding blk_fetch_request() which is combination of peek and start
    * disallowing completion of queued (not started) requests
    * applying new API to all LLDs
    Renamings are for consistency and to break out of tree code so that
    it's apparent that out of tree drivers need updating.
    [ Impact: block request issue API cleanup, no functional change ]
    Signed-off-by: Tejun Heo <>
    Cc: Rusty Russell <>
    Cc: James Bottomley <>
    Cc: Mike Miller <>
    Cc: unsik Kim <>
    Cc: Paul Clements <>
    Cc: Tim Waugh <>
    Cc: Geert Uytterhoeven <>
    Cc: David S. Miller <>
    Cc: Laurent Vivier <>
    Cc: Jeff Garzik <>
    Cc: Jeremy Fitzhardinge <>
    Cc: Grant Likely <>
    Cc: Adrian McMenamin <>
    Cc: Stephen Rothwell <>
    Cc: Bartlomiej Zolnierkiewicz <>
    Cc: Borislav Petkov <>
    Cc: Sergei Shtylyov <>
    Cc: Alex Dubov <>
    Cc: Pierre Ossman <>
    Cc: David Woodhouse <>
    Cc: Markus Lidel <>
    Cc: Stefan Weinhuber <>
    Cc: Martin Schwidefsky <>
    Cc: Pete Zaitcev <>
    Cc: FUJITA Tomonori <>
    Signed-off-by: Jens Axboe <>
Commits on Dec 29, 2008
  1. block/blk-tag.c: cleanup kernel-doc

    Qinghuang Feng authored Jens Axboe committed
    There is no argument named @tags in blk_init_tags,
    remove its' comment.
    Signed-off-by: Qinghuang Feng <>
    Signed-off-by: Jens Axboe <>
Commits on Oct 9, 2008
  1. block: reserve some tags just for sync IO

    Jens Axboe authored
    By only allowing async IO to consume 3/4 ths of the tag depth, we
    always have slots free to serve sync IO. This is important to avoid
    having writes fill the entire tag queue, thus starving reads.
    Original patch and idea from Linus Torvalds <>
    Signed-off-by: Jens Axboe <>
  2. Add some block/ source files to the kernel-api docbook. Fix kernel-do…

    Randy Dunlap authored Jens Axboe committed
    …c 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.
    Signed-off-by: Randy Dunlap <>
    Signed-off-by: Jens Axboe <>
Commits on Aug 27, 2008
  1. block: remove unused ->busy part of the block queue tag map

    Matthew Wilcox authored Jens Axboe committed
    It's not used for anything. On top of that, it's racy and can thus
    trigger a faulty BUG_ON() in __blk_free_tags() on queue exit.
    Signed-off-by: Jens Axboe <>
Commits on May 7, 2008
  1. block: adjust tagging function queue bit locking

    Jens Axboe authored
    For most initialization purposes, calling blk_queue_init_tags() without
    the queue lock held is OK. Only if called for resizing an existing map
    must the lock be held. Ditto for tag cleanup, the maps are reference
    So switch the general queue flag setting to the unlocked variant, but
    retain the locked variant for resizing.
    Signed-off-by: Jens Axboe <>
Commits on May 1, 2008
  1. @hharrison

    block: remove remaining __FUNCTION__ occurrences

    hharrison authored committed
    __FUNCTION__ is gcc specific, use __func__
    Signed-off-by: Harvey Harrison <>
    Cc: Jens Axboe <>
    Signed-off-by: Andrew Morton <>
    Signed-off-by: Linus Torvalds <>
Commits on Apr 29, 2008
  1. block: make queue flags non-atomic

    Nick Piggin authored Jens Axboe committed
    We can save some atomic ops in the IO path, if we clearly define
    the rules of how to modify the queue flags.
    Signed-off-by: Jens Axboe <>
Commits on Mar 4, 2008
  1. block/blk-tag.c should #include "blk.h"

    Adrian Bunk authored Jens Axboe committed
    Every file should include the headers containing the externs for its
    global functions (in this case for __blk_queue_free_tags()).
    Signed-off-by: Adrian Bunk <>
    Signed-off-by: Jens Axboe <>
Commits on Feb 1, 2008
  1. block: make core bits checkpatch compliant

    Jens Axboe authored
    Signed-off-by: Jens Axboe <>
Commits on Jan 29, 2008
  1. block: split tag and sysfs handling from blk-core.c

    Jens Axboe authored
    Seperates the tag and sysfs handling from ll_rw_blk.
    Signed-off-by: Jens Axboe <>
Something went wrong with that request. Please try again.