Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Nov 2010 23:41:29 +0300
From:      Oleg Sharoyko <osharoiko@gmail.com>
To:        mjacob@freebsd.org, freebsd-geom@freebsd.org
Subject:   [patch] [geom_multipath] detached device used as an active path
Message-ID:  <AANLkTi=B2Gniv3RDmLexN8Br8W0Q4t=V_0A57XPkQe4g@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--20cf30549dc5ccaf1a0494b8e13d
Content-Type: text/plain; charset=UTF-8

Hi Matthew,

Please take a look at the patch I'm attaching to this mail. It fixes
couple of issues with cp->active being left pointing to detached
device. I have as well tried to remove code duplication a bit by using
g_multipath_rotate() in g_mpd() and g_multipath_done_error() instead
of identical loops.

One thing which I'm not 100% sure about is this part (this is within
g_multipath_access()):

@@ -258,7 +268,7 @@

 	LIST_FOREACH(cp, &gp->consumer, consumer) {
 		error = g_access(cp, dr, dw, de);
-		if (error) {
+		if (error && error != ENXIO) {
 			badcp = cp;
 			goto fail;
 		}

This change fixes undesired behavior in the following case:

While running

while true; do
  echo
  date
  dd if=/dev/multipath/test of=/dev/null bs=512 count=1
  sleep 1
done

disconnect currently active path of /dev/multipath/test.

Without "&& error != ENXIO" I have exactly one failed dd. Whith it -
none of dd fails.

Shouldn't the overall logic of g_multipath_access() be as follows: try
to do what we're asked to do while there are at least one available
path, and remove from g_multipath any path for which g_access() call
has failed? I would suppose that multipath device should try to work
as long as there is at least one workable path, and any path which has
failed (no matter if it was a physical failure or, f.e. ENOMEM in
device driver) should be detached from multipath device.

-- 
Oleg Sharoyko

--20cf30549dc5ccaf1a0494b8e13d
Content-Type: text/x-patch; charset=US-ASCII; name="g_multipath.diff"
Content-Disposition: attachment; filename="g_multipath.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ggcnew4q0

SW5kZXg6IHN5cy9nZW9tL211bHRpcGF0aC9nX211bHRpcGF0aC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5
cy9nZW9tL211bHRpcGF0aC9nX211bHRpcGF0aC5jCShyZXZpc2lvbiAyMTUwOTgpCisrKyBzeXMv
Z2VvbS9tdWx0aXBhdGgvZ19tdWx0aXBhdGguYwkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQAogZ19tdWx0aXBhdGhfZGVzdHJveV9nZW9tKHN0cnVjdCBnY3RsX3JlcSAqLCBzdHJ1Y3Qg
Z19jbGFzcyAqLCBzdHJ1Y3QgZ19nZW9tICopOwogCiBzdGF0aWMgc3RydWN0IGdfZ2VvbSAqZ19t
dWx0aXBhdGhfZmluZF9nZW9tKHN0cnVjdCBnX2NsYXNzICosIGNvbnN0IGNoYXIgKik7Ci1zdGF0
aWMgaW50IGdfbXVsdGlwYXRoX3JvdGF0ZShzdHJ1Y3QgZ19nZW9tICopOworc3RhdGljIHZvaWQg
Z19tdWx0aXBhdGhfcm90YXRlKHN0cnVjdCBnX2dlb20gKik7CiAKIHN0YXRpYyBnX3Rhc3RlX3Qg
Z19tdWx0aXBhdGhfdGFzdGU7CiBzdGF0aWMgZ19jdGxfcmVxX3QgZ19tdWx0aXBhdGhfY29uZmln
OwpAQCAtOTUsMTEgKzk1LDMwIEBACiBnX21wZCh2b2lkICphcmcsIGludCBmbGFncyBfX3VudXNl
ZCkKIHsKIAlzdHJ1Y3QgZ19jb25zdW1lciAqY3A7CisJc3RydWN0IGdfZ2VvbSAqZ3A7CisJc3Ry
dWN0IGdfbXVsdGlwYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgZ19wcm92aWRlciAqcHA7CiAKIAln
X3RvcG9sb2d5X2Fzc2VydCgpOwogCWNwID0gYXJnOwogCWlmIChjcC0+YWNyID4gMCB8fCBjcC0+
YWN3ID4gMCB8fCBjcC0+YWNlID4gMCkKIAkJZ19hY2Nlc3MoY3AsIC1jcC0+YWNyLCAtY3AtPmFj
dywgLWNwLT5hY2UpOworCisJZ3AgPSBjcC0+Z2VvbTsKKwlzYyA9IGdwLT5zb2Z0YzsKKwlwcCA9
IGNwLT5wcm92aWRlcjsKKworCWlmIChjcCA9PSBzYy0+Y3BfYWN0aXZlKSB7CisJCXByaW50Zigi
R0VPTV9NVUxUSVBBVEg6ICVzIGZhaWxlZCBpbiAlc1xuIiwKKwkJICAgIHBwLT5uYW1lLCBzYy0+
c2NfbmFtZSk7CisJCXNjLT5jcF9hY3RpdmUgPSBOVUxMOworCQlnX211bHRpcGF0aF9yb3RhdGUo
Z3ApOworCQlpZiAoc2MtPmNwX2FjdGl2ZSA9PSBOVUxMIHx8IHNjLT5jcF9hY3RpdmUtPnByb3Zp
ZGVyID09IE5VTEwpIHsKKwkJCXByaW50ZigiR0VPTV9NVUxUSVBBVEg6IG91dCBvZiBwcm92aWRl
cnMgZm9yICVzXG4iLAorCQkJICAgIHNjLT5zY19uYW1lKTsKKwkJfQorCX0KKwogCWlmIChjcC0+
cHJvdmlkZXIpIHsKIAkJcHJpbnRmKCJHRU9NX01VTFRJUEFUSDogJXMgcmVtb3ZlZCBmcm9tICVz
XG4iLAogCQkgICAgY3AtPnByb3ZpZGVyLT5uYW1lLCBjcC0+Z2VvbS0+bmFtZSk7CkBAIC0xODcs
MjQgKzIwNiwxNSBAQAogCQlnX3Bvc3RfZXZlbnQoZ19tcGQsIGNwLCBNX05PV0FJVCwgTlVMTCk7
CiAJfQogCWlmIChjcCA9PSBzYy0+Y3BfYWN0aXZlKSB7Ci0JCXN0cnVjdCBnX2NvbnN1bWVyICps
Y3A7CiAJCXByaW50ZigiR0VPTV9NVUxUSVBBVEg6ICVzIGZhaWxlZCBpbiAlc1xuIiwKIAkJICAg
IHBwLT5uYW1lLCBzYy0+c2NfbmFtZSk7CiAJCXNjLT5jcF9hY3RpdmUgPSBOVUxMOwotCQlMSVNU
X0ZPUkVBQ0gobGNwLCAmZ3AtPmNvbnN1bWVyLCBjb25zdW1lcikgewotCQkJaWYgKChsY3AtPmlu
ZGV4ICYgTVBfQkFEKSA9PSAwKSB7Ci0JCQkJc2MtPmNwX2FjdGl2ZSA9IGxjcDsKLQkJCQlicmVh
azsKLQkJCX0KLQkJfQorCQlnX211bHRpcGF0aF9yb3RhdGUoZ3ApOwogCQlpZiAoc2MtPmNwX2Fj
dGl2ZSA9PSBOVUxMIHx8IHNjLT5jcF9hY3RpdmUtPnByb3ZpZGVyID09IE5VTEwpIHsKIAkJCXBy
aW50ZigiR0VPTV9NVUxUSVBBVEg6IG91dCBvZiBwcm92aWRlcnMgZm9yICVzXG4iLAogCQkJICAg
IHNjLT5zY19uYW1lKTsKIAkJCWdfdG9wb2xvZ3lfdW5sb2NrKCk7CiAJCQlyZXR1cm47Ci0JCX0g
ZWxzZSB7Ci0JCQlwcmludGYoIkdFT01fTVVMVElQQVRIOiAlcyBub3cgYWN0aXZlIHBhdGggaW4g
JXNcbiIsCi0JCQkgICAgc2MtPmNwX2FjdGl2ZS0+cHJvdmlkZXItPm5hbWUsIHNjLT5zY19uYW1l
KTsKIAkJfQogCX0KIAlnX3RvcG9sb2d5X3VubG9jaygpOwpAQCAtMjU4LDcgKzI2OCw3IEBACiAK
IAlMSVNUX0ZPUkVBQ0goY3AsICZncC0+Y29uc3VtZXIsIGNvbnN1bWVyKSB7CiAJCWVycm9yID0g
Z19hY2Nlc3MoY3AsIGRyLCBkdywgZGUpOwotCQlpZiAoZXJyb3IpIHsKKwkJaWYgKGVycm9yICYm
IGVycm9yICE9IEVOWElPKSB7CiAJCQliYWRjcCA9IGNwOwogCQkJZ290byBmYWlsOwogCQl9CkBA
IC00MDksMTcgKzQxOSwxNiBAQAogCXJldHVybiAoZ19tdWx0aXBhdGhfZGVzdHJveShncCkpOwog
fQogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogZ19tdWx0aXBhdGhfcm90YXRlKHN0cnVjdCBn
X2dlb20gKmdwKQogewogCXN0cnVjdCBnX2NvbnN1bWVyICpsY3A7CiAJc3RydWN0IGdfbXVsdGlw
YXRoX3NvZnRjICpzYyA9IGdwLT5zb2Z0YzsKIAogCWdfdG9wb2xvZ3lfYXNzZXJ0KCk7Ci0JaWYg
KHNjID09IE5VTEwpCi0JCXJldHVybiAoRU5YSU8pOworCUtBU1NFUlQoc2MgIT0gTlVMTCwgKCJO
VUxMIHNjIikpOwogCUxJU1RfRk9SRUFDSChsY3AsICZncC0+Y29uc3VtZXIsIGNvbnN1bWVyKSB7
Ci0JCWlmICgobGNwLT5pbmRleCAmIE1QX0JBRCkgPT0gMCkgeworCQlpZiAoKGxjcC0+aW5kZXgg
JiAoTVBfQkFEfE1QX1BPU1RFRCkpID09IDApIHsKIAkJCWlmIChzYy0+Y3BfYWN0aXZlICE9IGxj
cCkgewogCQkJCWJyZWFrOwogCQkJfQpAQCAtNDMwLDcgKzQzOSw2IEBACiAJCXByaW50ZigiR0VP
TV9NVUxUSVBBVEg6ICVzIG5vdyBhY3RpdmUgcGF0aCBpbiAlc1xuIiwKIAkJICAgIGxjcC0+cHJv
dmlkZXItPm5hbWUsIHNjLT5zY19uYW1lKTsKIAl9Ci0JcmV0dXJuICgwKTsKIH0KIAogc3RhdGlj
IHZvaWQKQEAgLTcxNSw3ICs3MjMsNiBAQAogewogCXN0cnVjdCBnX2dlb20gKmdwOwogCWNvbnN0
IGNoYXIgKm5hbWU7Ci0JaW50IGVycm9yOwogCiAJZ190b3BvbG9neV9hc3NlcnQoKTsKIApAQCAt
NzI5LDEwICs3MzYsMTEgQEAKIAkJZ2N0bF9lcnJvcihyZXEsICJEZXZpY2UgJXMgaXMgaW52YWxp
ZCIsIG5hbWUpOwogCQlyZXR1cm47CiAJfQotCWVycm9yID0gZ19tdWx0aXBhdGhfcm90YXRlKGdw
KTsKLQlpZiAoZXJyb3IgIT0gMCkgewotCQlnY3RsX2Vycm9yKHJlcSwgImZhaWxlZCB0byByb3Rh
dGUgJXMgKGVycj0lZCkiLCBuYW1lLCBlcnJvcik7CisJaWYgKGdwLT5zb2Z0YyA9PSBOVUxMKSB7
CisJCWdjdGxfZXJyb3IocmVxLCAiRGV2aWNlICVzIG5vdCBmdWxseSBpbml0aWFsaXplZCIsIG5h
bWUpOworCQlyZXR1cm47CiAJfQorCWdfbXVsdGlwYXRoX3JvdGF0ZShncCk7CiB9CiAKIHN0YXRp
YyB2b2lkCg==
--20cf30549dc5ccaf1a0494b8e13d--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTi=B2Gniv3RDmLexN8Br8W0Q4t=V_0A57XPkQe4g>