[sheepdog] [PATCH v3 3/3] bs_sheepdog.c: test connection when new logical unit is created
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Thu Oct 17 09:38:34 CEST 2013
This patch adds creation of a test connection in the process of making
logical unit. This is required for validating --backing-store option
and avoid forever trying of reconnection.
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
v3: return error when --backing-store is invalid form
usr/bs_sheepdog.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/usr/bs_sheepdog.c b/usr/bs_sheepdog.c
index de66d59..1eb09c0 100644
--- a/usr/bs_sheepdog.c
+++ b/usr/bs_sheepdog.c
@@ -909,7 +909,7 @@ out:
static int sd_open(struct sheepdog_access_info *ai, char *filename, int flags)
{
- int ret = 0, i, len;
+ int ret = 0, i, len, fd;
uint32_t vid = 0;
char *orig_filename;
@@ -973,6 +973,15 @@ static int sd_open(struct sheepdog_access_info *ai, char *filename, int flags)
parse_state = EXPECT_PORT;
break;
case EXPECT_PORT:
+ len = strlen(result);
+ for (i = 0; i < len; i++) {
+ if (!isdigit(result[i])) {
+ eprintf("invalid tcp port number:"\
+ " %s\n", result);
+ return -1;
+ }
+ }
+
ai->port = atoi(result);
parse_state = EXPECT_VDI;
break;
@@ -999,6 +1008,7 @@ trans_to_expect_nothing:
eprintf("invalid VDI path of sheepdog, unexpected"\
" token: %s (entire: %s)\n",
result, orig_filename);
+ ret = -1;
goto out;
default:
eprintf("BUG: invalid state of parser: %d\n",
@@ -1011,6 +1021,7 @@ trans_to_expect_nothing:
parse_state != EXPECT_TAG_OR_SNAP) {
eprintf("invalid VDI path of sheepdog: %s (state: %d)\n",
orig_filename, parse_state);
+ ret = -1;
goto out;
}
@@ -1020,6 +1031,26 @@ trans_to_expect_nothing:
else
dprintf("hostname: %s, port: %d\n", ai->hostname, ai->port);
+ /*
+ * test connection for validating command line option
+ *
+ * if this step is skipped, the main thread of tgtd will try to
+ * reconnect to sheep process forever
+ */
+ fd = ai->is_unix ?
+ connect_to_sdog_unix(ai->uds_path) :
+ connect_to_sdog_tcp(ai->hostname, ai->port);
+
+ if (fd < 0) {
+ eprintf("connecting to sheep process failed, "\
+ "please verify the --backing-store option: %s",
+ orig_filename);
+ ret = -1;
+ goto out;
+ }
+
+ close(fd); /* we don't need this connection */
+
if (snapid == -1)
dprintf("tag: %s\n", tag);
else
--
1.7.10.4
More information about the sheepdog
mailing list