From 717b5b78ce92d4b8749793195f63048c259b8981 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 22 Jun 2008 15:02:35 +0000 Subject: [PATCH] Retry reading the capacity up to three times. The first try might only yield a unit attention telling us that the device or media status changed, which is expected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26081 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/disk/usb/usb_disk/usb_disk.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp index cc1b4b46f0..6feee5bcef 100644 --- a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp +++ b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp @@ -415,8 +415,14 @@ usb_disk_update_capacity(device_lun *lun) { uint32 dataLength = sizeof(scsi_read_capacity_10_parameter); scsi_read_capacity_10_parameter parameter; - status_t result = usb_disk_operation(lun, SCSI_READ_CAPACITY_10, 10, 0, 0, - ¶meter, &dataLength, true); + status_t result = B_ERROR; + for (int32 i = 0; i < 3; i++) { + result = usb_disk_operation(lun, SCSI_READ_CAPACITY_10, 10, 0, 0, + ¶meter, &dataLength, true); + if (result == B_OK) + break; + } + if (result != B_OK) { TRACE_ALWAYS("failed to update capacity\n"); lun->media_present = false;