From X512 <danger_mail@xxxxxxx>:
X512 has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/3638 ;)
Change subject: usb_disk: use MutexLocker
......................................................................
usb_disk: use MutexLocker
Change-Id: Ic3994f6267ea24cf776cb067e0d94226132f4c7e
---
M src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp
1 file changed, 22 insertions(+), 43 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/38/3638/1
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 e76fb8e..2ba1f0a 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
@@ -1774,25 +1774,21 @@
{
device_lun *lun = (device_lun *)cookie;
disk_device *device = lun->device;
- mutex_lock(&device->lock);
- if (device->removed) {
- mutex_unlock(&device->lock);
+ MutexLocker locker(&device->lock);
+ if (device->removed)
return B_DEV_NOT_READY;
- }
- status_t result = B_DEV_INVALID_IOCTL;
+ status_t result;
switch (op) {
case B_GET_DEVICE_SIZE: {
if (lun->media_changed) {
result = usb_disk_update_capacity(lun);
if (result != B_OK)
- break;
+ return result;
}
size_t size = lun->block_size * lun->block_count;
- result = user_memcpy(buffer, &size, sizeof(size));
-
- break;
+ return user_memcpy(buffer, &size, sizeof(size));
}
case B_GET_MEDIA_STATUS:
@@ -1810,8 +1806,7 @@
}
TRACE("B_GET_MEDIA_STATUS: 0x%08" B_PRIx32 "\n",
*(status_t *)buffer);
- result = B_OK;
- break;
+ return B_OK;
}
case B_GET_GEOMETRY:
@@ -1819,7 +1814,7 @@
if (lun->media_changed) {
result = usb_disk_update_capacity(lun);
if (result != B_OK)
- break;
+ return result;
}
device_geometry geometry;
@@ -1833,14 +1828,12 @@
TRACE("B_GET_GEOMETRY: %" B_PRId32 " sectors at %"
B_PRId32
" bytes per sector\n", geometry.cylinder_count,
geometry.bytes_per_sector);
- result = user_memcpy(buffer, &geometry,
sizeof(device_geometry));
- break;
+ return user_memcpy(buffer, &geometry,
sizeof(device_geometry));
}
case B_FLUSH_DRIVE_CACHE:
TRACE("B_FLUSH_DRIVE_CACHE\n");
- result = usb_disk_synchronize(lun, true);
- break;
+ return usb_disk_synchronize(lun, true);
case B_EJECT_DEVICE:
{
@@ -1851,9 +1844,8 @@
commandBlock[1] = lun->logical_unit_number << 5;
commandBlock[4] = 2;
- result = usb_disk_operation(lun, commandBlock, 6, NULL,
NULL,
+ return usb_disk_operation(lun, commandBlock, 6, NULL,
NULL,
false);
- break;
}
case B_LOAD_MEDIA:
@@ -1865,9 +1857,8 @@
commandBlock[1] = lun->logical_unit_number << 5;
commandBlock[4] = 3;
- result = usb_disk_operation(lun, commandBlock, 6, NULL,
NULL,
+ return usb_disk_operation(lun, commandBlock, 6, NULL,
NULL,
false);
- break;
}
case B_GET_ICON:
@@ -1907,9 +1898,8 @@
}
break;
}
- result = user_strlcpy((char *)buffer, iconName,
+ return user_strlcpy((char *)buffer, iconName,
B_FILE_NAME_LENGTH);
- break;
}
case B_GET_VECTOR_ICON:
@@ -1918,10 +1908,8 @@
char vendor[sizeof(lun->vendor_name)+1];
char product[sizeof(lun->product_name)+1];
- if (length != sizeof(device_icon)) {
- result = B_BAD_VALUE;
- break;
- }
+ if (length != sizeof(device_icon))
+ return B_BAD_VALUE;
if (device->is_ufi) {
// UFI is specific for floppy drives
@@ -1954,22 +1942,17 @@
}
device_icon iconData;
- if (user_memcpy(&iconData, buffer, sizeof(device_icon))
!= B_OK) {
- result = B_BAD_ADDRESS;
- break;
- }
+ if (user_memcpy(&iconData, buffer, sizeof(device_icon))
!= B_OK)
+ return B_BAD_ADDRESS;
if (iconData.icon_size >= icon->icon_size) {
if (user_memcpy(iconData.icon_data,
icon->icon_data,
- (size_t)icon->icon_size) !=
B_OK) {
- result = B_BAD_ADDRESS;
- break;
- }
+ (size_t)icon->icon_size) !=
B_OK)
+ return B_BAD_ADDRESS;
}
iconData.icon_size = icon->icon_size;
- result = user_memcpy(buffer, &iconData,
sizeof(device_icon));
- break;
+ return user_memcpy(buffer, &iconData,
sizeof(device_icon));
}
case B_GET_DEVICE_NAME:
@@ -1989,16 +1972,12 @@
TRACE_ALWAYS("got device name \"%s\": %s\n", name,
strerror(result));
- break;
+ return result;
}
-
- default:
- TRACE_ALWAYS("unhandled ioctl %" B_PRId32 "\n", op);
- break;
}
- mutex_unlock(&device->lock);
- return result;
+ TRACE_ALWAYS("unhandled ioctl %" B_PRId32 "\n", op);
+ return B_DEV_INVALID_IOCTL;
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/3638
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ic3994f6267ea24cf776cb067e0d94226132f4c7e
Gerrit-Change-Number: 3638
Gerrit-PatchSet: 1
Gerrit-Owner: X512 <danger_mail@xxxxxxx>
Gerrit-MessageType: newchange