Skip to content

Commit

Permalink
Merge pull request #3013 from marcinslusarz/1.4-fixes
Browse files Browse the repository at this point in the history
Next round of fixes for 1.4
  • Loading branch information
marcinslusarz authored Jun 21, 2018
2 parents a90c14b + 8d5cc14 commit eff7490
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 12 deletions.
18 changes: 8 additions & 10 deletions src/libpmempool/transform.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ check_if_remote_replica_used_once(struct pool_set *set, unsigned repn)
if (strcmp(rep->node_addr, repr->node_addr) == 0 &&
strcmp(rep->pool_desc, repr->pool_desc) == 0) {
ERR("remote replica %u is used multiple times", repn);
errno = EINVAL;
return -1;
}
}
Expand Down Expand Up @@ -205,7 +206,8 @@ validate_args(struct pool_set *set_in, struct pool_set *set_out)

if (set_in->directory_based) {
ERR("transform of directory poolsets is not supported");
goto err;
errno = EINVAL;
return -1;
}

/*
Expand All @@ -214,15 +216,15 @@ validate_args(struct pool_set *set_in, struct pool_set *set_out)
*/
if (replica_check_part_sizes(set_out, PMEMOBJ_MIN_POOL)) {
ERR("part sizes check failed");
goto err;
return -1;
}

/*
* check if all directories for part files exist and if part files
* do not reoccur in the poolset
*/
if (check_paths(set_out))
goto err;
return -1;

/*
* check if set_out has enough size, i.e. if the target poolset
Expand All @@ -232,20 +234,16 @@ validate_args(struct pool_set *set_in, struct pool_set *set_out)
ssize_t master_pool_size = replica_get_pool_size(set_in, 0);
if (master_pool_size < 0) {
ERR("getting pool size from master replica failed");
goto err;
return -1;
}

if (set_out->poolsize < (size_t)master_pool_size) {
ERR("target poolset is too small");
goto err;
errno = EINVAL;
return -1;
}

return 0;

err:
if (errno == 0)
errno = EINVAL;
return -1;
}

/*
Expand Down
4 changes: 3 additions & 1 deletion src/test/pmem_valgr_simple/TEST0
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ truncate -s 4M $DIR/testfile1
expect_normal_exit ./pmem_valgr_simple$EXESUFFIX\
$DIR/testfile1 60 8

check
# disable in 1.4 because this test can fail on pre-Skylake CPUs with
# the latest pmemcheck
#check

pass
76 changes: 75 additions & 1 deletion src/test/tools/pmemobjcli/pmemobjcli.c
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,10 @@ pocli_pmemobj_next(struct pocli_ctx *ctx, struct pocli_args *args)
if (ret)
return ret;

if (oidp == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

oidp_next = pmemobj_next(*oidp);

pocli_printf(ctx, "%s(%p): off = 0x%llx uuid = 0x%llx\n",
Expand Down Expand Up @@ -844,6 +848,10 @@ pocli_pmemobj_memcpy_persist(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_number(args, 2, &offset)))
return ret;

if (dest == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

char *dest_p = (char *)pmemobj_direct(*dest);
dest_p += offset;

Expand All @@ -852,6 +860,10 @@ pocli_pmemobj_memcpy_persist(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_number(args, 4, &offset)))
return ret;

if (src == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[3]);

char *src_p = (char *)pmemobj_direct(*src);
src_p += offset;

Expand Down Expand Up @@ -886,6 +898,10 @@ pocli_pmemobj_memset_persist(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_number(args, 2, &offset)))
return ret;

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

char *dest_p = (char *)pmemobj_direct(*oid);
dest_p += offset;

Expand All @@ -894,6 +910,10 @@ pocli_pmemobj_memset_persist(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_number(args, 4, &len)))
return ret;

if (len == UINT64_MAX)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[4]);

void *result = pmemobj_memset_persist(ctx->pop, dest_p, (int)c, len);

pocli_printf(ctx, "%s(%p, %u, %d): ptr = %p\n",
Expand Down Expand Up @@ -922,6 +942,11 @@ pocli_pmemobj_do_persist(struct pocli_ctx *ctx, struct pocli_args *args,
return ret;
if ((ret = pocli_args_number(args, 2, &offset)))
return ret;

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

char *dest_p = (char *)pmemobj_direct(*oid);
dest_p += offset;

Expand Down Expand Up @@ -988,6 +1013,11 @@ pocli_pmemobj_pool_by_ptr(struct pocli_ctx *ctx, struct pocli_args *args)
return ret;
if ((ret = pocli_args_number(args, 2, &offset)))
return ret;

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

char *dest_p = (char *)pmemobj_direct(*oid);
dest_p += offset;

Expand All @@ -1013,6 +1043,11 @@ pocli_pmemobj_pool_by_oid(struct pocli_ctx *ctx, struct pocli_args *args)

if ((ret = pocli_args_obj(ctx, args, 1, &oid)))
return ret;

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

PMEMobjpool *pop = pmemobj_pool_by_oid(*oid);

pocli_printf(ctx, "%s(%p): uuid = 0x%llx\n",
Expand Down Expand Up @@ -1042,6 +1077,10 @@ pocli_pmemobj_list_insert(struct pocli_ctx *ctx, struct pocli_args *args)
if (pocli_args_obj(ctx, args, 2, &head_oid))
return ret;

if (head_oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[2]);

struct plist *head = (struct plist *)pmemobj_direct(*head_oid);

if ((ret = pocli_args_list_elm(ctx, args, 3, &dest, head)))
Expand All @@ -1055,6 +1094,10 @@ pocli_pmemobj_list_insert(struct pocli_ctx *ctx, struct pocli_args *args)
return pocli_err(ctx, POCLI_ERR_ARGS,
"Before flag different than 0 or 1\n");

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

int r = pmemobj_list_insert(ctx->pop, offsetof(struct item, field),
head, *dest, (int)before, *oid);
if (r != POCLI_RET_OK)
Expand Down Expand Up @@ -1094,6 +1137,10 @@ pocli_pmemobj_list_insert_new(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_obj(ctx, args, 2, &head_oid)))
return ret;

if (head_oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[2]);

struct plist *head = (struct plist *)pmemobj_direct(*head_oid);

if ((ret = pocli_args_list_elm(ctx, args, 3, &dest, head)))
Expand Down Expand Up @@ -1145,6 +1192,10 @@ pocli_pmemobj_list_remove(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_obj(ctx, args, 2, &head_oid)))
return ret;

if (head_oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[2]);

struct plist *head = (struct plist *)pmemobj_direct(*head_oid);

if ((ret = pocli_args_list_elm(ctx, args, 1, &oid, head)))
Expand All @@ -1156,6 +1207,10 @@ pocli_pmemobj_list_remove(struct pocli_ctx *ctx, struct pocli_args *args)
return pocli_err(ctx, POCLI_ERR_ARGS,
"Free flag different than 0 or 1\n");

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

void *oidp = pmemobj_direct(*oid);
int r = pmemobj_list_remove(ctx->pop, offsetof(struct item, field),
head, *oid, (int)if_free);
Expand Down Expand Up @@ -1190,11 +1245,19 @@ pocli_pmemobj_list_move(struct pocli_ctx *ctx, struct pocli_args *args)
if ((ret = pocli_args_obj(ctx, args, 2, &head_oid)))
return ret;

if (head_oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[2]);

struct plist *head_src = (struct plist *)pmemobj_direct(*head_oid);

if ((ret = pocli_args_obj(ctx, args, 3, &head_oid)))
return ret;

if (head_oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[3]);

struct plist *head_dest = (struct plist *)pmemobj_direct(*head_oid);

if ((ret = pocli_args_list_elm(ctx, args, 1, &oid, head_src)))
Expand All @@ -1211,6 +1274,10 @@ pocli_pmemobj_list_move(struct pocli_ctx *ctx, struct pocli_args *args)
return pocli_err(ctx, POCLI_ERR_ARGS,
"Before flag different than 0 or 1\n");

if (oid == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

int r = pmemobj_list_move(ctx->pop, offset, head_src, offset, head_dest,
*dest, (int)before, *oid);
if (r != POCLI_RET_OK)
Expand Down Expand Up @@ -1328,7 +1395,6 @@ pocli_pmemobj_tx_abort(struct pocli_ctx *ctx, struct pocli_args *args)
return POCLI_ERR_PARS;

ctx->tx_aborted = true;
free(args);
pmemobj_tx_abort(err);
pocli_printf(ctx, "pmemobj_tx_abort: %d", err);

Expand Down Expand Up @@ -1568,6 +1634,10 @@ pocli_pmemobj_tx_free(struct pocli_ctx *ctx, struct pocli_args *args)
return pocli_err(ctx, POCLI_ERR_ARGS,
"cannot free root object\n");

if (oidp == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

int r = pmemobj_tx_free(*oidp);
if (r != POCLI_RET_OK)
return pocli_err(ctx, POCLI_ERR_ARGS,
Expand Down Expand Up @@ -1605,6 +1675,10 @@ pocli_pmemobj_tx_strdup(struct pocli_ctx *ctx, struct pocli_args *args)
if (ret)
return ret;

if (oidp == NULL)
return pocli_err(ctx, POCLI_ERR_ARGS,
"invalid object -- '%s'\n", args->argv[1]);

*oidp = pmemobj_tx_strdup(args->argv[2], type_num);

pocli_printf(ctx, "%s(%s, %llu): off = 0x%llx uuid = 0x%llx\n",
Expand Down

0 comments on commit eff7490

Please sign in to comment.