1. 24 4月, 2009 6 次提交
    • J
      cfq-iosched: fix bug with aliased request and cooperation detection · 3ac6c9f8
      Jens Axboe 提交于
      cfq_prio_tree_lookup() should return the direct match, yet it always
      returns zero. Fix that.
      
      cfq_prio_tree_add() assumes that we don't get a direct match, while
      it is very possible that we do. Using O_DIRECT, you can have different
      cfqq with matching requests, since you don't have the page cache
      to serialize things for you. Fix this bug by only adding the cfqq if
      there isn't an existing match.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      3ac6c9f8
    • J
      cfq-iosched: clear ->prio_trees[] on cfqd alloc · 26a2ac00
      Jens Axboe 提交于
      Not strictly needed, but we should make it clear that we init the
      rbtree roots here.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      26a2ac00
    • H
      block: fix intermittent dm timeout based oops · 17d5c8ca
      Hannes Reinecke 提交于
      Very rarely under stress testing of dm, oopses are occuring as
      something tampers with an old stack frame.  This has been traced back
      to blk_abort_queue() leaving a timeout_list pointing to the stack.
      The reason is that sometimes blk_abort_request() won't delete the
      timer (if the request is marked as complete but before the timer has
      been removed, a small race window).  Fix this by splicing back from
      the ususally empty list to the q->timeout_list.
      Signed-off-by: NHannes Reinecke <hare@suse.de>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      17d5c8ca
    • S
      umem: fix request_queue lock warning · f3c737de
      Sage Weil 提交于
      The umem driver issues two warnings on boot, due to blk_plug_device() and
      blk_remove_plug() being called without q->queue_lock held.  Starting with
      e48ec690 (block: extend queue_flag bitops), the queue_flag_* functions
      warn if q->queue_lock doesn't appear to be locked.  In fact, q->queue_lock
      is NULL (though that apparently isn't otherwise a problem as the driver is
      using card->lock for everything).
      
      Although blk_init_queue() with take a request_fn_proc and spinlock_t*,
      there isn't a corresponding init helper that takes a make_request_fn.
      Setting queue_lock to &card->lock explicitly seems to work fine for me.
      The warning goes away and the device appears to behave.
      
      [    1.531881] v2.3 : Micro Memory(tm) PCI memory board block driver
      [    1.538136] umem 0000:02:01.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
      [    1.545018] umem 0000:02:01.0: Micro Memory(tm) controller found (PCI Mem Module (Battery Backup))
      [    1.554176] umem 0000:02:01.0: CSR 0xfc9ffc00 -> 0xffffc200013d0c00 (0x100)
      [    1.561279] umem 0000:02:01.0: Size 1048576 KB, Battery 1 Disabled (FAILURE), Battery 2 Disabled (FAILURE)
      [    1.571114] umem 0000:02:01.0: Window size 16777216 bytes, IRQ 20
      [    1.577304] umem 0000:02:01.0: memory NOT initialized. Consider over-writing whole device.
      [    1.585989]  umema:<4>------------[ cut here ]------------
      [    1.591775] WARNING: at include/linux/blkdev.h:492 blk_plug_device+0x6d/0x106()
      [    1.592025] Hardware name: H8SSL
      [    1.592025] Modules linked in:
      [    1.592025] Pid: 1, comm: swapper Not tainted 2.6.29 #8
      [    1.592025] Call Trace:
      [    1.592025]  [<ffffffff8023c994>] warn_slowpath+0xd3/0xf2
      [    1.592025]  [<ffffffff8025a5b5>] ? save_trace+0x3f/0x9b
      [    1.592025]  [<ffffffff8025a68b>] ? add_lock_to_list+0x7a/0xba
      [    1.592025]  [<ffffffff8025e609>] ? validate_chain+0xb3b/0xce8
      [    1.592025]  [<ffffffff80441556>] ? mm_make_request+0x27/0x59
      [    1.592025]  [<ffffffff80441556>] ? mm_make_request+0x27/0x59
      [    1.592025]  [<ffffffff8025ef04>] ? __lock_acquire+0x74e/0x7b9
      [    1.592025]  [<ffffffff8025a70e>] ? get_lock_stats+0x34/0x5e
      [    1.592025]  [<ffffffff8025a746>] ? put_lock_stats+0xe/0x27
      [    1.592025]  [<ffffffff80441556>] ? mm_make_request+0x27/0x59
      [    1.592025]  [<ffffffff803ad165>] blk_plug_device+0x6d/0x106
      [    1.592025]  [<ffffffff80441575>] mm_make_request+0x46/0x59
      [    1.592025]  [<ffffffff803ac2d9>] generic_make_request+0x335/0x3cf
      [    1.592025]  [<ffffffff8027fcc7>] ? mempool_alloc_slab+0x11/0x13
      [    1.592025]  [<ffffffff8027fdce>] ? mempool_alloc+0x45/0x101
      [    1.592025]  [<ffffffff8025a746>] ? put_lock_stats+0xe/0x27
      [    1.592025]  [<ffffffff803adda5>] submit_bio+0x10a/0x119
      [    1.592025]  [<ffffffff802c8d00>] submit_bh+0xe5/0x109
      [    1.592025]  [<ffffffff802cbf43>] block_read_full_page+0x2aa/0x2cb
      [    1.592025]  [<ffffffff802cf4c4>] ? blkdev_get_block+0x0/0x4c
      [    1.592025]  [<ffffffff805c90a8>] ? _spin_unlock_irq+0x36/0x51
      [    1.592025]  [<ffffffff80286836>] ? __lru_cache_add+0x92/0xb2
      [    1.592025]  [<ffffffff802cf008>] blkdev_readpage+0x13/0x15
      [    1.592025]  [<ffffffff8027de06>] read_cache_page_async+0x90/0x134
      [    1.592025]  [<ffffffff802ceff5>] ? blkdev_readpage+0x0/0x15
      [    1.592025]  [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
      [    1.592025]  [<ffffffff8027deb8>] read_cache_page+0xe/0x45
      [    1.592025]  [<ffffffff802f5170>] read_dev_sector+0x2e/0x93
      [    1.592025]  [<ffffffff802f5f44>] adfspart_check_ICS+0x28/0x16c
      [    1.592025]  [<ffffffff8025d427>] ? trace_hardirqs_on+0xd/0xf
      [    1.592025]  [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
      [    1.592025]  [<ffffffff802f59c5>] rescan_partitions+0x168/0x2fb
      [    1.592025]  [<ffffffff802ceae9>] __blkdev_get+0x259/0x336
      [    1.592025]  [<ffffffff803ca1e2>] ? kobject_put+0x47/0x4b
      [    1.592025]  [<ffffffff802cebd1>] blkdev_get+0xb/0xd
      [    1.592025]  [<ffffffff802f5773>] register_disk+0xc4/0x12b
      [    1.592025]  [<ffffffff803b2a7b>] add_disk+0xc3/0x12d
      [    1.592025]  [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
      [    1.592025]  [<ffffffff808a1e73>] mm_init+0x129/0x1a5
      [    1.592025]  [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
      [    1.592025]  [<ffffffff80209056>] _stext+0x56/0x130
      [    1.592025]  [<ffffffff80274932>] ? register_irq_proc+0xae/0xca
      [    1.592025]  [<ffffffff802f0000>] ? proc_pid_lookup+0xb4/0x18b
      [    1.592025]  [<ffffffff8087f975>] kernel_init+0x132/0x18b
      [    1.592025]  [<ffffffff8020d17a>] child_rip+0xa/0x20
      [    1.592025]  [<ffffffff8020cb40>] ? restore_args+0x0/0x30
      [    1.592025]  [<ffffffff8087f843>] ? kernel_init+0x0/0x18b
      [    1.592025]  [<ffffffff8020d170>] ? child_rip+0x0/0x20
      [    1.592025] ---[ end trace 7150b3b86da74e1e ]---
      [    1.889858] ------------[ cut here ]------------[ve_plug+0x5f/0x91()
      [    1.893848] Hardware name: H8SSL
      [    1.893848] Modules linked in:
      [    1.893848] Pid: 1, comm: swapper Tainted: G        W  2.6.29 #8
      [    1.893848] Call Trace:
      [    1.893848]  [<ffffffff8023c994>] warn_slowpath+0xd3/0xf2
      [    1.893848]  [<ffffffff805c8411>] ? trace_hardirqs_on_thunk+0x3a/0x3f
      [    1.893848]  [<ffffffff8020cb40>] ? restore_args+0x0/0x30
      [    1.893848]  [<ffffffff80254245>] ? __atomic_notifier_call_chain+0x0/0xb2
      [    1.893848]  [<ffffffff805c90a3>] ? _spin_unlock_irq+0x31/0x51
      [    1.893848]  [<ffffffff805c90bf>] ? _spin_unlock_irq+0x4d/0x51
      [    1.893848]  [<ffffffff8044157d>] ? mm_make_request+0x4e/0x59
      [    1.893848]  [<ffffffff8025a70e>] ? get_lock_stats+0x34/0x5e
      [    1.893848]  [<ffffffff8025a75d>] ? put_lock_stats+0x25/0x27
      [    1.893848]  [<ffffffff80441504>] ? mm_unplug_device+0x25/0x50
      [    1.893848]  [<ffffffff803acf23>] blk_remove_plug+0x5f/0x91
      [    1.893848]  [<ffffffff8044150f>] mm_unplug_device+0x30/0x50
      [    1.893848]  [<ffffffff803ab74a>] blk_unplug+0x78/0x7d
      [    1.893848]  [<ffffffff803ab75c>] blk_backing_dev_unplug+0xd/0xf
      [    1.893848]  [<ffffffff802c853c>] block_sync_page+0x4a/0x4c
      [    1.893848]  [<ffffffff8027da1c>] sync_page+0x44/0x4d
      [    1.893848]  [<ffffffff805c66fd>] __wait_on_bit_lock+0x42/0x8a
      [    1.893848]  [<ffffffff8027d9d8>] ? sync_page+0x0/0x4d
      [    1.893848]  [<ffffffff8027d9c4>] __lock_page+0x64/0x6b
      [    1.893848]  [<ffffffff802508db>] ? wake_bit_function+0x0/0x2a
      [    1.893848]  [<ffffffff8027de4a>] read_cache_page_async+0xd4/0x134
      [    1.893848]  [<ffffffff802ceff5>] ? blkdev_readpage+0x0/0x15
      [    1.893848]  [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
      [    1.893848]  [<ffffffff8027deb8>] read_cache_page+0xe/0x45
      [    1.893848]  [<ffffffff802f5170>] read_dev_sector+0x2e/0x93
      [    1.893848]  [<ffffffff802f5f44>] adfspart_check_ICS+0x28/0x16c
      [    1.893848]  [<ffffffff8025d427>] ? trace_hardirqs_on+0xd/0xf
      [    1.893848]  [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
      [    1.893848]  [<ffffffff802f59c5>] rescan_partitions+0x168/0x2fb
      [    1.893848]  [<ffffffff802ceae9>] __blkdev_get+0x259/0x336
      [    1.893848]  [<ffffffff803ca1e2>] ? kobject_put+0x47/0x4b
      [    1.893848]  [<ffffffff802cebd1>] blkdev_get+0xb/0xd
      [    1.893848]  [<ffffffff802f5773>] register_disk+0xc4/0x12b
      [    1.893848]  [<ffffffff803b2a7b>] add_disk+0xc3/0x12d
      [    1.893848]  [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
      [    1.893848]  [<ffffffff808a1e73>] mm_init+0x129/0x1a5
      [    1.893848]  [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
      [    1.893848]  [<ffffffff80209056>] _stext+0x56/0x130
      [    1.893848]  [<ffffffff80274932>] ? register_irq_proc+0xae/0xca
      [    1.893848]  [<ffffffff802f0000>] ? proc_pid_lookup+0xb4/0x18b
      [    1.893848]  [<ffffffff8087f975>] kernel_init+0x132/0x18b
      [    1.893848]  [<ffffffff8020d17a>] child_rip+0xa/0x20
      [    1.893848]  [<ffffffff8020cb40>] ? restore_args+0x0/0x30
      [    1.893848]  [<ffffffff8087f843>] ? kernel_init+0x0/0x18b
      [    1.893848]  [<ffffffff8020d170>] ? child_rip+0x0/0x20
      [    1.893848] ---[ end trace 7150b3b86da74e1f ]---
      Signed-off-by: NSage Weil <sage@newdream.net>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      f3c737de
    • J
      block: simplify I/O stat accounting · 42dad764
      Jerome Marchand 提交于
      This simplifies I/O stat accounting switching code and separates it
      completely from I/O scheduler switch code.
      
      Requests are accounted according to the state of their request queue
      at the time of the request allocation. There is no need anymore to
      flush the request queue when switching I/O accounting state.
      Signed-off-by: NJerome Marchand <jmarchan@redhat.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      42dad764
    • A
      pktcdvd.h should include mempool.h · 097102c2
      Alexander Beregalov 提交于
      Fix this build error:
      In file included from fs/compat_ioctl.c:104:
      include/linux/pktcdvd.h:285: error: expected specifier-qualifier-list before 'mempool_t'
      Signed-off-by: NAlexander Beregalov <a.beregalov@gmail.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      097102c2
  2. 22 4月, 2009 34 次提交