patch-2.4.23 linux-2.4.23/drivers/block/ll_rw_blk.c
Next file: linux-2.4.23/drivers/block/umem.c
Previous file: linux-2.4.23/drivers/block/cciss_scsi.h
Back to the patch index
Back to the overall index
- Lines: 62
- Date:
2003-11-28 10:26:19.000000000 -0800
- Orig file:
linux-2.4.22/drivers/block/ll_rw_blk.c
- Orig date:
2003-08-25 04:44:41.000000000 -0700
diff -urN linux-2.4.22/drivers/block/ll_rw_blk.c linux-2.4.23/drivers/block/ll_rw_blk.c
@@ -121,6 +121,10 @@
unsigned long blk_max_low_pfn, blk_max_pfn;
int blk_nohighio = 0;
+int block_dump = 0;
+
+static struct timer_list writeback_timer;
+
static inline int get_max_sectors(kdev_t dev)
{
if (!max_sectors[MAJOR(dev)])
@@ -1293,6 +1297,9 @@
if (waitqueue_active(&bh->b_wait))
wake_up(&bh->b_wait);
+ if (block_dump)
+ printk(KERN_DEBUG "%s: %s block %lu/%u on %s\n", current->comm, rw == WRITE ? "WRITE" : "READ", bh->b_rsector, count, kdevname(bh->b_rdev));
+
put_bh(bh);
switch (rw) {
case WRITE:
@@ -1413,6 +1420,11 @@
extern int stram_device_init (void);
#endif
+static void blk_writeback_timer(unsigned long data)
+{
+ wakeup_bdflush();
+ wakeup_kupdate();
+}
/**
* end_that_request_first - end I/O on one buffer.
@@ -1469,10 +1481,18 @@
return 0;
}
+extern int laptop_mode;
+
void end_that_request_last(struct request *req)
{
struct completion *waiting = req->waiting;
+ /*
+ * schedule the writeout of pending dirty data when the disk is idle
+ */
+ if (laptop_mode && req->cmd == READ)
+ mod_timer(&writeback_timer, jiffies + 5 * HZ);
+
req_finished_io(req);
blkdev_release_request(req);
if (waiting)
@@ -1500,6 +1520,9 @@
blk_max_low_pfn = max_low_pfn - 1;
blk_max_pfn = max_pfn - 1;
+ init_timer(&writeback_timer);
+ writeback_timer.function = blk_writeback_timer;
+
#ifdef CONFIG_AMIGA_Z2RAM
z2_init();
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)