Module Name: src
Committed By: sborrill
Date: Tue Feb 22 13:04:31 UTC 2011
Modified Files:
src/external/bsd/iscsi/dist/src/initiator: iscsi-initiator.c
Log Message:
Retry read capacity. Device may not be ready on first access, so need to
wait and re-issue. From Daisuke Aoyama (author of istgt).
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c
diff -u src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c:1.6 src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c:1.7
--- src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c:1.6 Mon Feb 21 17:48:43 2011
+++ src/external/bsd/iscsi/dist/src/initiator/iscsi-initiator.c Tue Feb 22 13:04:31 2011
@@ -701,8 +701,22 @@
}
/* stuff size into st.st_size */
- (void) read_capacity(u, 0, &lbac, &blocksize);
- sti.st.st_size = ((uint64_t)lbac + 1) * blocksize;
+ {
+ int retry = 5;
+ while (retry > 0) {
+ if (read_capacity(u, 0, &lbac, &blocksize) == 0)
+ break;
+ retry--;
+ iscsi_warn(__FILE__, __LINE__,
+ "read_capacity failed - retrying %d\n", retry);
+ sleep(1);
+ }
+ if (retry == 0) {
+ iscsi_err(__FILE__, __LINE__, "read_capacity failed - giving up\n");
+ break;
+ }
+ }
+ sti.st.st_size = (off_t)(((uint64_t)lbac + 1) * blocksize);
sti.target = u;
tv.v[tv.c].host = strdup(tinfo.name);