diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-10 12:26:55 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-10 12:26:55 -0400 |
| commit | dd76a786af1f09e9122e150d30156e094e2a94b4 (patch) | |
| tree | 97ff3d0d45d8df3294d3ec913eec728eb1c2ab57 /drivers | |
| parent | e7990d45bb88c2f0565b5ee4c32eefe81653faff (diff) | |
| parent | 360f92c2443073143467a0088daffec96a17910b (diff) | |
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
Pull block layer fixes from Jens Axboe:
"A small collection of fixes that should go in before -rc1. The pull
request contains:
- A two patch fix for a regression with block enabled tagging caused
by a commit in the initial pull request. One patch is from Martin
and ensures that SCSI doesn't truncate 64-bit block flags, the
other one is from me and prevents us from double using struct
request queuelist for both completion and busy tags. This caused
anything from a boot crash for some, to crashes under load.
- A blk-mq fix for a potential soft stall when hot unplugging CPUs
with busy IO.
- percpu_counter fix is listed in here, that caused a suspend issue
with virtio-blk due to percpu counters having an inconsistent state
during CPU removal. Andrew sent this in separately a few days ago,
but it's here. JFYI.
- A few fixes for block integrity from Martin.
- A ratelimit fix for loop from Mike Galbraith, to avoid spewing too
much in error cases"
* 'for-linus' of git://git.kernel.dk/linux-block:
block: fix regression with block enabled tagging
scsi: Make sure cmd_flags are 64-bit
block: Ensure we only enable integrity metadata for reads and writes
block: Fix integrity verification
block: Fix for_each_bvec()
drivers/block/loop.c: ratelimit error messages
blk-mq: fix potential stall during CPU unplug with IO pending
percpu_counter: fix bad counter state during suspend
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/block/loop.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 4 |
2 files changed, 6 insertions, 6 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) | |||
| 316 | out: | 316 | out: |
| 317 | return ret; | 317 | return ret; |
| 318 | fail: | 318 | fail: |
| 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 | } |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 5681c05ac506..65a123d9c676 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -184,7 +184,7 @@ void scsi_queue_insert(struct scsi_cmnd *cmd, int reason) | |||
| 184 | */ | 184 | */ |
| 185 | int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, | 185 | int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, |
| 186 | int data_direction, void *buffer, unsigned bufflen, | 186 | int data_direction, void *buffer, unsigned bufflen, |
| 187 | unsigned char *sense, int timeout, int retries, int flags, | 187 | unsigned char *sense, int timeout, int retries, u64 flags, |
| 188 | int *resid) | 188 | int *resid) |
| 189 | { | 189 | { |
| 190 | struct request *req; | 190 | struct request *req; |
| @@ -235,7 +235,7 @@ EXPORT_SYMBOL(scsi_execute); | |||
| 235 | int scsi_execute_req_flags(struct scsi_device *sdev, const unsigned char *cmd, | 235 | int scsi_execute_req_flags(struct scsi_device *sdev, const unsigned char *cmd, |
| 236 | int data_direction, void *buffer, unsigned bufflen, | 236 | int data_direction, void *buffer, unsigned bufflen, |
| 237 | struct scsi_sense_hdr *sshdr, int timeout, int retries, | 237 | struct scsi_sense_hdr *sshdr, int timeout, int retries, |
| 238 | int *resid, int flags) | 238 | int *resid, u64 flags) |
| 239 | { | 239 | { |
| 240 | char *sense = NULL; | 240 | char *sense = NULL; |
| 241 | int result; | 241 | int result; |
