diff --git a/block/genhd.c b/block/genhd.c
index 88a53c188cb7338e74a9a55a44d8d0e5a2a758da..5098bffe6ba6eaac42f12b460e74e9d9cd6c76f1 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -817,7 +817,10 @@ struct gendisk *get_gendisk(dev_t devt, int *partno)
 	}
 
 	if (disk && unlikely(disk->flags & GENHD_FL_HIDDEN)) {
+		struct module *owner = disk->fops->owner;
+
 		put_disk(disk);
+		module_put(owner);
 		disk = NULL;
 	}
 	return disk;