From owner-freebsd-geom@FreeBSD.ORG Wed Nov 10 21:12:17 2010 Return-Path: Delivered-To: freebsd-geom@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 34C8510656A7 for ; Wed, 10 Nov 2010 21:12:17 +0000 (UTC) (envelope-from osharoiko@gmail.com) Received: from mail-gx0-f182.google.com (mail-gx0-f182.google.com [209.85.161.182]) by mx1.freebsd.org (Postfix) with ESMTP id E3BDB8FC13 for ; Wed, 10 Nov 2010 21:12:16 +0000 (UTC) Received: by gxk9 with SMTP id 9so783283gxk.13 for ; Wed, 10 Nov 2010 13:12:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=/Zy2zqN2XP/B8o8MTMphaH6WZDFIyCHGYIJNEc9TrMY=; b=IIKUkaS0T4qgNC0Dq/nfyqAkAu817U34hVxnfjV2g+YUNXdwEySxXrvqagby3Xb41X HQE6JU1QSUkOnXI8YJ14+GAKDZSx4oRw9KHALbxnWxmA+iuZ7jO8S+YetwU94Yo6z1fW sV5PiitUzCFIlsbQUOx6AYoK7aPKC4fsMdaoA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=fXTNZ4gwxtSz9zpl/u4kSZ2PTic6Dl37L/mw+VvNaGvbiHtpO31+oImwZpk3eaqTxA 7h4KrHqMQEsxv/lKagVJcM/2qTb7TKXjHfxxL3Jn+Ak0ESy82fZyWPq0viop9+9CjHCw ZUYkrU9s005PT8CSxqhaLRURJ+20lM11e3dGY= MIME-Version: 1.0 Received: by 10.42.226.132 with SMTP id iw4mr2011icb.351.1289421690023; Wed, 10 Nov 2010 12:41:30 -0800 (PST) Received: by 10.229.29.12 with HTTP; Wed, 10 Nov 2010 12:41:29 -0800 (PST) Date: Wed, 10 Nov 2010 23:41:29 +0300 Message-ID: From: Oleg Sharoyko To: mjacob@freebsd.org, freebsd-geom@freebsd.org Content-Type: multipart/mixed; boundary=20cf30549dc5ccaf1a0494b8e13d Cc: Subject: [patch] [geom_multipath] detached device used as an active path X-BeenThere: freebsd-geom@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: GEOM-specific discussions and implementations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Nov 2010 21:12:17 -0000 --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--