From mboxrd@z Thu Jan 1 00:00:00 1970 From: "gordongong0350@gmail.com" Subject: [tapdisk2][PATCH1/1] Fix vreq with error of -EBUSY fails 100 times too soon Date: Fri, 28 Feb 2014 20:37:06 +0800 Message-ID: <201402282037028705182@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6271216277323262865==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: "ian.jackson" , "ian.campbell" , "stefano.stabellini" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --===============6271216277323262865== Content-Type: multipart/alternative; boundary="----=_001_NextPart476321248375_=----" This is a multi-part message in MIME format. ------=_001_NextPart476321248375_=---- Content-Type: text/plain; charset="GB2312" Content-Transfer-Encoding: base64 CgoKCgoKRml4IHZyZXEgd2l0aCBlcnJvciBvZiAtRUJVU1kgZmFpbHMgMTAwIHRpbWVzIHRvbyBz b29uLCA/dGhhdD9yZXR1cm4gRUlPIHRvIHRkIGRldmljZSBsYXllci4gSWYgdGhpcyB0ZGRldmlj ZSByZXF1ZXN0IGlzIG1ldGFkYXRhIG9mIGZpbGVzeXN0ZW0sIHRoZSByZXN1bHQgaXMgbm90IGdv b2QgYXQgYWxsLgpUbyByZXByb2R1Y2UgaXQgd2l0Y2ggPyIuL2lvem9uZSAtSSAtcyAyRyAtciA1 MTJrIC1yIDFtIC1yIDJtIC1yIDRtIC1pIDAgLWkgMSAtZiAvZGF0YS9pb3pvbmVfdGVzdC50bXAi LHRoZSByZXN1bHQgaXMgaW5wdXQvb3V0cHV0IGVycm9yICYgaW96b25lIGlzIHN0b3BwZWQuCgoK CkZyb20gY2NjMGNlM2FlZGUxZjVjOTIwMDM2ODQ3ZGRiMTZiMjU5NjliZTdiYSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDFGcm9tOiBYaWFvZG9uZyBHb25nIDxnb3Jkb25nb25nMDM1MEBnbWFpbC5j b20+RGF0ZTogRnJpLCAyOCBGZWIgMjAxNCAwMzowMToxOSAtMDUwMFN1YmplY3Q6IFtQQVRDSF0g Zml4IHZyZXEgd2l0aCBlcnJvciBvZiAtRUJVU1kgZmFpbHMgMTAwIHRpbWVzIHRvbyBzb29uLD9y ZXR1cm4gRUlPIHRvIHRkIGRldmljZSBsYXllci4KMSkgYWxsIGZyZWUgbGlzdCBpcyBjb25zdW1l ZCBieSB2cmVxIGluIG9uZSBvciB0d28gYmxvY2sgdGhhdD8gP2lzIHNldGVkIGluIGJhdCBlbnRy eS4yKSB2cmVxIGluIGZhaWwgcXVldWUsIGdldCBhIGNoYW5jZSB0byBydW4gcXVpY2tseSwgc3Vj aCBhcyA5MHVzLi0tLT90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuYyB8IDE3ICsr KysrKysrKysrKysrLS0tP3Rvb2xzL2Jsa3RhcDIvZHJpdmVycy90YXBkaXNrLXZiZC5oIHwgPzEg Kz8yIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCmRpZmYg LS1naXQgYS90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuYyBiL3Rvb2xzL2Jsa3Rh cDIvZHJpdmVycy90YXBkaXNrLXZiZC5jaW5kZXggYzY2NWYyNy4uNTI5ZWI5MSAxMDA2NDQtLS0g YS90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuYysrKyBiL3Rvb2xzL2Jsa3RhcDIv ZHJpdmVycy90YXBkaXNrLXZiZC5jQEAgLTEwODEsNyArMTA4MSw3IEBAIHRhcGRpc2tfdmJkX2No ZWNrX3N0YXRlKHRkX3ZiZF90ICp2YmQpPwl0ZF92YmRfcmVxdWVzdF90ICp2cmVxLCAqdG1wOz8/ CXRhcGRpc2tfdmJkX2Zvcl9lYWNoX3JlcXVlc3QodnJlcSwgdG1wLCAmdmJkLT5mYWlsZWRfcmVx dWVzdHMpLQkJaWYgKHZyZXEtPm51bV9yZXRyaWVzID49IFREX1ZCRF9NQVhfUkVUUklFUykrCQlp ZiAodnJlcS0+bnVtX3JldHJpZXMgPj0gVERfVkJEX01BWF9SRVRSSUVTICYmIHZyZXEtPmJ1c3lf bG9vcGluZyAhPSAxICk/CQkJdGFwZGlza192YmRfY29tcGxldGVfdmJkX3JlcXVlc3QodmJkLCB2 cmVxKTs/PwlpZiAoIWxpc3RfZW1wdHkoJnZiZC0+bmV3X3JlcXVlc3RzKSB8fEBAIC0xMTY4LDcg KzExNjgsNyBAQCB0YXBkaXNrX3ZiZF9jb21wbGV0ZV92YmRfcmVxdWVzdCh0ZF92YmRfdCAqdmJk LCB0ZF92YmRfcmVxdWVzdF90ICp2cmVxKT97PwlpZiAoIXZyZXEtPnN1Ym1pdHRpbmcgJiYgIXZy ZXEtPnNlY3NfcGVuZGluZykgez8JCWlmICh2cmVxLT5zdGF0dXMgPT0gQkxLSUZfUlNQX0VSUk9S ICYmLQkJPz8gP3ZyZXEtPm51bV9yZXRyaWVzIDwgVERfVkJEX01BWF9SRVRSSUVTICYmKwkJPz8g Pyh2cmVxLT5udW1fcmV0cmllcyA8IFREX1ZCRF9NQVhfUkVUUklFUyB8fCB2cmVxLT5idXN5X2xv b3BpbmcgPT0gMSkmJj8JCT8/ID8hdGRfZmxhZ190ZXN0KHZiZC0+c3RhdGUsIFREX1ZCRF9ERUFE KSAmJj8JCT8/ID8hdGRfZmxhZ190ZXN0KHZiZC0+c3RhdGUsIFREX1ZCRF9TSFVURE9XTl9SRVFV RVNURUQpKT8JCQl0YXBkaXNrX3ZiZF9tb3ZlX3JlcXVlc3QodnJlcSwgJnZiZC0+ZmFpbGVkX3Jl cXVlc3RzKTtAQCAtMTQ1MCwxNyArMTQ1MCwyOCBAQCB0YXBkaXNrX3ZiZF9yZWlzc3VlX2ZhaWxl ZF9yZXF1ZXN0cyh0ZF92YmRfdCAqdmJkKT8JZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOz8/CXRh cGRpc2tfdmJkX2Zvcl9lYWNoX3JlcXVlc3QodnJlcSwgdG1wLCAmdmJkLT5mYWlsZWRfcmVxdWVz dHMpIHsrCQl1aW50NjRfdCBkZWx0YSA9IDA7Kz8JCWlmICh2cmVxLT5zZWNzX3BlbmRpbmcpPwkJ CWNvbnRpbnVlOz8/CQlpZiAodGRfZmxhZ190ZXN0KHZiZC0+c3RhdGUsIFREX1ZCRF9TSFVURE9X Tl9SRVFVRVNURUQpKT8JCQlnb3RvIGZhaWw7PysJCWlmICh2cmVxLT5udW1fcmV0cmllcyA+IFRE X1ZCRF9NQVhfUkVUUklFUyAtIDEwKSB7KwkJCWRlbHRhID0gKG5vdy50dl9zZWMgLSB2cmVxLT5s YXN0X3RyeS50dl9zZWMpICogMTAwMDAwMFwrCQkJCSsgbm93LnR2X3VzZWMgLSB2cmVxLT5sYXN0 X3RyeS50dl91c2VjOysJCQlpZiAoZGVsdGEgKiB2cmVxLT5udW1fcmV0cmllcyA8IFREX1ZCRF9S RVRSWV9JTlRFUlZBTCkrCQkJCXZyZXEtPmJ1c3lfbG9vcGluZyA9IDE7KwkJCWVsc2UrCQkJCXZy ZXEtPmJ1c3lfbG9vcGluZyA9IDA7KwkJfSs/CQlpZiAodnJlcS0+ZXJyb3IgIT0gLUVCVVNZICYm PwkJPz8gP25vdy50dl9zZWMgLSB2cmVxLT5sYXN0X3RyeS50dl9zZWMgPCBURF9WQkRfUkVUUllf SU5URVJWQUwpPwkJCWNvbnRpbnVlOz8tCQlpZiAodnJlcS0+bnVtX3JldHJpZXMgPj0gVERfVkJE X01BWF9SRVRSSUVTKSB7KwkJaWYgKHZyZXEtPm51bV9yZXRyaWVzID49IFREX1ZCRF9NQVhfUkVU UklFUyAmJiB2cmVxLT5idXN5X2xvb3BpbmcgIT0gMSkgez8JCWZhaWw6PwkJCURCRyhUTE9HX0lO Rk8sICJyZXEgJSJQUkl1NjQicmV0cmllZCAlZCB0aW1lc1xuIiw/CQkJPz8gP3ZyZXEtPnJlcS5p ZCwgdnJlcS0+bnVtX3JldHJpZXMpO2RpZmYgLS1naXQgYS90b29scy9ibGt0YXAyL2RyaXZlcnMv dGFwZGlzay12YmQuaCBiL3Rvb2xzL2Jsa3RhcDIvZHJpdmVycy90YXBkaXNrLXZiZC5oaW5kZXgg YmUwODRiMi4uOWU1ZjVmNiAxMDA2NDQtLS0gYS90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlz ay12YmQuaCsrKyBiL3Rvb2xzL2Jsa3RhcDIvZHJpdmVycy90YXBkaXNrLXZiZC5oQEAgLTczLDYg KzczLDcgQEAgc3RydWN0IHRkX3ZiZF9yZXF1ZXN0IHs/CWludCA/ID8gPyA/ID8gPyA/ID8gPyA/ ID8gPyBzdWJtaXR0aW5nOz8JaW50ID8gPyA/ID8gPyA/ID8gPyA/ID8gPyA/IHNlY3NfcGVuZGlu Zzs/CWludCA/ID8gPyA/ID8gPyA/ID8gPyA/ID8gPyBudW1fcmV0cmllczsrCWludCA/ID8gPyA/ ID8gPyA/ID8gPyA/ID8gPyBidXN5X2xvb3Bpbmc7PwlzdHJ1Y3QgdGltZXZhbCA/ID8gPyA/ID8g PyA/bGFzdF90cnk7Pz8JdGRfdmJkX3QgPyA/ID8gPyA/ID8gPyA/ID8gKnZiZDstLT8xLjguMy4x CgoKZ29yZG9uZ29uZzAzNTBAZ21haWwuY29tCgo= ------=_001_NextPart476321248375_=---- Content-Type: text/html; charset="GB2312" Content-Transfer-Encoding: quoted-printable =0A
Fix vreq wit= h error of -EBUSY fails 100 times too soon,  that return EIO to td device lay= er. If this td
device request is metadata of filesystem, = the result is not good at all.

the result is input= /output error & iozone is stopped.

<= /div>



From ccc0ce3aede1f5c920036847ddb16b25969be7ba Mon Sep 17 00:00:00 2001
From: Xia= odong Gong <gordongong0350@gmail.com>
Date: Fri, 28 Feb 2014 03:01:19 -0500
Subject: [PATCH] fix vreq with error of -EBUSY fails 100 times too= soon,
 return EIO to td device layer.

1) all free list is consumed b= y vreq in one or two block that
   is set= ed in bat entry.
2) vreq in fail queue, get a chanc= e to run quickly, such as 90us.
---
 tools/blktap2/drivers/tapdisk-vbd.c | 17 +++++++= +++++++---
 tools/blktap2/drivers/tapdi= sk-vbd.h |  1 +
 2 files changed, 15= insertions(+), 3 deletions(-)

diff --git a/tools/blktap2/drivers/tapdisk-vbd.c b/too= ls/blktap2/drivers/tapdisk-vbd.c
index = c665f27..529eb91 100644
--- a/tools/blktap2/drivers= /tapdisk-vbd.c
+++ b/tools/blktap2/driv= ers/tapdisk-vbd.c
@@ -1081,7 +1081,7 @@= tapdisk_vbd_check_state(td_vbd_t *vbd)
  td_vbd_request_t *vr= eq, *tmp;
 
  tapdisk_vbd_for_each_request(= vreq, tmp, &vbd->failed_requests)
-= if (vreq->num_retries &= gt;=3D TD_VBD_MAX_RETRIES)
+ if (vreq->num_retries >=3D TD_VBD_MAX_RETRI= ES && vreq->busy_looping !=3D 1 )
 = tapdisk_vbd_complete_vbd_= request(vbd, vreq);
 
  if (!list_= empty(&vbd->new_requests) ||
@@ = -1168,7 +1168,7 @@ tapdisk_vbd_complete_vbd_request(td_vbd_t *= vbd, td_vbd_request_t *vreq)
 {
  if (!vreq-&g= t;submitting && !vreq->secs_pending) {
&= nbsp; if (vreq->status = =3D=3D BLKIF_RSP_ERROR &&
-     vreq->num_retries &l= t; TD_VBD_MAX_RETRIES &&
+     (vreq->num_retries &l= t; TD_VBD_MAX_RETRIES || vreq->busy_looping =3D=3D 1)&&
  &nbs= p;   !td_flag_test(vbd->state, TD_VBD_DEAD) &&
<= div style=3D"color: rgb(34, 34, 34); font-family: arial, sans-serif; line-= height: normal;">  &nb= sp;   !td_flag_test(vbd->state, TD_VBD_SHUTDOWN_REQUESTED))
  tapdisk_vbd_move_request(vreq, &vbd->failed_requests);
@@ -1450,17 +1450,28 @@ tapdisk_vbd_reissue_failed_re= quests(td_vbd_t *vbd)
  gettimeofday(&now, NULL);
 
  tapdisk_vbd_for_each_request(vreq, tmp, &= vbd->failed_requests) {
+ uint64_t delta =3D 0;
+
  if (vreq->secs_pending)
  continue;
 
  if (td_flag_test(vbd->state, TD_VBD_SHUTDOWN_REQUESTED))
  goto fail= ;
 
+ if (vreq->num_retries > TD_VBD_MAX_RET= RIES - 10) {
++ += now.tv_usec - vreq->last_try.tv_usec;
+ if (delta * vreq->num_retries = < TD_VBD_RETRY_INTERVAL)
+ vreq->busy_looping =3D 1;
+ else
+ vreq->bu= sy_looping =3D 0;
+ }
+
  if (vreq->error !=3D -EBU= SY &&
      now.tv_sec - vreq->last_try.tv_sec = < TD_VBD_RETRY_INTERVAL)
  continue;
 
- if (= vreq->num_retries >=3D TD_VBD_MAX_RETRIES) {
= + if (vreq->num_retries = >=3D TD_VBD_MAX_RETRIES && vreq->busy_looping !=3D 1) {
  f= ail:
  = DBG(TLOG_INFO, "req %"PRIu64"retried %d times\n",
    = ;  vreq->req.id, vreq->num_retries);
diff --git a/tools/blktap2/drivers/tapdisk-vbd.h b/too= ls/blktap2/drivers/tapdisk-vbd.h
index = be084b2..9e5f5f6 100644
--- a/tools/blktap2/drivers= /tapdisk-vbd.h
+++ b/tools/blktap2/driv= ers/tapdisk-vbd.h
@@ -73,6 +73,7 @@ str= uct td_vbd_request {
  int              = ;           submitting;
&n= bsp; int      = ;                   secs_pend= ing;
  = int                   =       num_retries;
+ int           &nbs= p;             busy_looping;
  struct timeva= l              last_try;
 
  td_vbd_t              = ;     *vbd;
<= div id=3D":vv" class=3D"ajR" role=3D"button" tabindex=3D"0" data-tooltip= =3D"=D2=FE=B2=D8=D5=B9=BF=AA=B5=C4=C4=DA=C8=DD" aria-label=3D"=D2=FE=B2=D8= =D5=B9=BF=AA=B5=C4=C4=DA=C8=DD" style=3D"background-color: rgb(241, 241, 2= 41); border: 1px solid rgb(221, 221, 221); clear: both; line-height: 6px; = outline: none; position: relative; width: 20px;">
-- 
1.8.3.1
=0A


=0A
gordon= gong0350@gmail.com
=0A ------=_001_NextPart476321248375_=------ --===============6271216277323262865== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============6271216277323262865==--