04 Jan, 2012

1 commit

  • Move invalidate_bdev, block_sync_page into fs/block_dev.c. Export
    kill_bdev as well, so brd doesn't have to open code it. Reduce
    buffer_head.h requirement accordingly.

    Removed a rather large comment from invalidate_bdev, as it looked a bit
    obsolete to bother moving. The small comment replacing it says enough.

    Signed-off-by: Nick Piggin
    Cc: Al Viro
    Cc: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Signed-off-by: Al Viro

    Al Viro
     

21 Sep, 2011

1 commit

  • When no floppy is found the module code can be released while a timer
    function is pending or about to be executed.

    CPU0 CPU1
    floppy_init()
    timer_softirq()
    spin_lock_irq(&base->lock);
    detach_timer();
    spin_unlock_irq(&base->lock);
    -> Interrupt
    del_timer();
    return -ENODEV;
    module_cleanup();

    Signed-off-by: Thomas Gleixner
    Cc: Jens Axboe
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Carsten Emde
     

30 May, 2011

1 commit

  • * 'idle-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6:
    x86 idle: deprecate mwait_idle() and "idle=mwait" cmdline param
    x86 idle: deprecate "no-hlt" cmdline param
    x86 idle APM: deprecate CONFIG_APM_CPU_IDLE
    x86 idle floppy: deprecate disable_hlt()
    x86 idle: EXPORT_SYMBOL(default_idle, pm_idle) only when APM demands it
    x86 idle: clarify AMD erratum 400 workaround
    idle governor: Avoid lock acquisition to read pm_qos before entering idle
    cpuidle: menu: fixed wrapping timers at 4.294 seconds

    Linus Torvalds
     

29 May, 2011

1 commit

  • Plan to remove floppy_disable_hlt in 2012, an ancient
    workaround with comments that it should be removed.

    This allows us to remove clutter and a run-time branch
    from the idle code.

    WARN_ONCE() on invocation until it is removed.

    cc: x86@kernel.org
    cc: stable@kernel.org # .39.x
    Signed-off-by: Len Brown

    Len Brown
     

22 Apr, 2011

1 commit

  • In-kernel disk event polling doesn't matter for legacy/fringe drivers
    and may lead to infinite event loop if ->check_events() implementation
    generates events on level condition instead of edge.

    Now that block layer supports suppressing exporting unlisted events,
    simply leaving disk->events cleared allows these drivers to keep the
    internal revalidation behavior intact while avoiding weird
    interactions with userland event handler.

    Signed-off-by: Tejun Heo
    Cc: Kay Sievers
    Signed-off-by: Jens Axboe

    Tejun Heo
     

10 Mar, 2011

3 commits


24 Feb, 2011

1 commit

  • There are two cases when we call flush_disk.
    In one, the device has disappeared (check_disk_change) so any
    data will hold becomes irrelevant.
    In the oter, the device has changed size (check_disk_size_change)
    so data we hold may be irrelevant.

    In both cases it makes sense to discard any 'clean' buffers,
    so they will be read back from the device if needed.

    In the former case it makes sense to discard 'dirty' buffers
    as there will never be anywhere safe to write the data. In the
    second case it *does*not* make sense to discard dirty buffers
    as that will lead to file system corruption when you simply enlarge
    the containing devices.

    flush_disk calls __invalidate_devices.
    __invalidate_device calls both invalidate_inodes and invalidate_bdev.

    invalidate_inodes *does* discard I_DIRTY inodes and this does lead
    to fs corruption.

    invalidate_bev *does*not* discard dirty pages, but I don't really care
    about that at present.

    So this patch adds a flag to __invalidate_device (calling it
    __invalidate_device2) to indicate whether dirty buffers should be
    killed, and this is passed to invalidate_inodes which can choose to
    skip dirty inodes.

    flusk_disk then passes true from check_disk_change and false from
    check_disk_size_change.

    dm avoids tripping over this problem by calling i_size_write directly
    rathher than using check_disk_size_change.

    md does use check_disk_size_change and so is affected.

    This regression was introduced by commit 608aeef17a which causes
    check_disk_size_change to call flush_disk, so it is suitable for any
    kernel since 2.6.27.

    Cc: stable@kernel.org
    Acked-by: Jeff Moyer
    Cc: Andrew Patterson
    Cc: Jens Axboe
    Signed-off-by: NeilBrown

    NeilBrown
     

14 Jan, 2011

1 commit


24 Dec, 2010

1 commit


08 Nov, 2010

1 commit


06 Nov, 2010

2 commits

  • While scanning the floopy code due to c093ee4f07f4 ("floppy: fix
    use-after-free in module load failure path"), I found one more instance
    of trying to access disk->queue pointer after doing put_disk() on
    gendisk. For some reason , floppy moule still loads/unloads fine. The
    object is probably still around with right pointer values.

    o There seems to be one more instance of trying to cleanup the request
    queue after we have called put_disk() on associated gendisk.

    o This fix is more out of code inspection. Even without this fix for
    some reason I am able to load/unload floppy module without any
    issues.

    o Floppy module loads/unloads fine after the fix.

    Signed-off-by: Vivek Goyal
    Signed-off-by: Linus Torvalds

    Vivek Goyal
     
  • Commit 488211844e0c ("floppy: switch to one queue per drive instead of
    sharing a queue") introduced a use-after-free. We do "put_disk()" on
    the disk device _before_ we then clean up the queue associated with that
    disk.

    Move the put_disk() down to avoid dereferencing a free'd data structure.

    Cc: Jens Axboe
    Cc: Vivek Goyal
    Reported-and-tested-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

23 Oct, 2010

1 commit

  • * 'for-2.6.37/drivers' of git://git.kernel.dk/linux-2.6-block: (95 commits)
    cciss: fix PCI IDs for new Smart Array controllers
    drbd: add race-breaker to drbd_go_diskless
    drbd: use dynamic_dev_dbg to optionally log uuid changes
    dynamic_debug.h: Fix dynamic_dev_dbg() macro if CONFIG_DYNAMIC_DEBUG not set
    drbd: cleanup: change "s
    drbd: add explicit drbd_md_sync to drbd_resync_finished
    drbd: Do not log an ASSERT for P_OV_REQUEST packets while C_CONNECTED
    drbd: fix for possible deadlock on IO error during resync
    drbd: fix unlikely access after free and list corruption
    drbd: fix for spurious fullsync (uuids rotated too fast)
    drbd: allow for explicit resync-finished notifications
    drbd: preparation commit, using full state in receive_state()
    drbd: drbd_send_ack_dp must not rely on header information
    drbd: Fix regression in recv_bm_rle_bits (compressed bitmap)
    drbd: Fixed a stupid copy and paste error
    drbd: Allow larger values for c-fill-target.
    ...

    Fix up trivial conflict in drivers/block/ataflop.c due to BKL removal

    Linus Torvalds
     

05 Oct, 2010

1 commit

  • The block device drivers have all gained new lock_kernel
    calls from a recent pushdown, and some of the drivers
    were already using the BKL before.

    This turns the BKL into a set of per-driver mutexes.
    Still need to check whether this is safe to do.

    file=$1
    name=$2
    if grep -q lock_kernel ${file} ; then
    if grep -q 'include.*linux.mutex.h' ${file} ; then
    sed -i '/include.*/d' ${file}
    else
    sed -i 's/include.*.*$/include /g' ${file}
    fi
    sed -i ${file} \
    -e "/^#include.*linux.mutex.h/,$ {
    1,/^\(static\|int\|long\)/ {
    /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);

    } }" \
    -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
    -e '/[ ]*cycle_kernel_lock();/d'
    else
    sed -i -e '/include.*\/d' ${file} \
    -e '/cycle_kernel_lock()/d'
    fi

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

22 Sep, 2010

1 commit

  • Pretty straight forward conversion. Note that we do round-robin
    between the drives that have available requests, before we simply
    used the drive that the IO scheduler told us to. Since the IO
    scheduler doesn't care about multiple devices per queue, the resulting
    sort would not have made sense.

    Fixed by Vivek to get rid of a double lock problem in set_next_request()

    Signed-off-by: Jens Axboe
    Signed-off-by: Vivek Goyal

    Jens Axboe
     

08 Aug, 2010

11 commits

  • The struct cont_t is just a set of virtual function pointers.

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

    Stephen Hemminger
     
  • The open and release block_device_operations are currently
    called with the BKL held. In order to change that, we must
    first make sure that all drivers that currently rely
    on this have no regressions.

    This blindly pushes the BKL into all .open and .release
    operations for all block drivers to prepare for the
    next step. The drivers can subsequently replace the BKL
    with their own locks or remove it completely when it can
    be shown that it is not needed.

    The functions blkdev_get and blkdev_put are the only
    remaining users of the big kernel lock in the block
    layer, besides a few uses in the ioctl code, none
    of which need to serialize with blkdev_{get,put}.

    Most of these two functions is also under the protection
    of bdev->bd_mutex, including the actual calls to
    ->open and ->release, and the common code does not
    access any global data structures that need the BKL.

    Signed-off-by: Arnd Bergmann
    Acked-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Arnd Bergmann
     
  • As a preparation for the removal of the big kernel
    lock in the block layer, this removes the BKL
    from the common ioctl handling code, moving it
    into every single driver still using it.

    Signed-off-by: Arnd Bergmann
    Acked-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Arnd Bergmann
     
  • Convert assertions to use WARN(). There are several error checks in the
    code for things that should never happen. Convert them to standard
    warnings so kerneloops.org will see them.

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

    Stephen Hemminger
     
  • Convert wait loops to use wait_event_ macros.

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

    Stephen Hemminger
     
  • Ioctl cmd value is unsigned, so change normalize_ioctl

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

    Stephen Hemminger
     
  • As reported by sparse, cmos attribute is local.

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

    Stephen Hemminger
     
  • The usage_count was being protected by a lock which was only there to
    create an atomic counter.

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

    Stephen Hemminger
     
  • The first thing the floppy does is read block 0 to test geometry and to
    test for disk presence. If disk is not present this causes a console
    warning message about failed I/O. Set flag to silence.

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

    Stephen Hemminger
     
  • These routines are all big enough that is better to let the compiler
    decide to inline or not.

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

    Stephen Hemminger
     
  • Set debug jiffies offset at initialization. Avoids wierd values showing
    up if debugging enabled.

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

    Stephen Hemminger
     

13 Mar, 2010

12 commits