1. 27 Mar, 2007 2 commits
    • Thibaut VARENE's avatar
      make elv_register() output atomic · 1ffb96c5
      Thibaut VARENE authored
      Booting 2.6.21-rc3-g45592145 I noticed the following on one of my
      machines in the bootlog:
      
      io scheduler noop registered<6>Time: jiffies clocksource has been installed.
      
      io scheduler deadline registered (default)
      
      Looking at block/elevator.c, it appears that elv_register() uses two
      consecutive printks in a non-atomic way, leading to the above glitch. The
      attached trivial patch fixes this issue, by using a single printk.
      Signed-off-by: default avatarThibaut VARENE <varenet@parisc-linux.org>
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      1ffb96c5
    • Vasily Tarasov's avatar
      block: blk_max_pfn is somtimes wrong · f772b3d9
      Vasily Tarasov authored
      There is a small problem in handling page bounce.
      
      At the moment blk_max_pfn equals max_pfn, which is in fact not maximum
      possible _number_ of a page frame, but the _amount_ of page frames.  For
      example for the 32bit x86 node with 4Gb RAM, max_pfn = 0x100000, but not
      0xFFFF.
      
      request_queue structure has a member q->bounce_pfn and queue needs bounce
      pages for the pages _above_ this limit.  This routine is handled by
      blk_queue_bounce(), where the following check is produced:
      
      	if (q->bounce_pfn >= blk_max_pfn)
      		return;
      
      Assume, that a driver has set q->bounce_pfn to 0xFFFF, but blk_max_pfn
      equals 0x10000.  In such situation the check above fails and for each bio
      we always fall down for iterating over pages tied to the bio.
      
      I want to notice, that for quite a big range of device drivers (ide, md,
      ...) such problem doesn't happen because they use BLK_BOUNCE_ANY for
      bounce_pfn.  BLK_BOUNCE_ANY is defined as blk_max_pfn << PAGE_SHIFT, and
      then the check above doesn't fail.  But for other drivers, which obtain
      reuired value from drivers, it fails.  For example sata_nv uses
      ATA_DMA_MASK or dev->dma_mask.
      
      I propose to use (max_pfn - 1) for blk_max_pfn.  And the same for
      blk_max_low_pfn.  The patch also cleanses some checks related with
      bounce_pfn.
      Signed-off-by: default avatarVasily Tarasov <vtaras@openvz.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      f772b3d9
  2. 26 Mar, 2007 38 commits