diff options
Diffstat (limited to 'drivers/scsi/scsi_debug.c')
| -rw-r--r-- | drivers/scsi/scsi_debug.c | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 9c63b00773c4..a80303c6b3fd 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c | |||
| @@ -286,7 +286,7 @@ static int inquiry_evpd_83(unsigned char * arr, int target_dev_id, | |||
| 286 | int dev_id_num, const char * dev_id_str, | 286 | int dev_id_num, const char * dev_id_str, |
| 287 | int dev_id_str_len); | 287 | int dev_id_str_len); |
| 288 | static int inquiry_evpd_88(unsigned char * arr, int target_dev_id); | 288 | static int inquiry_evpd_88(unsigned char * arr, int target_dev_id); |
| 289 | static void do_create_driverfs_files(void); | 289 | static int do_create_driverfs_files(void); |
| 290 | static void do_remove_driverfs_files(void); | 290 | static void do_remove_driverfs_files(void); |
| 291 | 291 | ||
| 292 | static int sdebug_add_adapter(void); | 292 | static int sdebug_add_adapter(void); |
| @@ -2487,19 +2487,22 @@ static ssize_t sdebug_add_host_store(struct device_driver * ddp, | |||
| 2487 | DRIVER_ATTR(add_host, S_IRUGO | S_IWUSR, sdebug_add_host_show, | 2487 | DRIVER_ATTR(add_host, S_IRUGO | S_IWUSR, sdebug_add_host_show, |
| 2488 | sdebug_add_host_store); | 2488 | sdebug_add_host_store); |
| 2489 | 2489 | ||
| 2490 | static void do_create_driverfs_files(void) | 2490 | static int do_create_driverfs_files(void) |
| 2491 | { | 2491 | { |
| 2492 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_add_host); | 2492 | int ret; |
| 2493 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_delay); | 2493 | |
| 2494 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb); | 2494 | ret = driver_create_file(&sdebug_driverfs_driver, &driver_attr_add_host); |
| 2495 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_dsense); | 2495 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_delay); |
| 2496 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_every_nth); | 2496 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb); |
| 2497 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_max_luns); | 2497 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dsense); |
| 2498 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_tgts); | 2498 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_every_nth); |
| 2499 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_parts); | 2499 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_max_luns); |
| 2500 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_ptype); | 2500 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_tgts); |
| 2501 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_opts); | 2501 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_parts); |
| 2502 | driver_create_file(&sdebug_driverfs_driver, &driver_attr_scsi_level); | 2502 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_ptype); |
| 2503 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_opts); | ||
| 2504 | ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_scsi_level); | ||
| 2505 | return ret; | ||
| 2503 | } | 2506 | } |
| 2504 | 2507 | ||
| 2505 | static void do_remove_driverfs_files(void) | 2508 | static void do_remove_driverfs_files(void) |
| @@ -2522,6 +2525,7 @@ static int __init scsi_debug_init(void) | |||
| 2522 | unsigned int sz; | 2525 | unsigned int sz; |
| 2523 | int host_to_add; | 2526 | int host_to_add; |
| 2524 | int k; | 2527 | int k; |
| 2528 | int ret; | ||
| 2525 | 2529 | ||
| 2526 | if (scsi_debug_dev_size_mb < 1) | 2530 | if (scsi_debug_dev_size_mb < 1) |
| 2527 | scsi_debug_dev_size_mb = 1; /* force minimum 1 MB ramdisk */ | 2531 | scsi_debug_dev_size_mb = 1; /* force minimum 1 MB ramdisk */ |
| @@ -2560,12 +2564,32 @@ static int __init scsi_debug_init(void) | |||
| 2560 | if (scsi_debug_num_parts > 0) | 2564 | if (scsi_debug_num_parts > 0) |
| 2561 | sdebug_build_parts(fake_storep); | 2565 | sdebug_build_parts(fake_storep); |
| 2562 | 2566 | ||
| 2563 | init_all_queued(); | 2567 | ret = device_register(&pseudo_primary); |
| 2568 | if (ret < 0) { | ||
| 2569 | printk(KERN_WARNING "scsi_debug: device_register error: %d\n", | ||
| 2570 | ret); | ||
| 2571 | goto free_vm; | ||
| 2572 | } | ||
| 2573 | ret = bus_register(&pseudo_lld_bus); | ||
| 2574 | if (ret < 0) { | ||
| 2575 | printk(KERN_WARNING "scsi_debug: bus_register error: %d\n", | ||
| 2576 | ret); | ||
| 2577 | goto dev_unreg; | ||
| 2578 | } | ||
| 2579 | ret = driver_register(&sdebug_driverfs_driver); | ||
| 2580 | if (ret < 0) { | ||
| 2581 | printk(KERN_WARNING "scsi_debug: driver_register error: %d\n", | ||
| 2582 | ret); | ||
| 2583 | goto bus_unreg; | ||
| 2584 | } | ||
| 2585 | ret = do_create_driverfs_files(); | ||
| 2586 | if (ret < 0) { | ||
| 2587 | printk(KERN_WARNING "scsi_debug: driver_create_file error: %d\n", | ||
| 2588 | ret); | ||
| 2589 | goto del_files; | ||
| 2590 | } | ||
| 2564 | 2591 | ||
| 2565 | device_register(&pseudo_primary); | 2592 | init_all_queued(); |
| 2566 | bus_register(&pseudo_lld_bus); | ||
| 2567 | driver_register(&sdebug_driverfs_driver); | ||
| 2568 | do_create_driverfs_files(); | ||
| 2569 | 2593 | ||
| 2570 | sdebug_driver_template.proc_name = (char *)sdebug_proc_name; | 2594 | sdebug_driver_template.proc_name = (char *)sdebug_proc_name; |
| 2571 | 2595 | ||
| @@ -2585,6 +2609,18 @@ static int __init scsi_debug_init(void) | |||
| 2585 | scsi_debug_add_host); | 2609 | scsi_debug_add_host); |
| 2586 | } | 2610 | } |
| 2587 | return 0; | 2611 | return 0; |
| 2612 | |||
| 2613 | del_files: | ||
| 2614 | do_remove_driverfs_files(); | ||
| 2615 | driver_unregister(&sdebug_driverfs_driver); | ||
| 2616 | bus_unreg: | ||
| 2617 | bus_unregister(&pseudo_lld_bus); | ||
| 2618 | dev_unreg: | ||
| 2619 | device_unregister(&pseudo_primary); | ||
| 2620 | free_vm: | ||
| 2621 | vfree(fake_storep); | ||
| 2622 | |||
| 2623 | return ret; | ||
| 2588 | } | 2624 | } |
| 2589 | 2625 | ||
| 2590 | static void __exit scsi_debug_exit(void) | 2626 | static void __exit scsi_debug_exit(void) |
