diff options
| -rw-r--r-- | drivers/md/dm-log-userspace-base.c | 16 | 
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/md/dm-log-userspace-base.c b/drivers/md/dm-log-userspace-base.c index 2f2a244e110..c49da0a41c8 100644 --- a/drivers/md/dm-log-userspace-base.c +++ b/drivers/md/dm-log-userspace-base.c @@ -111,10 +111,9 @@ static int build_constructor_string(struct dm_target *ti,  		return -ENOMEM;  	} -	for (i = 0, str_size = 0; i < argc; i++) -		str_size += sprintf(str + str_size, "%s ", argv[i]); -	str_size += sprintf(str + str_size, "%llu", -			    (unsigned long long)ti->len); +	str_size = sprintf(str, "%llu", (unsigned long long)ti->len); +	for (i = 0; i < argc; i++) +		str_size += sprintf(str + str_size, " %s", argv[i]);  	*ctr_str = str;  	return str_size; @@ -561,6 +560,7 @@ static int userspace_status(struct dm_dirty_log *log, status_type_t status_type,  			    char *result, unsigned maxlen)  {  	int r = 0; +	char *table_args;  	size_t sz = (size_t)maxlen;  	struct log_c *lc = log->context; @@ -577,8 +577,12 @@ static int userspace_status(struct dm_dirty_log *log, status_type_t status_type,  		break;  	case STATUSTYPE_TABLE:  		sz = 0; -		DMEMIT("%s %u %s %s ", log->type->name, lc->usr_argc + 1, -		       lc->uuid, lc->usr_argv_str); +		table_args = strstr(lc->usr_argv_str, " "); +		BUG_ON(!table_args); /* There will always be a ' ' */ +		table_args++; + +		DMEMIT("%s %u %s %s ", log->type->name, lc->usr_argc, +		       lc->uuid, table_args);  		break;  	}  	return (r) ? 0 : (int)sz;  |