From 40b708f776042f64213f40af1586234ae17e9b31 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 17 Aug 2009 17:51:26 +0000 Subject: [PATCH] Do not base the device number on the device count. Fixes bug #4267. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32474 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/disk/usb/usb_disk/usb_disk.cpp | 12 ++++++++++-- .../kernel/drivers/disk/usb/usb_disk/usb_disk.h | 1 + 2 files changed, 11 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 8a17b250a3..49fecbf993 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 @@ -748,12 +748,20 @@ usb_disk_device_added(usb_device newDevice, void **cookie) } mutex_lock(&gDeviceListLock); + device->device_number = 0; + disk_device *other = gDeviceList; + while (other != NULL) { + if (other->device_number >= device->device_number) + device->device_number = other->device_number + 1; + + other = (disk_device *)other->link; + } + device->link = (void *)gDeviceList; gDeviceList = device; - uint32 deviceNumber = gDeviceCount++; gLunCount += device->lun_count; for (uint8 i = 0; i < device->lun_count; i++) - sprintf(device->luns[i]->name, DEVICE_NAME, deviceNumber, i); + sprintf(device->luns[i]->name, DEVICE_NAME, device->device_number, i); mutex_unlock(&gDeviceListLock); TRACE("new device: 0x%08lx\n", (uint32)device); diff --git a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h index 307f3bbd68..5ba542b10c 100644 --- a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h +++ b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h @@ -32,6 +32,7 @@ typedef struct device_lun_s device_lun; // holds common information about an attached device (pointed to by luns) typedef struct disk_device_s { usb_device device; + uint32 device_number; bool removed; uint32 open_count; mutex lock;