1. 19 2月, 2009 36 次提交
  2. 18 2月, 2009 4 次提交
    • H
      block: fix deadlock in blk_abort_queue() for drivers that readd to timeout list · be987fdb
      Hannes Reinecke 提交于
      blk_abort_queue() iterates the timeout list and aborts each request on the
      list, but if the driver error handling readds a request to the timeout list
      during this processing, we could be looping forever. Fix this by splicing
      current entries to a local list and run over that list instead.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      be987fdb
    • N
      block: fix booting from partitioned md array · 41b8c853
      Neil Brown 提交于
      Hi Tejun,
      
       it looks like your commit:
      
         block: don't depend on consecutive minor space
         f331c029
      
       broke a particular case for booting from partitioned md/raid devices.
       That is the second time this has been broken recently.  The previous
       time was fixed by
      
         block: do_mounts - accept root=<non-existant partition>
         30f2f0eb
      
       Because the data isn't available when an md device is first created
       (we add disks and set it up after creation), the initial partition
       scan finds nothing.  It is not until the device is opened that
       another partition scan happens and finds something.
      
       So at the point where the kernel parameter "root=/dev/md_d0p1" is
       being parsed, md_d0 exists, but md_d0p1 does not.
       However if we let blk_lookup_devt return the correct device number
       even though the device doesn't exist, then the attempt to mount it
       will successfully find the partition.
      
       I have tried in the past to find a way to get the partition table to
       be read as soon as the array is assembled but that proved impossible
       (at the time).  I don't remember the details, and could possibly
       revisit it.  However it would be really nice if blk_lookup_devt
       could be adjusted to again accept non existant partitions.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      41b8c853
    • J
      block: revert part of 18ce3751 · 78f707bf
      Jens Axboe 提交于
      The above commit added WRITE_SYNC and switched various places to using
      that for committing writes that will be waited upon immediately after
      submission. However, this causes a performance regression with AS and CFQ
      for ext3 at least, since sync_dirty_buffer() will submit some writes with
      WRITE_SYNC while ext3 has sumitted others dependent writes without the sync
      flag set. This causes excessive anticipation/idling in the IO scheduler
      because sync and async writes get interleaved, causing a big performance
      regression for the below test case (which is meant to simulate sqlite
      like behaviour).
      
      ---- test case ----
      
      int main(int argc, char **argv)
      {
      
      	int fdes, i;
      	FILE *fp;
      	struct timeval start;
      	struct timeval end;
      	struct timeval res;
      
      	gettimeofday(&start, NULL);
      	for (i=0; i<ROWS; i++) {
      		fp = fopen("test_file", "a");
      		fprintf(fp, "Some Text Data\n");
      		fdes = fileno(fp);
      		fsync(fdes);
      		fclose(fp);
      	}
      	gettimeofday(&end, NULL);
      
      	timersub(&end, &start, &res);
      	fprintf(stdout, "time to write %d lines is %ld(msec)\n", ROWS,
      			(res.tv_sec*1000000 + res.tv_usec)/1000);
      
      	return 0;
      }
      
      -------------------
      
      Thanks to Sean.White@APCC.com for tracking down this performance
      regression and providing a test case.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      78f707bf
    • C
      cciss: PCI power management reset for kexec · 82eb03cf
      Chip Coldwell 提交于
      The kexec kernel resets the CCISS hardware in three steps:
      
      1. Use PCI power management states to reset the controller in the
         kexec kernel.
      
      2. Clear the MSI/MSI-X bits in PCI configuration space so that MSI
         initialization in the kexec kernel doesn't fail.
      
      3. Use the CCISS "No-op" message to determine when the controller
         firmware has recovered from the PCI PM reset.
      
      [akpm@linux-foundation.org: cleanups]
      Signed-off-by: NMike Miller <mike.miller@hp.com>
      Cc: Randy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      82eb03cf