linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / s390 / block / dasd_fba.c
index e85015b..9114569 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/* 
  * File...........: linux/drivers/s390/block/dasd_fba.c
  * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
  * Bugreports.to..: <Linux390@de.ibm.com>
@@ -6,6 +6,7 @@
  *
  */
 
+#include <linux/config.h>
 #include <linux/stddef.h>
 #include <linux/kernel.h>
 #include <asm/debug.h>
@@ -44,8 +45,8 @@ struct dasd_fba_private {
 };
 
 static struct ccw_device_id dasd_fba_ids[] = {
-       { CCW_DEVICE_DEVTYPE (0x6310, 0, 0x9336, 0), .driver_info = 0x1},
-       { CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3370, 0), .driver_info = 0x2},
+       { CCW_DEVICE_DEVTYPE (0x6310, 0, 0x9336, 0), driver_info: 0x1},
+       { CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3370, 0), driver_info: 0x2},
        { /* end of list */ },
 };
 
@@ -55,13 +56,19 @@ static struct ccw_driver dasd_fba_driver; /* see below */
 static int
 dasd_fba_probe(struct ccw_device *cdev)
 {
-       return dasd_generic_probe(cdev, &dasd_fba_discipline);
+       int ret;
+
+       ret = dasd_generic_probe (cdev, &dasd_fba_discipline);
+       if (ret)
+               return ret;
+       ccw_device_set_options(cdev, CCWDEV_DO_PATHGROUP);
+       return 0;
 }
 
 static int
 dasd_fba_set_online(struct ccw_device *cdev)
 {
-       return dasd_generic_set_online(cdev, &dasd_fba_discipline);
+       return dasd_generic_set_online (cdev, &dasd_fba_discipline);
 }
 
 static struct ccw_driver dasd_fba_driver = {
@@ -118,13 +125,13 @@ static int
 dasd_fba_check_characteristics(struct dasd_device *device)
 {
        struct dasd_fba_private *private;
-       struct ccw_device *cdev = device->cdev;
+       struct ccw_device *cdev = device->cdev; 
        void *rdc_data;
        int rc;
 
        private = (struct dasd_fba_private *) device->private;
        if (private == NULL) {
-               private = kzalloc(sizeof(struct dasd_fba_private), GFP_KERNEL);
+               private = kmalloc(sizeof(struct dasd_fba_private), GFP_KERNEL);
                if (private == NULL) {
                        DEV_MESSAGE(KERN_WARNING, device, "%s",
                                    "memory allocation failed for private "
@@ -197,7 +204,7 @@ dasd_fba_examine_error(struct dasd_ccw_req * cqr, struct irb * irb)
        if (irb->scsw.cstat == 0x00 &&
            irb->scsw.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END))
                return dasd_era_none;
-
+       
        cdev = device->cdev;
        switch (cdev->id.dev_type) {
        case 0x3370:
@@ -532,7 +539,7 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
  * 8192 bytes (=2 pages). For 64 bit one dasd_mchunkt_t structure has
  * 24 bytes, the struct dasd_ccw_req has 136 bytes and each block can use
  * up to 16 bytes (8 for the ccw and 8 for the idal pointer). In
- * addition we have one define extent ccw + 16 bytes of data and a
+ * addition we have one define extent ccw + 16 bytes of data and a 
  * locate record ccw for each block (stupid devices!) + 16 bytes of data.
  * That makes:
  * (8192 - 24 - 136 - 8 - 16) / 40 = 200.2 blocks at maximum.
@@ -562,8 +569,16 @@ static struct dasd_discipline dasd_fba_discipline = {
 static int __init
 dasd_fba_init(void)
 {
+       int ret;
+
        ASCEBC(dasd_fba_discipline.ebcname, 4);
-       return ccw_driver_register(&dasd_fba_driver);
+
+       ret = ccw_driver_register(&dasd_fba_driver);
+       if (ret)
+               return ret;
+
+       dasd_generic_auto_online(&dasd_fba_driver);
+       return 0;
 }
 
 static void __exit
@@ -574,3 +589,22 @@ dasd_fba_cleanup(void)
 
 module_init(dasd_fba_init);
 module_exit(dasd_fba_cleanup);
+
+/*
+ * Overrides for Emacs so that we follow Linus's tabbing style.
+ * Emacs will notice this stuff at the end of the file and automatically
+ * adjust the settings for this buffer only.  This must remain at the end
+ * of the file.
+ * ---------------------------------------------------------------------------
+ * Local variables:
+ * c-indent-level: 4 
+ * c-brace-imaginary-offset: 0
+ * c-brace-offset: -4
+ * c-argdecl-indent: 4
+ * c-label-offset: -4
+ * c-continued-statement-offset: 4
+ * c-continued-brace-offset: 0
+ * indent-tabs-mode: 1
+ * tab-width: 8
+ * End:
+ */