[SCSI] aacraid: respond automatically to volumes added by config tool
authorRajashekhara, Mahesh <Mahesh_Rajashekhara@adaptec.com>
Mon, 10 May 2010 11:05:50 +0000 (04:05 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 17 May 2010 02:28:04 +0000 (22:28 -0400)
Problem description:
--------------------

When the JBOD is created from the OS using Adaptec Storage Manager
utility device is not available under FDISK until a system restart is
done.

Solution:
---------

AIF handling: If there is a JBOD drive added to the system, identify
the old one with scsi_device_lookup() and remove it to enable a fresh
scsi_add_device(); else the new JBOD is not available until reboot.

Signed-off-by: Mahesh Rajashekhara <aacraid@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/commsup.c

index 619c02d9c86227c5b423b663bb3737b02ebc5989..9f985267c30fb3517a4da3513a9978bdda2340da 100644 (file)
@@ -12,7 +12,7 @@
  *----------------------------------------------------------------------------*/
 
 #ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 24702
+# define AAC_DRIVER_BUILD 26000
 # define AAC_DRIVER_BRANCH "-ms"
 #endif
 #define MAXIMUM_NUM_CONTAINERS 32
index 94d2954d79ae0411a00507a8f5c7b4f0fa5bdf16..69692b050e3cf2d3e53d0c272f72d1dd423ccd3a 100644 (file)
@@ -966,6 +966,16 @@ static void aac_handle_aif(struct aac_dev * dev, struct fib * fibptr)
                        device_config_needed =
                          (((__le32 *)aifcmd->data)[0] ==
                            cpu_to_le32(AifEnAddJBOD)) ? ADD : DELETE;
+                       if (device_config_needed == ADD) {
+                               device = scsi_device_lookup(dev->scsi_host_ptr,
+                                       channel,
+                                       id,
+                                       lun);
+                               if (device) {
+                                       scsi_remove_device(device);
+                                       scsi_device_put(device);
+                               }
+                       }
                        break;
 
                case AifEnEnclosureManagement: