22 Aug, 2012

1 commit

  • Delete code which sets SCSI status incorrectly as it's already been set
    correctly above this incorrect code. The bug was introduced in 2009 by
    commit b0e15f6db111 ("cciss: fix typo that causes scsi status to be
    lost.")

    Signed-off-by: Stephen M. Cameron
    Reported-by: Roel van Meer
    Tested-by: Roel van Meer
    Cc: Jens Axboe
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen M. Cameron
     

04 Aug, 2012

1 commit


02 Aug, 2012

1 commit

  • Pull block driver changes from Jens Axboe:

    - Making the plugging support for drivers a bit more sane from Neil.
    This supersedes the plugging change from Shaohua as well.

    - The usual round of drbd updates.

    - Using a tail add instead of a head add in the request completion for
    ndb, making us find the most completed request more quickly.

    - A few floppy changes, getting rid of a duplicated flag and also
    running the floppy init async (since it takes forever in boot terms)
    from Andi.

    * 'for-3.6/drivers' of git://git.kernel.dk/linux-block:
    floppy: remove duplicated flag FD_RAW_NEED_DISK
    blk: pass from_schedule to non-request unplug functions.
    block: stack unplug
    blk: centralize non-request unplug handling.
    md: remove plug_cnt feature of plugging.
    block/nbd: micro-optimization in nbd request completion
    drbd: announce FLUSH/FUA capability to upper layers
    drbd: fix max_bio_size to be unsigned
    drbd: flush drbd work queue before invalidate/invalidate remote
    drbd: fix potential access after free
    drbd: call local-io-error handler early
    drbd: do not reset rs_pending_cnt too early
    drbd: reset congestion information before reporting it in /proc/drbd
    drbd: report congestion if we are waiting for some userland callback
    drbd: differentiate between normal and forced detach
    drbd: cleanup, remove two unused global flags
    floppy: Run floppy initialization asynchronous

    Linus Torvalds
     

01 Aug, 2012

4 commits

  • Merge Andrew's second set of patches:
    - MM
    - a few random fixes
    - a couple of RTC leftovers

    * emailed patches from Andrew Morton : (120 commits)
    rtc/rtc-88pm80x: remove unneed devm_kfree
    rtc/rtc-88pm80x: assign ret only when rtc_register_driver fails
    mm: hugetlbfs: close race during teardown of hugetlbfs shared page tables
    tmpfs: distribute interleave better across nodes
    mm: remove redundant initialization
    mm: warn if pg_data_t isn't initialized with zero
    mips: zero out pg_data_t when it's allocated
    memcg: gix memory accounting scalability in shrink_page_list
    mm/sparse: remove index_init_lock
    mm/sparse: more checks on mem_section number
    mm/sparse: optimize sparse_index_alloc
    memcg: add mem_cgroup_from_css() helper
    memcg: further prevent OOM with too many dirty pages
    memcg: prevent OOM with too many dirty pages
    mm: mmu_notifier: fix freed page still mapped in secondary MMU
    mm: memcg: only check anon swapin page charges for swap cache
    mm: memcg: only check swap cache pages for repeated charging
    mm: memcg: split swapin charge function into private and public part
    mm: memcg: remove needless !mm fixup to init_mm when charging
    mm: memcg: remove unneeded shmem charge type
    ...

    Linus Torvalds
     
  • Pull random subsystem patches from Ted Ts'o:
    "This patch series contains a major revamp of how we collect entropy
    from interrupts for /dev/random and /dev/urandom.

    The goal is to addresses weaknesses discussed in the paper "Mining
    your Ps and Qs: Detection of Widespread Weak Keys in Network Devices",
    by Nadia Heninger, Zakir Durumeric, Eric Wustrow, J. Alex Halderman,
    which will be published in the Proceedings of the 21st Usenix Security
    Symposium, August 2012. (See https://factorable.net for more
    information and an extended version of the paper.)"

    Fix up trivial conflicts due to nearby changes in
    drivers/{mfd/ab3100-core.c, usb/gadget/omap_udc.c}

    * tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random: (33 commits)
    random: mix in architectural randomness in extract_buf()
    dmi: Feed DMI table to /dev/random driver
    random: Add comment to random_initialize()
    random: final removal of IRQF_SAMPLE_RANDOM
    um: remove IRQF_SAMPLE_RANDOM which is now a no-op
    sparc/ldc: remove IRQF_SAMPLE_RANDOM which is now a no-op
    [ARM] pxa: remove IRQF_SAMPLE_RANDOM which is now a no-op
    board-palmz71: remove IRQF_SAMPLE_RANDOM which is now a no-op
    isp1301_omap: remove IRQF_SAMPLE_RANDOM which is now a no-op
    pxa25x_udc: remove IRQF_SAMPLE_RANDOM which is now a no-op
    omap_udc: remove IRQF_SAMPLE_RANDOM which is now a no-op
    goku_udc: remove IRQF_SAMPLE_RANDOM which was commented out
    uartlite: remove IRQF_SAMPLE_RANDOM which is now a no-op
    drivers: hv: remove IRQF_SAMPLE_RANDOM which is now a no-op
    xen-blkfront: remove IRQF_SAMPLE_RANDOM which is now a no-op
    n2_crypto: remove IRQF_SAMPLE_RANDOM which is now a no-op
    pda_power: remove IRQF_SAMPLE_RANDOM which is now a no-op
    i2c-pmcmsp: remove IRQF_SAMPLE_RANDOM which is now a no-op
    input/serio/hp_sdc.c: remove IRQF_SAMPLE_RANDOM which is now a no-op
    mfd: remove IRQF_SAMPLE_RANDOM which is now a no-op
    ...

    Linus Torvalds
     
  • Set SOCK_MEMALLOC on the NBD socket to allow access to PFMEMALLOC reserves
    so pages backed by NBD, particularly if swap related, can be cleaned to
    prevent the machine being deadlocked. It is still possible that the
    PFMEMALLOC reserves get depleted resulting in deadlock but this can be
    resolved by the administrator by increasing min_free_kbytes.

    Signed-off-by: Mel Gorman
    Cc: David Miller
    Cc: Neil Brown
    Cc: Peter Zijlstra
    Cc: Mike Christie
    Cc: Eric B Munson
    Cc: Eric Dumazet
    Cc: Sebastian Andrzej Siewior
    Cc: Mel Gorman
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mel Gorman
     
  • Pull Ceph changes from Sage Weil:
    "Lots of stuff this time around:

    - lots of cleanup and refactoring in the libceph messenger code, and
    many hard to hit races and bugs closed as a result.
    - lots of cleanup and refactoring in the rbd code from Alex Elder,
    mostly in preparation for the layering functionality that will be
    coming in 3.7.
    - some misc rbd cleanups from Josh Durgin that are finally going
    upstream
    - support for CRUSH tunables (used by newer clusters to improve the
    data placement)
    - some cleanup in our use of d_parent that Al brought up a while back
    - a random collection of fixes across the tree

    There is another patch coming that fixes up our ->atomic_open()
    behavior, but I'm going to hammer on it a bit more before sending it."

    Fix up conflicts due to commits that were already committed earlier in
    drivers/block/rbd.c, net/ceph/{messenger.c, osd_client.c}

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (132 commits)
    rbd: create rbd_refresh_helper()
    rbd: return obj version in __rbd_refresh_header()
    rbd: fixes in rbd_header_from_disk()
    rbd: always pass ops array to rbd_req_sync_op()
    rbd: pass null version pointer in add_snap()
    rbd: make rbd_create_rw_ops() return a pointer
    rbd: have __rbd_add_snap_dev() return a pointer
    libceph: recheck con state after allocating incoming message
    libceph: change ceph_con_in_msg_alloc convention to be less weird
    libceph: avoid dropping con mutex before fault
    libceph: verify state after retaking con lock after dispatch
    libceph: revoke mon_client messages on session restart
    libceph: fix handling of immediate socket connect failure
    ceph: update MAINTAINERS file
    libceph: be less chatty about stray replies
    libceph: clear all flags on con_close
    libceph: clean up con flags
    libceph: replace connection state bits with states
    libceph: drop unnecessary CLOSED check in socket state change callback
    libceph: close socket directly from ceph_con_close()
    ...

    Linus Torvalds
     

31 Jul, 2012

33 commits

  • …loppy into for-3.6/drivers

    Jens Axboe
     
  • Fix coccinelle warning (without behavior change):

    drivers/block/floppy.c:2518:32-48: duplicated argument to & or |

    Signed-off-by: Fengguang Wu
    Signed-off-by: Jiri Kosina

    Fengguang Wu
     
  • This will allow md/raid to know why the unplug was called,
    and will be able to act according - if !from_schedule it
    is safe to perform tasks which could themselves schedule.

    Signed-off-by: NeilBrown
    Signed-off-by: Jens Axboe

    NeilBrown
     
  • Both md and umem has similar code for getting notified on an
    blk_finish_plug event.
    Centralize this code in block/ and allow each driver to
    provide its distinctive difference.

    Signed-off-by: NeilBrown
    Signed-off-by: Jens Axboe

    NeilBrown
     
  • Add in-flight cmds to the tail. That way while searching
    (during request completion),we will always get a hit on the
    first element.

    Signed-off-by: Chetan Loke
    Acked-by: Paul.Clements@steeleye.com
    Signed-off-by: Jens Axboe

    Chetan Loke
     
  • Create a simple helper that handles the common case of calling
    __rbd_refresh_header() while holding the ctl_mutex.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • Add a new parameter to __rbd_refresh_header() through which the
    version of the header object is passed back to the caller. In most
    cases this isn't needed. The main motivation is to normalize
    (almost) all calls to __rbd_refresh_header() so they are all
    wrapped immediately by mutex_lock()/mutex_unlock().

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • This fixes a few issues in rbd_header_from_disk():
    - There is a check intended to catch overflow, but it's wrong in
    two ways.
    - First, the type we don't want to overflow is size_t, not
    unsigned int, and there is now a SIZE_MAX we can use for
    use with that type.
    - Second, we're allocating the snapshot ids and snapshot
    image sizes separately (each has type u64; on disk they
    grouped together as a rbd_image_header_ondisk structure).
    So we can use the size of u64 in this overflow check.
    - If there are no snapshots, then there should be no snapshot
    names. Enforce this, and issue a warning if we encounter a
    header with no snapshots but a non-zero snap_names_len.
    - When saving the snapshot names into the header, be more direct
    in defining the offset in the on-disk structure from which
    they're being copied by using "snap_count" rather than "i"
    in the array index.
    - If an error occurs, the "snapc" and "snap_names" fields are
    freed at the end of the function. Make those fields be null
    pointers after they're freed, to be explicit that they are
    no longer valid.
    - Finally, move the definition of the local variable "i" to the
    innermost scope in which it's needed.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • All of the callers of rbd_req_sync_op() except one pass a non-null
    "ops" pointer. The only one that does not is rbd_req_sync_read(),
    which passes CEPH_OSD_OP_READ as its "opcode" and, CEPH_OSD_FLAG_READ
    for "flags".

    By allocating the ops array in rbd_req_sync_read() and moving the
    special case code for the null ops pointer into it, it becomes
    clear that much of that code is not even necessary.

    In addition, the "opcode" argument to rbd_req_sync_op() is never
    actually used, so get rid of that.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • rbd_header_add_snap() passes the address of a version variable to
    rbd_req_sync_exec(), but it ignores the result. Just pass a null
    pointer instead.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • Either rbd_create_rw_ops() will succeed, or it will fail because a
    memory allocation failed. Have it just return a valid pointer or
    null rather than stuffing a pointer into a provided address and
    returning an errno.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • It's not obvious whether the snapshot pointer whose address is
    provided to __rbd_add_snap_dev() will be assigned by that function.
    Change it to return the snapshot, or a pointer-coded errno in the
    event of a failure.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • rbd_req_sync_unwatch() only ever uses rbd_dev->header_name as the
    value of its "object_name" parameter, and that value is available
    within the function already. So get rid of the parameter.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • rbd_req_sync_notify_ack() only ever uses rbd_dev->header_name as the
    value of its "object_name" parameter, and that value is available
    within the function already. So get rid of the parameter.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • rbd_req_sync_notify() only ever uses rbd_dev->header_name as the
    value of its "object_name" parameter, and that value is available
    within the function already. So get rid of the parameter.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • rbd_req_sync_watch() is only called in one place, and in that place
    it passes rbd_dev->header_name as the value of the "object_name"
    parameter. This value is available within the function already.

    Having the extra parameter leaves the impression the object name
    could take on different values, but it does not.

    So get rid of the parameter. We can always add it back again if
    we find we want to watch some other object in the future.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • Both rbd_register_snap_dev() and __rbd_remove_snap_dev() have
    rbd_dev parameters that are unused. Remove them.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • The function rbd_header_from_disk() is only called in one spot, and
    it passes GFP_KERNEL as its value for the gfp_flags parameter.

    Just drop that parameter and substitute GFP_KERNEL everywhere within
    that function it had been used. (If we find we need the parameter
    again in the future it's easy enough to add back again.)

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • The "snapc" parameter to in rbd_req_sync_read() is not used, so
    get rid of it.

    Reported-by: Josh Durgin
    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • The "id" field of an rbd device structure represents the unique
    client-local device id mapped to the underlying rbd image. Each rbd
    image will have another id--the image id--and each snapshot has its
    own id as well. The simple name "id" no longer conveys the
    information one might like to have.

    Rename the device "id" field in struct rbd_dev to be "dev_id" to
    make it a little more obvious what we're dealing with without having
    to think more about context.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • If an rbd image header is read and it doesn't begin with the
    expected magic information, a warning is displayed. This is
    a fairly simple test, but it could be extended at some point.
    Fix the comparison so it actually looks at the "text" field
    rather than the front of the structure.

    In any case, encapsulate the validity test in its own function.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • There was a dout() call in rbd_do_request() that was reporting
    the reporting the offset as the length and vice versa. While
    fixing that I did a quick scan of other dout() calls and fixed
    a couple of other minor things.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • This just replaces a while loop with list_for_each_entry_safe()
    in __rbd_remove_all_snaps().

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • In commit c666601a there was inadvertently added an extra
    initialization of rbd_dev->header_rwsem. This gets rid of the
    duplicate.

    Reported-by: Guangliang Zhao
    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • The snap_seq field in an rbd_image_header structure held the value
    from the rbd image header when it was last refreshed. We now
    maintain this value in the snapc->seq field. So get rid of the
    other one.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • In rbd_header_add_snap() there is code to set snapc->seq to the
    just-added snapshot id. This is the only remnant left of the
    use of that field for recording which snapshot an rbd_dev was
    associated with. That functionality is no longer supported,
    so get rid of that final bit of code.

    Doing so means we never actually set snapc->seq any more. On the
    server, the snapshot context's sequence value represents the highest
    snapshot id ever issued for a particular rbd image. So we'll make
    it have that meaning here as well. To do so, set this value
    whenever the rbd header is (re-)read. That way it will always be
    consistent with the rest of the snapshot context we maintain.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • In rbd_header_set_snap(), there is logic to make the snap context's
    seq field get set to a particular snapshot id, or 0 if there is no
    snapshot for the rbd image.

    This seems to be an artifact of how the current snapshot id for an
    rbd_dev was recorded before the rbd_dev->snap_id field began to be
    used for that purpose.

    There's no need to update the value of snapc->seq here any more, so
    stop doing it. Tidy up a few local variables in that function
    while we're at it.

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • In what appears to be an artifact of a different way of encoding
    whether an rbd image maps a snapshot, __rbd_refresh_header() has
    code that arranges to update the seq value in an rbd image's
    snapshot context to point to the first entry in its snapshot
    array if that's where it was pointing initially.

    We now use rbd_dev->snap_id to record the snapshot id--using the
    special value CEPH_NOSNAP to indicate the rbd_dev is not mapping a
    snapshot at all.

    There is therefore no need to check for this case, nor to update the
    seq value, in __rbd_refresh_header(). Just preserve the seq value
    that rbd_read_header() provides (which, at the moment, is nothing).

    Signed-off-by: Alex Elder
    Reviewed-by: Josh Durgin

    Alex Elder
     
  • Previously the original header version was sent. Now, we update it
    when the header changes.

    Signed-off-by: Josh Durgin
    Reviewed-by: Alex Elder

    Josh Durgin
     
  • This prevents a race between requests with a given snap context and
    header updates that free it. The osd client was already expecting the
    snap context to be reference counted, since it get()s it in
    ceph_osdc_build_request and put()s it when the request completes.

    Also remove the second down_read()/up_read() on header_rwsem in
    rbd_do_request, which wasn't actually preventing this race or
    protecting any other data.

    Signed-off-by: Josh Durgin
    Reviewed-by: Alex Elder

    Josh Durgin
     
  • The image may have been resized.

    Signed-off-by: Josh Durgin
    Reviewed-by: Alex Elder

    Josh Durgin
     
  • If an image was mapped to a snapshot, the size of the head version
    would be shown. Protect capacity with header_rwsem, since it may
    change.

    Signed-off-by: Josh Durgin
    Reviewed-by: Alex Elder

    Josh Durgin
     
  • Snapshots cannot be resized, and the new capacity of head should not
    be reflected by the snapshot.

    Signed-off-by: Josh Durgin
    Reviewed-by: Alex Elder

    Josh Durgin