diff options
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/drivers/ubd_kern.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 8bd9204ac1ab..53c36d1770c5 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -788,14 +788,12 @@ static int ubd_id(char **str, int *start_out, int *end_out) | |||
788 | 788 | ||
789 | static int ubd_remove(int n, char **error_out) | 789 | static int ubd_remove(int n, char **error_out) |
790 | { | 790 | { |
791 | struct gendisk *disk; | ||
791 | struct ubd *ubd_dev; | 792 | struct ubd *ubd_dev; |
792 | int err = -ENODEV; | 793 | int err = -ENODEV; |
793 | 794 | ||
794 | mutex_lock(&ubd_lock); | 795 | mutex_lock(&ubd_lock); |
795 | 796 | ||
796 | if(ubd_gendisk[n] == NULL) | ||
797 | goto out; | ||
798 | |||
799 | ubd_dev = &ubd_devs[n]; | 797 | ubd_dev = &ubd_devs[n]; |
800 | 798 | ||
801 | if(ubd_dev->file == NULL) | 799 | if(ubd_dev->file == NULL) |
@@ -806,9 +804,12 @@ static int ubd_remove(int n, char **error_out) | |||
806 | if(ubd_dev->count > 0) | 804 | if(ubd_dev->count > 0) |
807 | goto out; | 805 | goto out; |
808 | 806 | ||
809 | del_gendisk(ubd_gendisk[n]); | 807 | disk = ubd_gendisk[n]; |
810 | put_disk(ubd_gendisk[n]); | 808 | ubd_gendisk[n] = NULL; |
811 | ubd_gendisk[n] = NULL; | 809 | if(disk != NULL){ |
810 | del_gendisk(disk); | ||
811 | put_disk(disk); | ||
812 | } | ||
812 | 813 | ||
813 | if(fake_gendisk[n] != NULL){ | 814 | if(fake_gendisk[n] != NULL){ |
814 | del_gendisk(fake_gendisk[n]); | 815 | del_gendisk(fake_gendisk[n]); |