* [PATCH] get rid of sg_init
@ 2002-11-03 17:25 Christoph Hellwig
0 siblings, 0 replies; only message in thread
From: Christoph Hellwig @ 2002-11-03 17:25 UTC (permalink / raw)
To: James.Bottomley, dougg; +Cc: linux-scsi
Next step of my ->init removal series. sg does a few to much wierd
things with it's global array thay I prefer to leave it to Doug to
get rid of it (if he wants to), but this patch at least gets rid of
sg_init.
Move the register_chrdev to init_sg - open properly checks whether
the device exists so this doesn't cause any harm. Remove the initial
allocation of the device array - the resizing code in sg_attach will
properly take care of it when called the first time.
Tested with a DVD reader/CD writer combination and ide-scsi.
--- 1.35/drivers/scsi/sg.c Fri Nov 1 07:28:19 2002
+++ edited/drivers/scsi/sg.c Sun Nov 3 14:04:56 2002
@@ -110,7 +110,6 @@
#define SG_DEV_ARR_LUMP 6 /* amount to over allocate sg_dev_arr by */
-static int sg_init(void);
static int sg_attach(Scsi_Device *);
static int sg_detect(Scsi_Device *);
static void sg_detach(Scsi_Device *);
@@ -126,7 +125,6 @@
.tag = "sg",
.scsi_type = 0xff,
.detect = sg_detect,
- .init = sg_init,
.attach = sg_attach,
.detach = sg_detach
};
@@ -1344,55 +1342,6 @@
return 1;
}
-/* Driver initialization */
-static int
-sg_init()
-{
- static int sg_registered = 0;
- unsigned long iflags;
- int tmp_dev_max;
- Sg_device **tmp_da;
-
- if ((sg_template.dev_noticed == 0) || sg_dev_arr)
- return 0;
-
- SCSI_LOG_TIMEOUT(3, printk("sg_init\n"));
-
- write_lock_irqsave(&sg_dev_arr_lock, iflags);
- tmp_dev_max = sg_template.dev_noticed + SG_DEV_ARR_LUMP;
- write_unlock_irqrestore(&sg_dev_arr_lock, iflags);
-
- tmp_da = (Sg_device **)vmalloc(
- tmp_dev_max * sizeof(Sg_device *));
- if (NULL == tmp_da) {
- printk(KERN_ERR "sg_init: no space for sg_dev_arr\n");
- return 1;
- }
- write_lock_irqsave(&sg_dev_arr_lock, iflags);
-
- if (!sg_registered) {
- if (register_chrdev(SCSI_GENERIC_MAJOR, "sg", &sg_fops)) {
- printk(KERN_ERR
- "Unable to get major %d for generic SCSI device\n",
- SCSI_GENERIC_MAJOR);
- write_unlock_irqrestore(&sg_dev_arr_lock, iflags);
- vfree((char *) tmp_da);
- return 1;
- }
- sg_registered++;
- }
-
- memset(tmp_da, 0, tmp_dev_max * sizeof (Sg_device *));
- sg_template.dev_max = tmp_dev_max;
- sg_dev_arr = tmp_da;
-
- write_unlock_irqrestore(&sg_dev_arr_lock, iflags);
-#ifdef CONFIG_PROC_FS
- sg_proc_init();
-#endif /* CONFIG_PROC_FS */
- return 0;
-}
-
#ifndef MODULE
static int __init
sg_def_reserved_size_setup(char *str)
@@ -1643,9 +1592,21 @@
static int __init
init_sg(void)
{
+ int rc;
+
if (def_reserved_size >= 0)
sg_big_buff = def_reserved_size;
- return scsi_register_device(&sg_template);
+
+ rc = register_chrdev(SCSI_GENERIC_MAJOR, "sg", &sg_fops);
+ if (rc)
+ return rc;
+ rc = scsi_register_device(&sg_template);
+ if (rc)
+ return rc;
+#ifdef CONFIG_PROC_FS
+ sg_proc_init();
+#endif /* CONFIG_PROC_FS */
+ return 0;
}
static void __exit
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-11-03 17:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-11-03 17:25 [PATCH] get rid of sg_init Christoph Hellwig
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.