* add private /proc/ide/hd?/capacity handlers to ide-{cd,disk,floppy}.c
* use generic proc_ide_read_capacity() for ide-{scsi,tape}.c
* kill ->capacity, default_capacity() and generic_subdriver_entries[]

diff -Nru a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
--- a/drivers/ide/ide-cd.c      2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide-cd.c      2005-01-21 22:23:17 +01:00
@@ -3251,6 +3251,25 @@

 static int ide_cdrom_attach (ide_drive_t *drive);

+#ifdef CONFIG_PROC_FS
+static int proc_idecd_read_capacity
+       (char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+       ide_drive_t*drive = (ide_drive_t *)data;
+       int len;
+
+       len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
+       PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
+}
+
+static ide_proc_entry_t idecd_proc[] = {
+       { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL },
+       { NULL, 0, NULL, NULL }
+};
+#else
+# define idecd_proc    NULL
+#endif
+
 static ide_driver_t ide_cdrom_driver = {
        .owner                  = THIS_MODULE,
        .name                   = "ide-cdrom",
@@ -3260,7 +3279,7 @@
        .supports_dsc_overlap   = 1,
        .cleanup                = ide_cdrom_cleanup,
        .do_request             = ide_do_rw_cdrom,
-       .capacity               = ide_cdrom_capacity,
+       .proc                   = idecd_proc,
        .attach                 = ide_cdrom_attach,
        .drives                 = LIST_HEAD_INIT(ide_cdrom_driver.drives),
 };
diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
--- a/drivers/ide/ide-disk.c    2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide-disk.c    2005-01-21 22:23:17 +01:00
@@ -580,6 +580,16 @@
        PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
 }

+static int proc_idedisk_read_capacity
+       (char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+       ide_drive_t*drive = (ide_drive_t *)data;
+       int len;
+
+       len = sprintf(page,"%llu\n", (long long)idedisk_capacity(drive));
+       PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
+}
+
 static int proc_idedisk_read_smart_thresholds
        (char *page, char **start, off_t off, int count, int *eof, void *data)
 {
@@ -620,6 +630,7 @@

 static ide_proc_entry_t idedisk_proc[] = {
        { "cache",              S_IFREG|S_IRUGO,        
proc_idedisk_read_cache,                NULL },
+       { "capacity",           S_IFREG|S_IRUGO,        
proc_idedisk_read_capacity,             NULL },
        { "geometry",           S_IFREG|S_IRUGO,        proc_ide_read_geometry, 
                NULL },
        { "smart_values",       S_IFREG|S_IRUSR,        
proc_idedisk_read_smart_values,         NULL },
        { "smart_thresholds",   S_IFREG|S_IRUSR,        
proc_idedisk_read_smart_thresholds,     NULL },
@@ -985,7 +996,6 @@
        .supports_dsc_overlap   = 0,
        .cleanup                = idedisk_cleanup,
        .do_request             = ide_do_rw_disk,
-       .capacity               = idedisk_capacity,
        .proc                   = idedisk_proc,
        .attach                 = idedisk_attach,
        .drives                 = LIST_HEAD_INIT(idedisk_driver.drives),
diff -Nru a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
--- a/drivers/ide/ide-floppy.c  2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide-floppy.c  2005-01-21 22:23:17 +01:00
@@ -1847,7 +1847,18 @@

 #ifdef CONFIG_PROC_FS

+static int proc_idefloppy_read_capacity
+       (char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+       ide_drive_t*drive = (ide_drive_t *)data;
+       int len;
+
+       len = sprintf(page,"%llu\n", (long long)idefloppy_capacity(drive));
+       PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
+}
+
 static ide_proc_entry_t idefloppy_proc[] = {
+       { "capacity",   S_IFREG|S_IRUGO,        proc_idefloppy_read_capacity, 
NULL },
        { "geometry",   S_IFREG|S_IRUGO,        proc_ide_read_geometry, NULL },
        { NULL, 0, NULL, NULL }
 };
@@ -1873,7 +1884,6 @@
        .cleanup                = idefloppy_cleanup,
        .do_request             = idefloppy_do_request,
        .end_request            = idefloppy_do_end_request,
-       .capacity               = idefloppy_capacity,
        .proc                   = idefloppy_proc,
        .attach                 = idefloppy_attach,
        .drives                 = LIST_HEAD_INIT(idefloppy_driver.drives),
diff -Nru a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
--- a/drivers/ide/ide-proc.c    2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide-proc.c    2005-01-21 22:23:17 +01:00
@@ -269,13 +269,11 @@
 int proc_ide_read_capacity
        (char *page, char **start, off_t off, int count, int *eof, void *data)
 {
-       ide_drive_t     *drive = (ide_drive_t *) data;
-       int             len;
-
-       len = sprintf(page,"%llu\n",
-                     (long long) (DRIVER(drive)->capacity(drive)));
+       int len = sprintf(page,"%llu\n", (long long)0x7fffffff);
        PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
 }
+
+EXPORT_SYMBOL_GPL(proc_ide_read_capacity);

 int proc_ide_read_geometry
        (char *page, char **start, off_t off, int count, int *eof, void *data)
diff -Nru a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
--- a/drivers/ide/ide-tape.c    2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide-tape.c    2005-01-21 22:23:17 +01:00
@@ -4660,6 +4660,7 @@
 }

 static ide_proc_entry_t idetape_proc[] = {
+       { "capacity",   S_IFREG|S_IRUGO,        proc_ide_read_capacity, NULL },
        { "name",       S_IFREG|S_IRUGO,        proc_idetape_read_name, NULL },
        { NULL, 0, NULL, NULL }
 };
diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c
--- a/drivers/ide/ide.c 2005-01-21 22:23:17 +01:00
+++ b/drivers/ide/ide.c 2005-01-21 22:23:17 +01:00
@@ -413,11 +413,6 @@

 #ifdef CONFIG_PROC_FS
 struct proc_dir_entry *proc_ide_root;
-
-ide_proc_entry_t generic_subdriver_entries[] = {
-       { "capacity",   S_IFREG|S_IRUGO,        proc_ide_read_capacity, NULL },
-       { NULL, 0, NULL, NULL }
-};
 #endif

 static struct resource* hwif_request_region(ide_hwif_t *hwif,
@@ -2037,11 +2032,6 @@
        return __ide_error(drive, rq, stat, err);
 }

-static sector_t default_capacity (ide_drive_t *drive)
-{
-       return 0x7fffffff;
-}
-
 static ide_startstop_t default_abort(ide_drive_t *drive, struct request *rq)
 {
        return __ide_abort(drive, rq);
@@ -2055,7 +2045,6 @@
        if (d->end_request == NULL)     d->end_request = default_end_request;
        if (d->error == NULL)           d->error = default_error;
        if (d->abort == NULL)           d->abort = default_abort;
-       if (d->capacity == NULL)        d->capacity = default_capacity;
 }

 int ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
@@ -2083,10 +2072,8 @@
                drive->nice1 = 1;
        }
 #ifdef CONFIG_PROC_FS
-       if (drive->driver != &idedefault_driver) {
-               ide_add_proc_entries(drive->proc, generic_subdriver_entries, 
drive);
+       if (drive->driver != &idedefault_driver)
                ide_add_proc_entries(drive->proc, driver->proc, drive);
-       }
 #endif
        return 0;
 }
@@ -2120,7 +2107,6 @@
        }
 #ifdef CONFIG_PROC_FS
        ide_remove_proc_entries(drive->proc, DRIVER(drive)->proc);
-       ide_remove_proc_entries(drive->proc, generic_subdriver_entries);
 #endif
        auto_remove_settings(drive);
        drive->driver = &idedefault_driver;
diff -Nru a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
--- a/drivers/scsi/ide-scsi.c   2005-01-21 22:23:17 +01:00
+++ b/drivers/scsi/ide-scsi.c   2005-01-21 22:23:17 +01:00
@@ -708,6 +708,15 @@

 static int idescsi_attach(ide_drive_t *drive);

+#ifdef CONFIG_PROC_FS
+static ide_proc_entry_t idescsi_proc[] = {
+       { "capacity", S_IFREG|S_IRUGO, proc_ide_read_capacity, NULL },
+       { NULL, 0, NULL, NULL }
+};
+#else
+# define idescsi_proc  NULL
+#endif
+
 /*
  *     IDE subdriver functions, registered with ide.c
  */
@@ -718,6 +727,7 @@
        .media                  = ide_scsi,
        .busy                   = 0,
        .supports_dsc_overlap   = 0,
+       .proc                   = idescsi_proc,
        .attach                 = idescsi_attach,
        .cleanup                = idescsi_cleanup,
        .do_request             = idescsi_do_request,
diff -Nru a/include/linux/ide.h b/include/linux/ide.h
--- a/include/linux/ide.h       2005-01-21 22:23:17 +01:00
+++ b/include/linux/ide.h       2005-01-21 22:23:17 +01:00
@@ -1100,7 +1100,6 @@
        ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8);
        ide_startstop_t (*abort)(ide_drive_t *, struct request *rq);
        int             (*ioctl)(ide_drive_t *, struct inode *, struct file *, 
unsigned int, unsigned long);
-       sector_t        (*capacity)(ide_drive_t *);
        ide_proc_entry_t        *proc;
        int             (*attach)(ide_drive_t *);
        void            (*ata_prebuilder)(ide_drive_t *);
@@ -1358,7 +1357,6 @@
 extern void ide_init_subdrivers(void);

 extern struct block_device_operations ide_fops[];
-extern ide_proc_entry_t generic_subdriver_entries[];

 extern int ata_attach(ide_drive_t *);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to