patch-2.4.0-prerelease linux/drivers/block/ll_rw_blk.c
Next file: linux/drivers/block/loop.c
Previous file: linux/drivers/block/acsi.c
Back to the patch index
Back to the overall index
- Lines: 76
- Date:
Sun Dec 31 11:16:58 2000
- Orig file:
v2.4.0-test12/linux/drivers/block/ll_rw_blk.c
- Orig date:
Mon Dec 11 17:59:44 2000
diff -u --recursive --new-file v2.4.0-test12/linux/drivers/block/ll_rw_blk.c linux/drivers/block/ll_rw_blk.c
@@ -885,6 +885,8 @@
{
int major = MAJOR(bh->b_rdev);
request_queue_t *q;
+
+ if (!bh->b_end_io) BUG();
if (blk_size[major]) {
unsigned long maxsector = (blk_size[major][MINOR(bh->b_rdev)] << 1) + 1;
unsigned int sector, count;
@@ -962,6 +964,15 @@
bh->b_rsector = bh->b_blocknr * (bh->b_size>>9);
generic_make_request(rw, bh);
+
+ switch (rw) {
+ case WRITE:
+ kstat.pgpgout++;
+ break;
+ default:
+ kstat.pgpgin++;
+ break;
+ }
}
/*
@@ -1006,7 +1017,6 @@
void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
{
- struct buffer_head *bh;
unsigned int major;
int correct_size;
int i;
@@ -1023,6 +1033,7 @@
/* Verify requested block sizes. */
for (i = 0; i < nr; i++) {
+ struct buffer_head *bh;
bh = bhs[i];
if (bh->b_size != correct_size) {
printk(KERN_NOTICE "ll_rw_block: device %s: "
@@ -1040,6 +1051,7 @@
}
for (i = 0; i < nr; i++) {
+ struct buffer_head *bh;
bh = bhs[i];
/* Only one thread can actually submit the I/O. */
@@ -1055,7 +1067,6 @@
/* Hmmph! Nothing to write */
goto end_io;
__mark_buffer_clean(bh);
- kstat.pgpgout++;
break;
case READA:
@@ -1063,7 +1074,6 @@
if (buffer_uptodate(bh))
/* Hmmph! Already have it */
goto end_io;
- kstat.pgpgin++;
break;
default:
BUG();
@@ -1077,8 +1087,9 @@
return;
sorry:
+ /* Make sure we don't get infinite dirty retries.. */
for (i = 0; i < nr; i++)
- buffer_IO_error(bhs[i]);
+ mark_buffer_clean(bhs[i]);
}
#ifdef CONFIG_STRAM_SWAP
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)