From abb50be5ea5c374cdb25f05eafdf8afac9b854b1 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 10 Feb 2014 00:04:34 +0100 Subject: Add quiet flag to block I/O This avoids grub & such making Mach print flurries of floppy errors. * linux/dev/include/linux/blkdev.h (request): Add `quiet' field. * linux/dev/include/linux/blk.h (end_request): Print I/O error only if the `quiet' field of the request is 0. * linux/dev/include/linux/fs.h (ll_rw_block): Add `quiet' parameter. * linux/dev/glue/block.c (ll_rw_block): Add `quiet' parameter, copied into the request. (bread, rdwr_partial, rdwr_full): Pass 0 to `ll_rw_block''s `quiet' parameter. * linux/dev/drivers/block/floppy.c (floppy_revalidate): Pass 1 to `ll_rw_block''s `quiet' parameter. --- linux/dev/drivers/block/floppy.c | 2 +- linux/dev/glue/block.c | 11 ++++++----- linux/dev/include/linux/blk.h | 5 +++-- linux/dev/include/linux/blkdev.h | 1 + linux/dev/include/linux/fs.h | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) (limited to 'linux') diff --git a/linux/dev/drivers/block/floppy.c b/linux/dev/drivers/block/floppy.c index 4c0977a..83d66f0 100644 --- a/linux/dev/drivers/block/floppy.c +++ b/linux/dev/drivers/block/floppy.c @@ -3723,7 +3723,7 @@ static int floppy_revalidate(kdev_t dev) return 1; } if (bh && !buffer_uptodate(bh)) - ll_rw_block(READ, 1, &bh); + ll_rw_block(READ, 1, &bh, 1); process_fd_request(); wait_on_buffer(bh); brelse(bh); diff --git a/linux/dev/glue/block.c b/linux/dev/glue/block.c index 011b6f5..ce4c633 100644 --- a/linux/dev/glue/block.c +++ b/linux/dev/glue/block.c @@ -384,7 +384,7 @@ bread (kdev_t dev, int block, int size) bh = getblk (dev, block, size); if (bh) { - ll_rw_block (READ, 1, &bh); + ll_rw_block (READ, 1, &bh, 0); wait_on_buffer (bh); if (! buffer_uptodate (bh)) { @@ -444,7 +444,7 @@ enqueue_request (struct request *req) /* Perform the I/O operation RW on the buffer list BH containing NR buffers. */ void -ll_rw_block (int rw, int nr, struct buffer_head **bh) +ll_rw_block (int rw, int nr, struct buffer_head **bh, int quiet) { int i, bshift, bsize; unsigned major; @@ -476,6 +476,7 @@ ll_rw_block (int rw, int nr, struct buffer_head **bh) r->rq_dev = bh[0]->b_dev; r->cmd = rw; r->errors = 0; + r->quiet = quiet; r->sector = bh[0]->b_blocknr << (bshift - 9); r->current_nr_sectors = bh[0]->b_size >> 9; r->buffer = bh[0]->b_data; @@ -528,7 +529,7 @@ rdwr_partial (int rw, kdev_t dev, loff_t *off, bh->b_data = alloc_buffer (bh->b_size); if (! bh->b_data) return -ENOMEM; - ll_rw_block (READ, 1, &bh); + ll_rw_block (READ, 1, &bh, 0); wait_on_buffer (bh); if (buffer_uptodate (bh)) { @@ -542,7 +543,7 @@ rdwr_partial (int rw, kdev_t dev, loff_t *off, { memcpy (bh->b_data + o, *buf, c); bh->b_state = (1 << BH_Dirty) | (1 << BH_Lock); - ll_rw_block (WRITE, 1, &bh); + ll_rw_block (WRITE, 1, &bh, 0); wait_on_buffer (bh); if (! buffer_uptodate (bh)) { @@ -623,7 +624,7 @@ rdwr_full (int rw, kdev_t dev, loff_t *off, char **buf, int *resid, int bshift) } if (! err) { - ll_rw_block (rw, i, bhp); + ll_rw_block (rw, i, bhp, 0); wait_on_buffer (bhp[i - 1]); } for (bh = bhead, cc = 0, j = 0; j < i; cc += bh->b_size, bh++, j++) diff --git a/linux/dev/include/linux/blk.h b/linux/dev/include/linux/blk.h index 412b864..156d91c 100644 --- a/linux/dev/include/linux/blk.h +++ b/linux/dev/include/linux/blk.h @@ -391,8 +391,9 @@ static void end_request(int uptodate) { req->errors = 0; if (!uptodate) { - printk("end_request: I/O error, dev %s, sector %lu\n", - kdevname(req->rq_dev), req->sector); + if (!req->quiet) + printk("end_request: I/O error, dev %s, sector %lu\n", + kdevname(req->rq_dev), req->sector); #ifdef MACH for (bh = req->bh; bh; ) { diff --git a/linux/dev/include/linux/blkdev.h b/linux/dev/include/linux/blkdev.h index e9a40d7..5bf0a28 100644 --- a/linux/dev/include/linux/blkdev.h +++ b/linux/dev/include/linux/blkdev.h @@ -23,6 +23,7 @@ struct request { kdev_t rq_dev; int cmd; /* READ or WRITE */ int errors; + int quiet; unsigned long sector; unsigned long nr_sectors; unsigned long current_nr_sectors; diff --git a/linux/dev/include/linux/fs.h b/linux/dev/include/linux/fs.h index 740ebb5..37f7173 100644 --- a/linux/dev/include/linux/fs.h +++ b/linux/dev/include/linux/fs.h @@ -733,7 +733,7 @@ extern struct file * get_empty_filp(void); extern int close_fp(struct file *filp); extern struct buffer_head * get_hash_table(kdev_t dev, int block, int size); extern struct buffer_head * getblk(kdev_t dev, int block, int size); -extern void ll_rw_block(int rw, int nr, struct buffer_head * bh[]); +extern void ll_rw_block(int rw, int nr, struct buffer_head * bh[], int quiet); extern void ll_rw_page(int rw, kdev_t dev, unsigned long nr, char * buffer); extern void ll_rw_swap_file(int rw, kdev_t dev, unsigned int *b, int nb, char *buffer); extern int is_read_only(kdev_t dev); -- cgit v1.2.3