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 22:50:23 +0800 Message-ID: <201402282250180185871@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7224567069689727295==" 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. --===============7224567069689727295== Content-Type: multipart/alternative; boundary="----=_001_NextPart306036843662_=----" This is a multi-part message in MIME format. ------=_001_NextPart306036843662_=---- Content-Type: text/plain; charset="GB2312" Content-Transfer-Encoding: base64 CkZpeCB2cmVxIHdpdGggZXJyb3Igb2YgLUVCVVNZIGZhaWxzIDEwMCB0aW1lcyB0b28gc29vbiwg P3RoYXQ/cmV0dXJuIEVJTyB0byB0ZCBkZXZpY2UgbGF5ZXIuIElmIHRoaXMgdGRkZXZpY2UgcmVx dWVzdCBpcyBtZXRhZGF0YSBvZiBmaWxlc3lzdGVtLCB0aGUgcmVzdWx0IGlzIG5vdCBnb29kIGF0 IGFsbC4KVG8gcmVwcm9kdWNlIGl0IHdpdGNoID8iLi9pb3pvbmUgLUkgLXMgMkcgLXIgNTEyayAt ciAxbSAtciAybSAtciA0bSAtaSAwIC1pIDEgLWYgL2RhdGEvaW96b25lX3Rlc3QudG1wIix0aGUg cmVzdWx0IGlzIGlucHV0L291dHB1dCBlcnJvciAmIGlvem9uZSBpcyBzdG9wcGVkLgoKCgpGcm9t IGNjYzBjZTNhZWRlMWY1YzkyMDAzNjg0N2RkYjE2YjI1OTY5YmU3YmEgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxRnJvbTogWGlhb2RvbmcgR29uZyA8Z29yZG9uZ29uZzAzNTBAZ21haWwuY29tPkRh dGU6IEZyaSwgMjggRmViIDIwMTQgMDM6MDE6MTkgLTA1MDBTdWJqZWN0OiBbUEFUQ0hdIGZpeCB2 cmVxIHdpdGggZXJyb3Igb2YgLUVCVVNZIGZhaWxzIDEwMCB0aW1lcyB0b28gc29vbiw/cmV0dXJu IEVJTyB0byB0ZCBkZXZpY2UgbGF5ZXIuCjEpIGFsbCBmcmVlIGxpc3QgaXMgY29uc3VtZWQgYnkg dnJlcSBpbiBvbmUgb3IgdHdvIGJsb2NrIHRoYXQ/ID9pcyBzZXRlZCBpbiBiYXQgZW50cnkuMikg dnJlcSBpbiBmYWlsIHF1ZXVlLCBnZXQgYSBjaGFuY2UgdG8gcnVuIHF1aWNrbHksIHN1Y2ggYXMg OTB1cy4tLS0/dG9vbHMvYmxrdGFwMi9kcml2ZXJzL3RhcGRpc2stdmJkLmMgfCAxNyArKysrKysr KysrKysrKy0tLT90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuaCB8ID8xICs/MiBm aWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0 IGEvdG9vbHMvYmxrdGFwMi9kcml2ZXJzL3RhcGRpc2stdmJkLmMgYi90b29scy9ibGt0YXAyL2Ry aXZlcnMvdGFwZGlzay12YmQuY2luZGV4IGM2NjVmMjcuLjUyOWViOTEgMTAwNjQ0LS0tIGEvdG9v bHMvYmxrdGFwMi9kcml2ZXJzL3RhcGRpc2stdmJkLmMrKysgYi90b29scy9ibGt0YXAyL2RyaXZl cnMvdGFwZGlzay12YmQuY0BAIC0xMDgxLDcgKzEwODEsNyBAQCB0YXBkaXNrX3ZiZF9jaGVja19z dGF0ZSh0ZF92YmRfdCAqdmJkKT8JdGRfdmJkX3JlcXVlc3RfdCAqdnJlcSwgKnRtcDs/Pwl0YXBk aXNrX3ZiZF9mb3JfZWFjaF9yZXF1ZXN0KHZyZXEsIHRtcCwgJnZiZC0+ZmFpbGVkX3JlcXVlc3Rz KS0JCWlmICh2cmVxLT5udW1fcmV0cmllcyA+PSBURF9WQkRfTUFYX1JFVFJJRVMpKwkJaWYgKHZy ZXEtPm51bV9yZXRyaWVzID49IFREX1ZCRF9NQVhfUkVUUklFUyAmJiB2cmVxLT5idXN5X2xvb3Bp bmcgIT0gMSApPwkJCXRhcGRpc2tfdmJkX2NvbXBsZXRlX3ZiZF9yZXF1ZXN0KHZiZCwgdnJlcSk7 Pz8JaWYgKCFsaXN0X2VtcHR5KCZ2YmQtPm5ld19yZXF1ZXN0cykgfHxAQCAtMTE2OCw3ICsxMTY4 LDcgQEAgdGFwZGlza192YmRfY29tcGxldGVfdmJkX3JlcXVlc3QodGRfdmJkX3QgKnZiZCwgdGRf dmJkX3JlcXVlc3RfdCAqdnJlcSk/ez8JaWYgKCF2cmVxLT5zdWJtaXR0aW5nICYmICF2cmVxLT5z ZWNzX3BlbmRpbmcpIHs/CQlpZiAodnJlcS0+c3RhdHVzID09IEJMS0lGX1JTUF9FUlJPUiAmJi0J CT8/ID92cmVxLT5udW1fcmV0cmllcyA8IFREX1ZCRF9NQVhfUkVUUklFUyAmJisJCT8/ID8odnJl cS0+bnVtX3JldHJpZXMgPCBURF9WQkRfTUFYX1JFVFJJRVMgfHwgdnJlcS0+YnVzeV9sb29waW5n ID09IDEpJiY/CQk/PyA/IXRkX2ZsYWdfdGVzdCh2YmQtPnN0YXRlLCBURF9WQkRfREVBRCkgJiY/ CQk/PyA/IXRkX2ZsYWdfdGVzdCh2YmQtPnN0YXRlLCBURF9WQkRfU0hVVERPV05fUkVRVUVTVEVE KSk/CQkJdGFwZGlza192YmRfbW92ZV9yZXF1ZXN0KHZyZXEsICZ2YmQtPmZhaWxlZF9yZXF1ZXN0 cyk7QEAgLTE0NTAsMTcgKzE0NTAsMjggQEAgdGFwZGlza192YmRfcmVpc3N1ZV9mYWlsZWRfcmVx dWVzdHModGRfdmJkX3QgKnZiZCk/CWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTs/Pwl0YXBkaXNr X3ZiZF9mb3JfZWFjaF9yZXF1ZXN0KHZyZXEsIHRtcCwgJnZiZC0+ZmFpbGVkX3JlcXVlc3RzKSB7 KwkJdWludDY0X3QgZGVsdGEgPSAwOys/CQlpZiAodnJlcS0+c2Vjc19wZW5kaW5nKT8JCQljb250 aW51ZTs/PwkJaWYgKHRkX2ZsYWdfdGVzdCh2YmQtPnN0YXRlLCBURF9WQkRfU0hVVERPV05fUkVR VUVTVEVEKSk/CQkJZ290byBmYWlsOz8rCQlpZiAodnJlcS0+bnVtX3JldHJpZXMgPiBURF9WQkRf TUFYX1JFVFJJRVMgLSAxMCkgeysJCQlkZWx0YSA9IChub3cudHZfc2VjIC0gdnJlcS0+bGFzdF90 cnkudHZfc2VjKSAqIDEwMDAwMDBcKwkJCQkrIG5vdy50dl91c2VjIC0gdnJlcS0+bGFzdF90cnku dHZfdXNlYzsrCQkJaWYgKGRlbHRhICogdnJlcS0+bnVtX3JldHJpZXMgPCBURF9WQkRfUkVUUllf SU5URVJWQUwpKwkJCQl2cmVxLT5idXN5X2xvb3BpbmcgPSAxOysJCQllbHNlKwkJCQl2cmVxLT5i dXN5X2xvb3BpbmcgPSAwOysJCX0rPwkJaWYgKHZyZXEtPmVycm9yICE9IC1FQlVTWSAmJj8JCT8/ ID9ub3cudHZfc2VjIC0gdnJlcS0+bGFzdF90cnkudHZfc2VjIDwgVERfVkJEX1JFVFJZX0lOVEVS VkFMKT8JCQljb250aW51ZTs/LQkJaWYgKHZyZXEtPm51bV9yZXRyaWVzID49IFREX1ZCRF9NQVhf UkVUUklFUykgeysJCWlmICh2cmVxLT5udW1fcmV0cmllcyA+PSBURF9WQkRfTUFYX1JFVFJJRVMg JiYgdnJlcS0+YnVzeV9sb29waW5nICE9IDEpIHs/CQlmYWlsOj8JCQlEQkcoVExPR19JTkZPLCAi cmVxICUiUFJJdTY0InJldHJpZWQgJWQgdGltZXNcbiIsPwkJCT8/ID92cmVxLT5yZXEuaWQsIHZy ZXEtPm51bV9yZXRyaWVzKTtkaWZmIC0tZ2l0IGEvdG9vbHMvYmxrdGFwMi9kcml2ZXJzL3RhcGRp c2stdmJkLmggYi90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuaGluZGV4IGJlMDg0 YjIuLjllNWY1ZjYgMTAwNjQ0LS0tIGEvdG9vbHMvYmxrdGFwMi9kcml2ZXJzL3RhcGRpc2stdmJk LmgrKysgYi90b29scy9ibGt0YXAyL2RyaXZlcnMvdGFwZGlzay12YmQuaEBAIC03Myw2ICs3Myw3 IEBAIHN0cnVjdCB0ZF92YmRfcmVxdWVzdCB7PwlpbnQgPyA/ID8gPyA/ID8gPyA/ID8gPyA/ID8g c3VibWl0dGluZzs/CWludCA/ID8gPyA/ID8gPyA/ID8gPyA/ID8gPyBzZWNzX3BlbmRpbmc7Pwlp bnQgPyA/ID8gPyA/ID8gPyA/ID8gPyA/ID8gbnVtX3JldHJpZXM7KwlpbnQgPyA/ID8gPyA/ID8g PyA/ID8gPyA/ID8gYnVzeV9sb29waW5nOz8Jc3RydWN0IHRpbWV2YWwgPyA/ID8gPyA/ID8gP2xh c3RfdHJ5Oz8/CXRkX3ZiZF90ID8gPyA/ID8gPyA/ID8gPyA/ICp2YmQ7LS0/MS44LjMuMQoKCmdv cmRvbmdvbmcwMzUwQGdtYWlsLmNvbQo= ------=_001_NextPart306036843662_=---- Content-Type: text/html; charset="GB2312" Content-Transfer-Encoding: quoted-printable =0A
Fix vreq with error of -EBUSY fails 100 times too soon,=  that return EIO to td device layer. If this td
device requ= est is metadata of filesystem, the result is not good at all.
=

To reproduce it witch  "./iozone -I = -s 2G -r 512k -r 1m -r 2m -r 4m -i 0 -i 1 -f /data/iozone_test.tmp",
the result is input/output error & iozone is stopped.




From ccc0c= e3aede1f5c920036847ddb16b25969be7ba Mon Sep 17 00:00:00 2001
From: Xiaodong Gong <gordo= ngong0350@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 E= IO to td device layer.

= 1) all free list is consumed by vreq in one or two block that
   is seted in bat entry.
2) v= req in fail queue, get a chance to run quickly, such as 90us.
---
 tools/blktap2/drivers/t= apdisk-vbd.c | 17 ++++++++++++++---
 tool= s/blktap2/drivers/tapdisk-vbd.h |  1 +
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/tools/blktap2/drivers/<= u>tapdisk-vbd.c b/tools/blktap2/drivers/tapdisk-vbd.c=
index c665f27..529eb91 100644
--- a/tools/blktap2/drivers/tapdisk-vbd.c
+++ b/tools/blktap2/drivers/tapdisk-vbd.c
@@ -1081,7 +1081,7 @@ tapdisk_vbd_check_state(td_vbd_t *vbd)
  td_vbd_request_t *vreq, *tmp;
 
  = tapdisk_vbd_for_each_request(vreq, tmp, &vbd->failed_re= quests)
- <= /span>if (vreq->num_retries >=3D TD_VBD_MAX_RETRIES)
+ if (vreq->num_= retries >=3D TD_VBD_MAX_RETRIES && vreq->busy_looping !=3D 1= )
  = tapdisk_vbd_complete_vbd_request(vbd, vreq);
 
  if (!list_empty(&vbd->new_request= s) ||
@@ -1168,7 +1168,7 @@ tapdisk_vbd_complete_vb= d_request(td_vbd_t *vbd, td_vbd_request_t *vreq)
 {
  if (!vreq->submitting && !vreq->secs_pen= ding) {
 -   = ;  vreq->num_retries < TD_VBD_MAX_RETRIES &&
+   =  (vreq->num_retries < TD_VBD_MAX_RETRIES || vreq->busy_loop= ing =3D=3D 1)&&
      !td_flag_test(vbd->state,= TD_VBD_DEAD) &&
      !td_flag_test(vbd->state= , TD_VBD_SHUTDOWN_REQUESTED))
  tapdisk_vbd_move_request(vreq, &vbd-= >failed_requests);
@@ -1450,17 +1450,28 @@ tapdi= sk_vbd_reissue_failed_requests(td_vbd_t *vbd)
  gettimeofday(= &now, NULL);
 
&nbs= p; tapdisk_vbd_for_each_requ= est(vreq, tmp, &vbd->failed_requests) {
+ uint64_t delta = =3D 0;
+
  if (vreq->secs_pending)
  contin= ue;
 
  if (td_flag_test(vbd->state, TD_VB= D_SHUTDOWN_REQUESTED))
  goto fail;
 
<= div style=3D"color: rgb(34, 34, 34); font-family: arial, sans-serif; line-= height: normal;">+ if (vreq= ->num_retries > TD_VBD_MAX_RETRIES - 10) {
+<= span style=3D"white-space: pre-wrap;"> delta =3D (now.tv_sec - vr= eq->last_try.tv_sec) * 1000000\
+ + now.tv_usec - vreq->last_try.tv_us= ec;
+ if (delta * vreq->num_retries < TD_VBD_RETRY_INTERVAL)
+ vreq->b= usy_looping =3D 1;
+ else
+ vreq->busy_looping =3D 0;
+ }
+
  <= /span>if (vreq->error !=3D -EBUSY &&
&nb= sp;     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 && vr= eq->busy_looping !=3D 1) {
  fail:
  DBG(TLOG_INFO, "req %"PRIu64"re= tried %d times\n",
      vreq->req.id, vreq-= >num_retries);
diff --git a/tools/blktap2/driver= s/tapdisk-vbd.h b/tools/blktap2/drivers/tapdisk-vb= d.h
index be084b2..9e5f5f6 100644
--- a/tools/blktap2/drivers/tapdisk-vbd.h
+++ b/tools/blktap2/drivers/tapdisk-vbd.h
@@ -73,6 +73,7 @@ struct td_vbd_request {
  int    = ;                     su= bmitting;
  int                 &n= bsp;       secs_pending;
  int         =                 num_retries;
=
+ int &nbs= p;                     &= nbsp; busy_looping;
  struct timeval           &n= bsp;  last_try;
 
=   td_vbd_t    = ;               *vbd;
-= - 
1.8.3.1
=0A
<= br>

=0A
gordongong0350@gmail.com
=
=0A ------=_001_NextPart306036843662_=------ --===============7224567069689727295== 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 --===============7224567069689727295==--