diff options
Diffstat (limited to 'drivers/scsi/aacraid/commsup.c')
-rw-r--r-- | drivers/scsi/aacraid/commsup.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 1dd2e57c3345..81b36923e0ef 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c | |||
@@ -901,7 +901,31 @@ static void aac_handle_aif(struct aac_dev * dev, struct fib * fibptr) | |||
901 | case AifEnConfigChange: | 901 | case AifEnConfigChange: |
902 | break; | 902 | break; |
903 | 903 | ||
904 | case AifEnAddJBOD: | ||
905 | case AifEnDeleteJBOD: | ||
906 | container = le32_to_cpu(((__le32 *)aifcmd->data)[1]); | ||
907 | if ((container >> 28)) | ||
908 | break; | ||
909 | channel = (container >> 24) & 0xF; | ||
910 | if (channel >= dev->maximum_num_channels) | ||
911 | break; | ||
912 | id = container & 0xFFFF; | ||
913 | if (id >= dev->maximum_num_physicals) | ||
914 | break; | ||
915 | lun = (container >> 16) & 0xFF; | ||
916 | channel = aac_phys_to_logical(channel); | ||
917 | device_config_needed = | ||
918 | (((__le32 *)aifcmd->data)[0] == | ||
919 | cpu_to_le32(AifEnAddJBOD)) ? ADD : DELETE; | ||
920 | break; | ||
921 | |||
904 | case AifEnEnclosureManagement: | 922 | case AifEnEnclosureManagement: |
923 | /* | ||
924 | * If in JBOD mode, automatic exposure of new | ||
925 | * physical target to be suppressed until configured. | ||
926 | */ | ||
927 | if (dev->jbod) | ||
928 | break; | ||
905 | switch (le32_to_cpu(((__le32 *)aifcmd->data)[3])) { | 929 | switch (le32_to_cpu(((__le32 *)aifcmd->data)[3])) { |
906 | case EM_DRIVE_INSERTION: | 930 | case EM_DRIVE_INSERTION: |
907 | case EM_DRIVE_REMOVAL: | 931 | case EM_DRIVE_REMOVAL: |