Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block

* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
block: don't merge requests of different failfast settings
cciss: Ignore stale commands after reboot

+28 -2
+6
block/blk-merge.c
··· 350 350 if (blk_integrity_rq(req) != blk_integrity_rq(next)) 351 351 return 0; 352 352 353 + /* don't merge requests of different failfast settings */ 354 + if (blk_failfast_dev(req) != blk_failfast_dev(next) || 355 + blk_failfast_transport(req) != blk_failfast_transport(next) || 356 + blk_failfast_driver(req) != blk_failfast_driver(next)) 357 + return 0; 358 + 353 359 /* 354 360 * If we are allowed to merge, then append bio list 355 361 * from next to rq and release next. merge_requests_fn
+8
block/elevator.c
··· 100 100 if (bio_integrity(bio) != blk_integrity_rq(rq)) 101 101 return 0; 102 102 103 + /* 104 + * Don't merge if failfast settings don't match 105 + */ 106 + if (bio_failfast_dev(bio) != blk_failfast_dev(rq) || 107 + bio_failfast_transport(bio) != blk_failfast_transport(rq) || 108 + bio_failfast_driver(bio) != blk_failfast_driver(rq)) 109 + return 0; 110 + 103 111 if (!elv_iosched_allow_merge(rq, bio)) 104 112 return 0; 105 113
+13 -2
drivers/block/cciss.c
··· 226 226 227 227 static inline void removeQ(CommandList_struct *c) 228 228 { 229 - if (WARN_ON(hlist_unhashed(&c->list))) 229 + /* 230 + * After kexec/dump some commands might still 231 + * be in flight, which the firmware will try 232 + * to complete. Resetting the firmware doesn't work 233 + * with old fw revisions, so we have to mark 234 + * them off as 'stale' to prevent the driver from 235 + * falling over. 236 + */ 237 + if (WARN_ON(hlist_unhashed(&c->list))) { 238 + c->cmd_type = CMD_MSG_STALE; 230 239 return; 240 + } 231 241 232 242 hlist_del_init(&c->list); 233 243 } ··· 4256 4246 while (!hlist_empty(&h->cmpQ)) { 4257 4247 c = hlist_entry(h->cmpQ.first, CommandList_struct, list); 4258 4248 removeQ(c); 4259 - c->err_info->CommandStatus = CMD_HARDWARE_ERR; 4249 + if (c->cmd_type != CMD_MSG_STALE) 4250 + c->err_info->CommandStatus = CMD_HARDWARE_ERR; 4260 4251 if (c->cmd_type == CMD_RWREQ) { 4261 4252 complete_command(h, c, 0); 4262 4253 } else if (c->cmd_type == CMD_IOCTL_PEND)
+1
drivers/block/cciss_cmd.h
··· 274 274 #define CMD_SCSI 0x03 275 275 #define CMD_MSG_DONE 0x04 276 276 #define CMD_MSG_TIMEOUT 0x05 277 + #define CMD_MSG_STALE 0xff 277 278 278 279 /* This structure needs to be divisible by 8 for new 279 280 * indexing method.