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

cdrom: use list_head for cdrom_device_info list

Use list_head for cdrom_device_info list instead of opencoded
singly list handling.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

authored by

Akinobu Mita and committed by
Jens Axboe
7fd097d4 032d8d90

+8 -24
+6 -23
drivers/cdrom/cdrom.c
··· 362 362 363 363 static void cdrom_sysctl_register(void); 364 364 365 - static struct cdrom_device_info *topCdromPtr; 365 + static LIST_HEAD(cdrom_list); 366 366 367 367 static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi, 368 368 struct packet_command *cgc) ··· 436 436 437 437 cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); 438 438 mutex_lock(&cdrom_mutex); 439 - cdi->next = topCdromPtr; 440 - topCdromPtr = cdi; 439 + list_add(&cdi->list, &cdrom_list); 441 440 mutex_unlock(&cdrom_mutex); 442 441 return 0; 443 442 } 444 443 #undef ENSURE 445 444 446 - int unregister_cdrom(struct cdrom_device_info *unreg) 445 + int unregister_cdrom(struct cdrom_device_info *cdi) 447 446 { 448 - struct cdrom_device_info *cdi, *prev; 449 447 cdinfo(CD_OPEN, "entering unregister_cdrom\n"); 450 448 451 - prev = NULL; 452 449 mutex_lock(&cdrom_mutex); 453 - cdi = topCdromPtr; 454 - while (cdi && cdi != unreg) { 455 - prev = cdi; 456 - cdi = cdi->next; 457 - } 458 - 459 - if (cdi == NULL) { 460 - mutex_unlock(&cdrom_mutex); 461 - return -2; 462 - } 463 - if (prev) 464 - prev->next = cdi->next; 465 - else 466 - topCdromPtr = cdi->next; 467 - 450 + list_del(&cdi->list); 468 451 mutex_unlock(&cdrom_mutex); 469 452 470 453 if (cdi->exit) ··· 3289 3306 3290 3307 *pos += ret; 3291 3308 3292 - for (cdi = topCdromPtr; cdi; cdi = cdi->next) { 3309 + list_for_each_entry(cdi, &cdrom_list, list) { 3293 3310 switch (option) { 3294 3311 case CTL_NAME: 3295 3312 ret = scnprintf(info + *pos, max_size - *pos, ··· 3411 3428 struct cdrom_device_info *cdi; 3412 3429 3413 3430 mutex_lock(&cdrom_mutex); 3414 - for (cdi = topCdromPtr; cdi != NULL; cdi = cdi->next) { 3431 + list_for_each_entry(cdi, &cdrom_list, list) { 3415 3432 if (autoclose && CDROM_CAN(CDC_CLOSE_TRAY)) 3416 3433 cdi->options |= CDO_AUTO_CLOSE; 3417 3434 else if (!autoclose)
+2 -1
include/linux/cdrom.h
··· 910 910 #ifdef __KERNEL__ 911 911 #include <linux/fs.h> /* not really needed, later.. */ 912 912 #include <linux/device.h> 913 + #include <linux/list.h> 913 914 914 915 struct packet_command 915 916 { ··· 935 934 /* Uniform cdrom data structures for cdrom.c */ 936 935 struct cdrom_device_info { 937 936 struct cdrom_device_ops *ops; /* link to device_ops */ 938 - struct cdrom_device_info *next; /* next device_info for this major */ 937 + struct list_head list; /* linked list of all device_info */ 939 938 struct gendisk *disk; /* matching block layer disk */ 940 939 void *handle; /* driver-dependent data */ 941 940 /* specifications */