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>