summaryrefslogtreecommitdiffstats
path: root/0041-RHBZ-587695-add-rdac-message.patch
blob: 880dee09ef6689ff4c600fe8cd30e010f97e4582 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
---
 libmultipath/checkers/rdac.c |   32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

Index: multipath-tools/libmultipath/checkers/rdac.c
===================================================================
--- multipath-tools.orig/libmultipath/checkers/rdac.c
+++ multipath-tools/libmultipath/checkers/rdac.c
@@ -101,25 +101,33 @@ extern int
 libcheck_check (struct checker * c)
 {
 	struct volume_access_inq inq;
+	int ret;
 
 	memset(&inq, 0, sizeof(struct volume_access_inq));
 	if (0 != do_inq(c->fd, 0xC9, &inq, sizeof(struct volume_access_inq),
 			c->timeout)) {
-		MSG(c, MSG_RDAC_DOWN);
-		return PATH_DOWN;
-	} else {
-		if ((inq.PQ_PDT & 0x20) || (inq.PQ_PDT & 0x7f)) {
-			/* LUN not connected*/
-			return PATH_DOWN;
-		}
+		ret = PATH_DOWN;
+		goto done;
+	} else if ((inq.PQ_PDT & 0x20) || (inq.PQ_PDT & 0x7f)) {
+		/* LUN not connected*/
+		ret = PATH_DOWN;
+		goto done;
 	}
 
-	if (inq.avtcvp & 0x1) {
+	ret = ((inq.avtcvp & 0x1) ? PATH_UP : PATH_GHOST);
+
+done:
+	switch (ret) {
+	case PATH_DOWN:
+		MSG(c, MSG_RDAC_DOWN);
+		break;
+	case PATH_UP:
 		MSG(c, MSG_RDAC_UP);
-		return PATH_UP;
-	}
-	else {
+		break;
+	case PATH_GHOST:
 		MSG(c, MSG_RDAC_GHOST);
-		return PATH_GHOST;
+		break;
 	}
+
+	return ret;
 }