From 7c066f7d6d72154d0f5ef746b14190a5ad54421b Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Mon, 6 Feb 2012 17:37:01 +0100 Subject: [ALL] Request latest available rid --- src/client/client.c | 12 ++++++------ src/kernel/net.c | 4 ++-- src/server/utils.c | 19 ++++++++++++++----- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/client/client.c b/src/client/client.c index 723e650..0bb4a5b 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -35,17 +35,17 @@ char *_config_file_name = DEFAULT_CLIENT_CONFIG_FILE; void dnbd3_print_help(char* argv_0) { printf( - "Usage: %s -h -p -v -r -d || -f || -c \n", + "Usage: %s -h -p -v [-r ] -d || -f || -c \n", argv_0); printf("Start the DNBD3 client.\n"); printf("-f or --file \t\t Configuration file (default /etc/dnbd3-client.conf)\n"); printf("-h or --host \t\t Host running dnbd3-server.\n"); printf("-p or --port \t\t Port used by server.\n"); printf("-v or --vid \t\t Volume-ID of exported image.\n"); - printf("-r or --rid \t\t Release-ID of exported image.\n"); + printf("-r or --rid \t\t Release-ID of exported image (if 0 latest available rid will be used).\n"); printf("-d or --device \t\t DNBD3 device name.\n"); printf("-c or --close \t\t Disconnect and close device.\n"); - printf("-s or --switch \t Switch dnbd3-server on device (DEBUG).\n"); + printf("-s or --switch \t\t Switch dnbd3-server on device (DEBUG).\n"); printf("-H or --help \t\t Show this help text and quit.\n"); printf("-V or --version \t Show version and quit.\n"); exit(EXIT_SUCCESS); @@ -132,7 +132,7 @@ int main(int argc, char *argv[]) } // close device - if (close_dev && !msg.host && dev && !msg.port && (msg.vid == 0) && (msg.rid == 0)) + if (close_dev && !msg.host && dev && !msg.port && (msg.vid == 0)) { fd = open(dev, O_WRONLY); printf("INFO: Closing device %s\n", dev); @@ -145,7 +145,7 @@ int main(int argc, char *argv[]) } // switch host - if (switch_host && msg.host && dev && !msg.port && (msg.vid == 0) && (msg.rid == 0)) + if (switch_host && msg.host && dev && !msg.port && (msg.vid == 0)) { fd = open(dev, O_WRONLY); printf("INFO: Switching device %s to %s\n", dev, msg.host); @@ -158,7 +158,7 @@ int main(int argc, char *argv[]) } // connect - if (msg.host && msg.port && dev && (msg.vid != 0) && (msg.rid != 0)) + if (msg.host && msg.port && dev && (msg.vid != 0)) { fd = open(dev, O_WRONLY); printf("INFO: Connecting %s to %s:%s vid:%i rid:%i\n", dev, msg.host, msg.port, msg.vid, msg.rid); diff --git a/src/kernel/net.c b/src/kernel/net.c index d955dc1..a90dfb8 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -29,9 +29,9 @@ void dnbd3_net_connect(dnbd3_device_t *lo) dnbd3_request_t dnbd3_request; dnbd3_reply_t dnbd3_reply; - if (!lo->host || !lo->port || (lo->vid == 0) || (lo->rid == 0)) + if (!lo->host || !lo->port || (lo->vid == 0)) { - printk("ERROR: Host, port, vid or rid not set.\n"); + printk("ERROR: Host, port or vid not set.\n"); return; } diff --git a/src/server/utils.c b/src/server/utils.c index 67d91c9..34da129 100644 --- a/src/server/utils.c +++ b/src/server/utils.c @@ -76,14 +76,23 @@ void dnbd3_reload_config(char* config_file_name) dnbd3_image_t* dnbd3_get_image(int vid, int rid) { - // TODO: find better data structure + int i, max = 0; dnbd3_image_t *result = NULL; - int i; for (i = 0; i < _num_images; ++i) { - if (_images[i].vid == vid && _images[i].rid == rid) - result = &_images[i]; - + if (rid != 0) // rid was specified + { + if (_images[i].vid == vid && _images[i].rid == rid) + result = &_images[i]; + } + else // search max. rid available + { + if (_images[i].vid == vid && _images[i].rid > max) + { + result = &_images[i]; + max = _images[i].rid; + } + } } return result; } -- cgit v1.2.3-55-g7522