From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org, hsiangkao@redhat.com
Subject: Re: [PATCH 2/7] repair: Protect bad inode list with mutex
Date: Fri, 19 Mar 2021 11:20:11 -0700 [thread overview]
Message-ID: <20210319182011.GT22100@magnolia> (raw)
In-Reply-To: <20210319013355.776008-3-david@fromorbit.com>
On Fri, Mar 19, 2021 at 12:33:50PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> To enable phase 6 parallelisation, we need to protect the bad inode
> list from concurrent modification and/or access. Wrap it with a
> mutex and clean up the nasty typedefs.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
FWIW, if you (Gao at this point, I surmise) want to dig deeper into the
comment that Christoph made during the last review of this patchset,
repair already /does/ have a resizing array structure in repair/slab.c.
That /would/ decrease the memory overhead of the bad inode list by 50%,
though I would hope that bad inodes are a rare enough occurrence that it
doesn't matter much...
--D
> ---
> repair/dir2.c | 32 +++++++++++++++++++++-----------
> 1 file changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/repair/dir2.c b/repair/dir2.c
> index eabdb4f2d497..23333e59a382 100644
> --- a/repair/dir2.c
> +++ b/repair/dir2.c
> @@ -20,40 +20,50 @@
> * Known bad inode list. These are seen when the leaf and node
> * block linkages are incorrect.
> */
> -typedef struct dir2_bad {
> +struct dir2_bad {
> xfs_ino_t ino;
> struct dir2_bad *next;
> -} dir2_bad_t;
> +};
>
> -static dir2_bad_t *dir2_bad_list;
> +static struct dir2_bad *dir2_bad_list;
> +pthread_mutex_t dir2_bad_list_lock = PTHREAD_MUTEX_INITIALIZER;
>
> static void
> dir2_add_badlist(
> xfs_ino_t ino)
> {
> - dir2_bad_t *l;
> + struct dir2_bad *l;
>
> - if ((l = malloc(sizeof(dir2_bad_t))) == NULL) {
> + l = malloc(sizeof(*l));
> + if (!l) {
> do_error(
> _("malloc failed (%zu bytes) dir2_add_badlist:ino %" PRIu64 "\n"),
> - sizeof(dir2_bad_t), ino);
> + sizeof(*l), ino);
> exit(1);
> }
> + pthread_mutex_lock(&dir2_bad_list_lock);
> l->next = dir2_bad_list;
> dir2_bad_list = l;
> l->ino = ino;
> + pthread_mutex_unlock(&dir2_bad_list_lock);
> }
>
> int
> dir2_is_badino(
> xfs_ino_t ino)
> {
> - dir2_bad_t *l;
> + struct dir2_bad *l;
> + int ret = 0;
>
> - for (l = dir2_bad_list; l; l = l->next)
> - if (l->ino == ino)
> - return 1;
> - return 0;
> + pthread_mutex_lock(&dir2_bad_list_lock);
> + for (l = dir2_bad_list; l; l = l->next) {
> + if (l->ino == ino) {
> + ret = 1;
> + break;
> + }
> + }
> + pthread_mutex_unlock(&dir2_bad_list_lock);
> + return ret;
> }
>
> /*
> --
> 2.30.1
>
next prev parent reply other threads:[~2021-03-19 18:21 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-19 1:33 [PATCH 0/7] repair: Phase 6 performance improvements Dave Chinner
2021-03-19 1:33 ` [PATCH 1/7] workqueue: bound maximum queue depth Dave Chinner
2021-03-19 1:45 ` Darrick J. Wong
2021-03-19 1:33 ` [PATCH 2/7] repair: Protect bad inode list with mutex Dave Chinner
2021-03-19 18:20 ` Darrick J. Wong [this message]
2021-03-19 22:20 ` Dave Chinner
2021-03-19 1:33 ` [PATCH 3/7] repair: protect inode chunk tree records with a mutex Dave Chinner
2021-03-19 18:11 ` Darrick J. Wong
2021-03-19 1:33 ` [PATCH 4/7] repair: parallelise phase 6 Dave Chinner
2021-03-19 1:33 ` [PATCH 5/7] repair: don't duplicate names in " Dave Chinner
2021-03-19 1:33 ` [PATCH 6/7] repair: convert the dir byaddr hash to a radix tree Dave Chinner
2021-03-19 22:44 ` Darrick J. Wong
2021-03-19 1:33 ` [PATCH 7/7] repair: scale duplicate name checking in phase 6 Dave Chinner
2021-03-19 1:38 ` [PATCH 0/7] repair: Phase 6 performance improvements Gao Xiang
2021-03-19 18:22 ` Darrick J. Wong
2021-03-20 2:09 ` Gao Xiang
2021-03-24 1:26 ` Gao Xiang
2021-03-24 2:08 ` Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2020-10-22 5:15 Dave Chinner
2020-10-22 5:15 ` [PATCH 2/7] repair: Protect bad inode list with mutex Dave Chinner
2020-10-22 5:45 ` Darrick J. Wong
2020-10-29 9:35 ` Christoph Hellwig
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=20210319182011.GT22100@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=hsiangkao@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.