diff mbox

multipath-tools: service mode changes for RDAC storage

Message ID 47D23AD8469A2B448F33C24BD7A39BD90EC1660B@RTPMVEXC1-PRD.hq.netapp.com (mailing list archive)
State Deferred, archived
Headers show

Commit Message

babu moger July 25, 2011, 12:04 p.m. UTC
This patch handles the recent changes in NetApp RDAC storage firmware to report service mode. Firmware changed the inquiry page 0xc9 to report service mode. Purpose this change is to avoid DMMP going into infinite loop of switching back and forth between controllers when a controller is placed in service mode. This fixes the problem and reports the path as failed if the controller is placed in service mode.
 
Signed-off-by: Babu Moger <babu.moger@netapp.com>
Reviewed-by: Yanling Qi <yanling.qi@netapp.com>
Reviewed-by: Somasundaram Krishnasamy <Somasundaram.Krishnasamy@netapp.com>

---



--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Comments

babu moger Aug. 11, 2011, 5:19 a.m. UTC | #1
Christophe,
  Do you have any comments on this? If not can you please merge this..
Thanks
Babu

> -----Original Message-----
> From: Moger, Babu
> Sent: Monday, July 25, 2011 7:05 AM
> To: device-mapper development
> Cc: Kumar, Vijay; Dachepalli, Sudhir; Krishnasamy, Somasundaram; Qi,
> Yanling; Stankey, Robert
> Subject: [dm-devel] [PATCH] multipath-tools: service mode changes for
> RDACstorage
> 
> This patch handles the recent changes in NetApp RDAC storage firmware to
> report service mode. Firmware changed the inquiry page 0xc9 to report
> service mode. Purpose this change is to avoid DMMP going into infinite
> loop of switching back and forth between controllers when a controller
> is placed in service mode. This fixes the problem and reports the path
> as failed if the controller is placed in service mode.
> 
> Signed-off-by: Babu Moger <babu.moger@netapp.com>
> Reviewed-by: Yanling Qi <yanling.qi@netapp.com>
> Reviewed-by: Somasundaram Krishnasamy
> <Somasundaram.Krishnasamy@netapp.com>
> 
> ---
> --- multipath-tools-0.4.8/libmultipath/checkers/rdac.c.orig	2011-07-06
> 16:37:43.000000000 -0500
> +++ multipath-tools-0.4.8/libmultipath/checkers/rdac.c	2011-07-25
> 06:38:03.000000000 -0500
> @@ -198,7 +198,10 @@ struct volume_access_inq
>  	char PQ_PDT;
>  	char dontcare0[7];
>  	char avtcvp;
> -	char dontcare1[39];
> +	char dontcare1;
> +	char asym_access_state_cur;
> +	char vendor_specific_cur;
> +	char dontcare2[36];
>  };
> 
>  extern int
> @@ -216,6 +219,14 @@ libcheck_check (struct checker * c)
>  		ret = PATH_DOWN;
>  		goto done;
>  	}
> +
> +	/* check if controller is in service mode */
> +	if ((inq.avtcvp & 0x10) &&
> +	    ((inq.asym_access_state_cur & 0x0F) == 0x3) &&
> +	    (inq.vendor_specific_cur == 0x7)) {
> +		ret = PATH_DOWN;
> +		goto done;
> +	}
> 
>  	/* If owner set or ioship mode is enabled return PATH_UP always */
>  	if ((inq.avtcvp & 0x1) || ((inq.avtcvp >> 5) & 0x1))
> 
> 
> 
> --
> dm-devel mailing list
> dm-devel@redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
diff mbox

Patch

--- multipath-tools-0.4.8/libmultipath/checkers/rdac.c.orig	2011-07-06 16:37:43.000000000 -0500
+++ multipath-tools-0.4.8/libmultipath/checkers/rdac.c	2011-07-25 06:38:03.000000000 -0500
@@ -198,7 +198,10 @@  struct volume_access_inq
 	char PQ_PDT;
 	char dontcare0[7];
 	char avtcvp;
-	char dontcare1[39];
+	char dontcare1;
+	char asym_access_state_cur;
+	char vendor_specific_cur;
+	char dontcare2[36];
 };
 
 extern int
@@ -216,6 +219,14 @@  libcheck_check (struct checker * c)
 		ret = PATH_DOWN;
 		goto done;
 	}
+
+	/* check if controller is in service mode */
+	if ((inq.avtcvp & 0x10) &&
+	    ((inq.asym_access_state_cur & 0x0F) == 0x3) &&
+	    (inq.vendor_specific_cur == 0x7)) {
+		ret = PATH_DOWN;
+		goto done;
+	}
 
 	/* If owner set or ioship mode is enabled return PATH_UP always */
 	if ((inq.avtcvp & 0x1) || ((inq.avtcvp >> 5) & 0x1))