summaryrefslogtreecommitdiffstats
path: root/src/server/utils.c
diff options
context:
space:
mode:
authorJohann Latocha2012-02-06 17:37:01 +0100
committerJohann Latocha2012-02-06 17:37:01 +0100
commit7c066f7d6d72154d0f5ef746b14190a5ad54421b (patch)
treefce14eed881524af6346577232126b97001bb476 /src/server/utils.c
parent[KERNEL] Segfault at closing device fixed (diff)
downloaddnbd3-7c066f7d6d72154d0f5ef746b14190a5ad54421b.tar.gz
dnbd3-7c066f7d6d72154d0f5ef746b14190a5ad54421b.tar.xz
dnbd3-7c066f7d6d72154d0f5ef746b14190a5ad54421b.zip
[ALL] Request latest available rid
Diffstat (limited to 'src/server/utils.c')
-rw-r--r--src/server/utils.c19
1 files changed, 14 insertions, 5 deletions
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;
}