From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: sandeen@sandeen.net, darrick.wong@oracle.com
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH 07/13] libfrog: fix bitmap error communication problems
Date: Wed, 25 Sep 2019 14:34:05 -0700 [thread overview]
Message-ID: <156944724578.297677.11793519151262574472.stgit@magnolia> (raw)
In-Reply-To: <156944720314.297677.12837037497727069563.stgit@magnolia>
From: Darrick J. Wong <darrick.wong@oracle.com>
Convert all the libfrog code and callers away from the libc-style
indirect errno returns to directly returning error codes to callers.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
libfrog/bitmap.c | 13 +++++++------
libfrog/bitmap.h | 2 +-
repair/rmap.c | 4 ++--
scrub/phase6.c | 20 +++++++++++---------
4 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/libfrog/bitmap.c b/libfrog/bitmap.c
index 4dafc4c9..be95965f 100644
--- a/libfrog/bitmap.c
+++ b/libfrog/bitmap.c
@@ -23,7 +23,8 @@
*/
#define avl_for_each_range_safe(pos, n, l, first, last) \
- for (pos = (first), n = pos->avl_nextino, l = (last)->avl_nextino; pos != (l); \
+ for (pos = (first), n = pos->avl_nextino, l = (last)->avl_nextino; \
+ pos != (l); \
pos = n, n = pos ? pos->avl_nextino : NULL)
#define avl_for_each_safe(tree, pos, n) \
@@ -67,18 +68,18 @@ static struct avl64ops bitmap_ops = {
/* Initialize a bitmap. */
int
-bitmap_init(
+bitmap_alloc(
struct bitmap **bmapp)
{
struct bitmap *bmap;
bmap = calloc(1, sizeof(struct bitmap));
if (!bmap)
- return -ENOMEM;
+ return errno;
bmap->bt_tree = malloc(sizeof(struct avl64tree_desc));
if (!bmap->bt_tree) {
free(bmap);
- return -ENOMEM;
+ return errno;
}
pthread_mutex_init(&bmap->bt_lock, NULL);
@@ -139,12 +140,12 @@ __bitmap_insert(
ext = bitmap_node_init(start, length);
if (!ext)
- return -ENOMEM;
+ return errno;
node = avl64_insert(bmap->bt_tree, &ext->btn_node);
if (node == NULL) {
free(ext);
- return -EEXIST;
+ return EEXIST;
}
return 0;
diff --git a/libfrog/bitmap.h b/libfrog/bitmap.h
index 40119b9c..759386a8 100644
--- a/libfrog/bitmap.h
+++ b/libfrog/bitmap.h
@@ -11,7 +11,7 @@ struct bitmap {
struct avl64tree_desc *bt_tree;
};
-int bitmap_init(struct bitmap **bmap);
+int bitmap_alloc(struct bitmap **bmap);
void bitmap_free(struct bitmap **bmap);
int bitmap_set(struct bitmap *bmap, uint64_t start, uint64_t length);
int bitmap_iterate(struct bitmap *bmap, int (*fn)(uint64_t, uint64_t, void *),
diff --git a/repair/rmap.c b/repair/rmap.c
index b907383e..c6ed25a9 100644
--- a/repair/rmap.c
+++ b/repair/rmap.c
@@ -490,13 +490,13 @@ rmap_store_ag_btree_rec(
error = init_slab_cursor(ag_rmap->ar_raw_rmaps, rmap_compare, &rm_cur);
if (error)
goto err;
- error = -bitmap_init(&own_ag_bitmap);
+ error = bitmap_alloc(&own_ag_bitmap);
if (error)
goto err_slab;
while ((rm_rec = pop_slab_cursor(rm_cur)) != NULL) {
if (rm_rec->rm_owner != XFS_RMAP_OWN_AG)
continue;
- error = -bitmap_set(own_ag_bitmap, rm_rec->rm_startblock,
+ error = bitmap_set(own_ag_bitmap, rm_rec->rm_startblock,
rm_rec->rm_blockcount);
if (error) {
/*
diff --git a/scrub/phase6.c b/scrub/phase6.c
index aff04e76..d9285fee 100644
--- a/scrub/phase6.c
+++ b/scrub/phase6.c
@@ -341,6 +341,7 @@ xfs_check_rmap_ioerr(
struct media_verify_state *vs = arg;
struct bitmap *tree;
dev_t dev;
+ int ret;
dev = xfs_disk_to_dev(ctx, disk);
@@ -355,9 +356,9 @@ xfs_check_rmap_ioerr(
else
tree = NULL;
if (tree) {
- errno = -bitmap_set(tree, start, length);
- if (errno)
- str_errno(ctx, ctx->mntpoint);
+ ret = bitmap_set(tree, start, length);
+ if (ret)
+ str_liberror(ctx, ret, _("setting bad block bitmap"));
}
snprintf(descr, DESCR_BUFSZ, _("dev %d:%d ioerr @ %"PRIu64":%"PRIu64" "),
@@ -454,16 +455,17 @@ xfs_scan_blocks(
{
struct media_verify_state vs = { NULL };
bool moveon = false;
+ int ret;
- errno = -bitmap_init(&vs.d_bad);
- if (errno) {
- str_errno(ctx, ctx->mntpoint);
+ ret = bitmap_alloc(&vs.d_bad);
+ if (ret) {
+ str_liberror(ctx, ret, _("creating datadev badblock bitmap"));
goto out;
}
- errno = -bitmap_init(&vs.r_bad);
- if (errno) {
- str_errno(ctx, ctx->mntpoint);
+ ret = bitmap_alloc(&vs.r_bad);
+ if (ret) {
+ str_liberror(ctx, ret, _("creating realtime badblock bitmap"));
goto out_dbad;
}
next prev parent reply other threads:[~2019-09-25 21:34 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-25 21:33 [PATCH 00/13] libfrog/xfs_scrub: fix error handling Darrick J. Wong
2019-09-25 21:33 ` [PATCH 01/13] libfrog: fix workqueue error communication problems Darrick J. Wong
2019-09-30 19:23 ` Eric Sandeen
2019-09-30 19:29 ` Darrick J. Wong
2019-09-30 19:35 ` Eric Sandeen
2019-09-30 20:32 ` Eric Sandeen
2019-09-25 21:33 ` [PATCH 02/13] libfrog: fix missing error checking in workqueue code Darrick J. Wong
2019-09-30 20:37 ` Eric Sandeen
2019-09-25 21:33 ` [PATCH 03/13] libfrog: split workqueue destroy functions Darrick J. Wong
2019-09-30 22:33 ` Eric Sandeen
2019-09-25 21:33 ` [PATCH 04/13] xfs_scrub: redistribute read verify pool flush and destroy responsibilities Darrick J. Wong
2019-10-07 20:04 ` Eric Sandeen
2019-09-25 21:33 ` [PATCH 05/13] libfrog: fix per-thread variable error communication problems Darrick J. Wong
2019-10-07 20:37 ` Eric Sandeen
2019-09-25 21:33 ` [PATCH 06/13] libfrog: add missing per-thread variable error handling Darrick J. Wong
2019-10-09 21:16 ` Eric Sandeen
2019-10-09 21:40 ` Eric Sandeen
2019-09-25 21:34 ` Darrick J. Wong [this message]
2019-10-09 21:27 ` [PATCH 07/13] libfrog: fix bitmap error communication problems Eric Sandeen
2019-09-25 21:34 ` [PATCH 08/13] libfrog: fix missing error checking in bitmap code Darrick J. Wong
2019-10-09 21:30 ` Eric Sandeen
2019-09-25 21:34 ` [PATCH 09/13] xfs_scrub: fix per-thread counter error communication problems Darrick J. Wong
2019-10-09 21:46 ` Eric Sandeen
2019-10-10 3:05 ` Darrick J. Wong
2019-10-15 16:57 ` Eric Sandeen
2019-09-25 21:34 ` [PATCH 10/13] xfs_scrub: report all progressbar creation failures Darrick J. Wong
2019-10-09 21:47 ` Eric Sandeen
2019-09-25 21:34 ` [PATCH 11/13] xfs_scrub: check progress bar timedwait failures Darrick J. Wong
2019-10-09 21:49 ` Eric Sandeen
2019-09-25 21:34 ` [PATCH 12/13] xfs_scrub: move all the queue_subdir error reporting to callers Darrick J. Wong
2019-10-09 21:54 ` Eric Sandeen
2019-09-25 21:34 ` [PATCH 13/13] xfs_scrub: fix error handling problems in vfs.c Darrick J. Wong
2019-10-09 21:57 ` Eric Sandeen
-- strict thread matches above, loose matches on Subject: below --
2019-09-06 3:36 [PATCH 00/13] libfrog/xfs_scrub: fix error handling Darrick J. Wong
2019-09-06 3:36 ` [PATCH 07/13] libfrog: fix bitmap error communication problems Darrick J. Wong
2019-08-26 21:28 [PATCH 00/13] libfrog/xfs_scrub: fix error handling Darrick J. Wong
2019-08-26 21:29 ` [PATCH 07/13] libfrog: fix bitmap error communication problems Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=156944724578.297677.11793519151262574472.stgit@magnolia \
--to=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).