summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghu Krishnamurthy <rk@daterainc.com>2015-01-28 21:53:55 -0800
committerRaghu Krishnamurthy <rk@daterainc.com>2015-01-28 21:53:55 -0800
commitb0ed54d843e4034988dea2a596bac8d2601f116e (patch)
tree14e2667072c96f3d87d87f2fd3713c7a0637f5d9
parent38aa84d04bcd47bb832c3b7ec1e40be9d3c38c69 (diff)
Do not stop scanning on a cache-device link is missing since
it might not exists when a cache disk device is removed and further cache device might be active. Also handle the case where cache set might not be registered and the status should just believe what the super block says and not mark the disk as missing. This part of code needs optimization but that is a separate change. Issue DAT-1859 Issue DAT-1860 Change-Id: I7eb8e8ff517eae240fde30c70b3ac90aa9a50ed6
-rw-r--r--bcacheadm.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/bcacheadm.c b/bcacheadm.c
index 6ffceaa..ee1a7d8 100644
--- a/bcacheadm.c
+++ b/bcacheadm.c
@@ -613,7 +613,7 @@ int bcache_query_devs(NihCommand *command, char *const *args)
int bcache_status(NihCommand *command, char *const *args)
{
- int i, dev_count = 0, seq;
+ int i, dev_count = 0, seq, cache_count = 0;
struct cache_sb *seq_sb = NULL;
char cache_path[MAX_PATH];
char *dev_names[MAX_DEVS];
@@ -653,7 +653,7 @@ int bcache_status(NihCommand *command, char *const *args)
* Get a list of all the devices from sysfs first, then
* compare it to the list we get back from the most up
* to date superblock. If there are any devices in the superblock
- * that are not in sysfs, print out 'NOT PRESENT'
+ * that are not in sysfs, print out 'missing'
*/
while (true) {
char buf[MAX_PATH];
@@ -661,9 +661,12 @@ int bcache_status(NihCommand *command, char *const *args)
DIR *cache_dir;
if(((cache_dir = opendir(cache_path)) == NULL) &&
- dev_count < MAX_DEVS)
+ cache_count > MAX_DEVS)
break;
+ if (cache_dir)
+ closedir(cache_dir);
+
if((len = readlink(cache_path, buf, sizeof(buf) - 1)) != -1) {
struct cache_sb *sb;
char dev_uuid[40];
@@ -682,15 +685,13 @@ int bcache_status(NihCommand *command, char *const *args)
free(sb);
dev_uuids[dev_count] = strdup(dev_uuid);
- } else {
- dev_uuids[dev_count] = strdup("Nothing");
- dev_names[dev_count] = strdup("Nothing");
+ dev_count++;
}
cache_path[strlen(cache_path) - strlen(intbuf)] = 0;
- dev_count++;
+ cache_count++;
- snprintf(intbuf, 4, "%d", dev_count);
+ snprintf(intbuf, 4, "%d", cache_count);
strcat(cache_path, intbuf);
}
@@ -701,18 +702,15 @@ int bcache_status(NihCommand *command, char *const *args)
int j;
uuid_unparse(m->uuid.b, uuid_str);
+ snprintf(dev_state, MAX_PATH, "%s",
+ cache_state[CACHE_STATE(m)]);
for (j = 0; j < dev_count; j++) {
if (!strcmp(uuid_str, dev_uuids[j])) {
- snprintf(dev_state, MAX_PATH, "%s",
- cache_state[CACHE_STATE(m)]);
break;
} else if (j == dev_count - 1) {
if (!strcmp(cache_state[CACHE_STATE(m)], "active"))
snprintf(dev_state, MAX_PATH, "%s", "missing");
- else
- snprintf(dev_state, MAX_PATH, "%s",
- cache_state[CACHE_STATE(m)]);
break;
}
}