aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Galbraith <bitbucket@online.de>2014-04-08 16:43:52 -0400
committerJens Axboe <axboe@fb.com>2014-04-08 16:44:35 -0400
commit44bd70c347c466616e430b044c49d48fac29789d (patch)
tree7ae462c562f07209ac3c2b0f2bc3e37240700554
parentbccb5f7c8bdfe460d95f986c6edf2e75d8052897 (diff)
drivers/block/loop.c: ratelimit error messages
Metric tons of high speed spew is not helpful when things go pear shaped. systemd lost its mind, forgot how to stop services it insists on being sole manager of, massive printk() flood ensued, box eventually died. [16206.684000] loop: Write error at byte offset 11412291584, length 4096. [16206.684000] systemd-journald[1758]: /dev/kmsg buffer overrun, some messages lost. [16206.684000] loop: Write error at byte offset 13155434496, length 4096. [16206.684000] loop: Write error at byte offset 13155438592, length 4096. [16206.684000] loop: Write error at byte offset 13155442688, length 4096. [16206.684000] loop: Write error at byte offset 13960736768, length 4096. [16206.684000] loop: Write error at byte offset 14229172224, length 4096. [16206.684000] systemd-journald[1758]: /dev/kmsg buffer overrun, some messages lost. [16206.684000] loop: Write error at byte offset 14766043136, length 4096. [16206.684000] loop: Write error at byte offset 15034478592, length 4096. [16206.684000] systemd-journald[1758]: /dev/kmsg buffer overrun, some messages lost. Signed-off-by: Mike Galbraith <bitbucket@online.de> Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/block/loop.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 66e8c3b94ef3..f70a230a2945 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -237,7 +237,7 @@ static int __do_lo_send_write(struct file *file,
237 file_end_write(file); 237 file_end_write(file);
238 if (likely(bw == len)) 238 if (likely(bw == len))
239 return 0; 239 return 0;
240 printk(KERN_ERR "loop: Write error at byte offset %llu, length %i.\n", 240 printk_ratelimited(KERN_ERR "loop: Write error at byte offset %llu, length %i.\n",
241 (unsigned long long)pos, len); 241 (unsigned long long)pos, len);
242 if (bw >= 0) 242 if (bw >= 0)
243 bw = -EIO; 243 bw = -EIO;
@@ -277,7 +277,7 @@ static int do_lo_send_write(struct loop_device *lo, struct bio_vec *bvec,
277 return __do_lo_send_write(lo->lo_backing_file, 277 return __do_lo_send_write(lo->lo_backing_file,
278 page_address(page), bvec->bv_len, 278 page_address(page), bvec->bv_len,
279 pos); 279 pos);
280 printk(KERN_ERR "loop: Transfer error at byte offset %llu, " 280 printk_ratelimited(KERN_ERR "loop: Transfer error at byte offset %llu, "
281 "length %i.\n", (unsigned long long)pos, bvec->bv_len); 281 "length %i.\n", (unsigned long long)pos, bvec->bv_len);
282 if (ret > 0) 282 if (ret > 0)
283 ret = -EIO; 283 ret = -EIO;
@@ -316,7 +316,7 @@ static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
316out: 316out:
317 return ret; 317 return ret;
318fail: 318fail:
319 printk(KERN_ERR "loop: Failed to allocate temporary page for write.\n"); 319 printk_ratelimited(KERN_ERR "loop: Failed to allocate temporary page for write.\n");
320 ret = -ENOMEM; 320 ret = -ENOMEM;
321 goto out; 321 goto out;
322} 322}
@@ -345,7 +345,7 @@ lo_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
345 size = p->bsize; 345 size = p->bsize;
346 346
347 if (lo_do_transfer(lo, READ, page, buf->offset, p->page, p->offset, size, IV)) { 347 if (lo_do_transfer(lo, READ, page, buf->offset, p->page, p->offset, size, IV)) {
348 printk(KERN_ERR "loop: transfer error block %ld\n", 348 printk_ratelimited(KERN_ERR "loop: transfer error block %ld\n",
349 page->index); 349 page->index);
350 size = -EINVAL; 350 size = -EINVAL;
351 } 351 }