scsi: storvsc: Ratelimit warning logs to prevent VM denial of service
commit d2138eab8c upstream.
If there's a persistent error in the hypervisor, the SCSI warning for
failed I/O can flood the kernel log and max out CPU utilization,
preventing troubleshooting from the VM side. Ratelimit the warning so
it doesn't DoS the VM.
Closes: https://github.com/microsoft/WSL/issues/9173
Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com>
Link: https://lore.kernel.org/r/20250107-eahariha-ratelimit-storvsc-v1-1-7fc193d1f2b0@linux.microsoft.com
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e0500e4373
commit
088bde862f
@@ -171,6 +171,12 @@ do { \
|
||||
dev_warn(&(dev)->device, fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define storvsc_log_ratelimited(dev, level, fmt, ...) \
|
||||
do { \
|
||||
if (do_logging(level)) \
|
||||
dev_warn_ratelimited(&(dev)->device, fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
struct vmscsi_request {
|
||||
u16 length;
|
||||
u8 srb_status;
|
||||
@@ -1177,7 +1183,7 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device,
|
||||
int loglevel = (stor_pkt->vm_srb.cdb[0] == TEST_UNIT_READY) ?
|
||||
STORVSC_LOGGING_WARN : STORVSC_LOGGING_ERROR;
|
||||
|
||||
storvsc_log(device, loglevel,
|
||||
storvsc_log_ratelimited(device, loglevel,
|
||||
"tag#%d cmd 0x%x status: scsi 0x%x srb 0x%x hv 0x%x\n",
|
||||
scsi_cmd_to_rq(request->cmd)->tag,
|
||||
stor_pkt->vm_srb.cdb[0],
|
||||
|
||||
Reference in New Issue
Block a user