From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: sandeen@redhat.com, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 18/27] xfs_scrub: warn about normalized Unicode name collisions
Date: Tue, 16 Jan 2018 15:59:48 -0800 [thread overview]
Message-ID: <20180116235948.GI5602@magnolia> (raw)
In-Reply-To: <0f946ab6-9e41-ede0-d09a-6bcbe3325117@sandeen.net>
On Tue, Jan 16, 2018 at 05:52:10PM -0600, Eric Sandeen wrote:
>
> > +/* Print a warning string and whatever error is stored in errno. */
> > +void
> > +__str_errno_warn(
> > + struct scrub_ctx *ctx,
> > + const char *descr,
> > + const char *file,
> > + int line)
> > +{
> > + char buf[DESCR_BUFSZ];
> > +
> > + pthread_mutex_lock(&ctx->lock);
> > + fprintf(stderr, _("Warning: %s: %s."), descr,
> > + strerror_r(errno, buf, DESCR_BUFSZ));
> > + if (debug)
> > + fprintf(stderr, _(" (%s line %d)"), file, line);
> > + fprintf(stderr, "\n");
> > + ctx->warnings_found++;
> > + pthread_mutex_unlock(&ctx->lock);
> > +}
> > +
>
> Oh hello, unused-new-6th-printing-variant! ;)
>
> It took a lot of careful peering at, and scrolling around, to figure
> out what all these different __str_ variants do.
>
> Can we collapse all these str_foo_bar things down into a function
> that makes logical choices based on what's passed in? Here's what
> I was playing with, see if it actually implements what you want
> and if it's any better, and yeah, long lines sorry.
>
> common.h:
>
> void __str_out(struct scrub_ctx *, const char *descr, int level, int error,
> const char *file, int line, const char *format, ...);
>
> #define S_ERROR 0
> #define S_WARN 1
> #define S_INFO 2
>
> #define str_errno(ctx, str) __str_out(ctx, str, S_ERROR, errno, __FILE__, __LINE__, NULL)
> #define str_error(ctx, str, ...) __str_out(ctx, str, S_ERROR, 0, __FILE__, __LINE__, __VA_ARGS__)
> #define str_errno_warn(ctx, str) __str_out(ctx, str, S_WARN, errno, __FILE__, __LINE__, NULL)
> #define str_warn(ctx, str, ...) __str_out(ctx, str, S_WARN, 0, __FILE__, __LINE__, __VA_ARGS__)
> #define str_info(ctx, str, ...) __str_out(ctx, str, S_INFO, 0, __FILE__, __LINE__, __VA_ARGS__)
>
> /* note, could rationalize those names a bit, maybe must str_errno -> str_errno_error? */
>
> common.c:
>
> /* If stdout/stderr is a tty, clear to end of line to clean up progress bar. */
> static inline const char *str_start(FILE *stream)
> {
> if (stream == stderr)
> return stderr_isatty ? CLEAR_EOL : "";
> else
> return stdout_isatty ? CLEAR_EOL : "";
> }
>
> static const char *err_str[] = {
> "Error",
> "Warning",
> "Info",
> };
>
> /* Print a warning string and some warning text. */
> void
> __str_out(
> struct scrub_ctx *ctx,
> const char *descr,
> int level,
> int error,
> const char *file,
> int line,
> const char *format,
> ...)
> {
> FILE *stream = stderr;
> va_list args;
> char buf[DESCR_BUFSZ];
>
> /* print strerror or format of choice but not both */
> if (error && format)
> abort();
>
> if (level >= S_INFO)
> stream = stdout;
>
> pthread_mutex_lock(&ctx->lock);
> if (errno)
> fprintf(stream, _("%s%s: %s: %s."),
> str_start(stream), err_str[level], descr,
> strerror_r(errno, buf, DESCR_BUFSZ));
> else {
> fprintf(stream, _("%s%s: %s: "),
> str_start(stream), err_str[level], descr);
>
> va_start(args, format);
> vfprintf(stream, format, args);
> va_end(args);
> }
>
> if (debug)
> fprintf(stream, _(" (%s line %d)"), file, line);
> fprintf(stream, "\n");
> if (stream == stdout)
> fflush(stream);
>
> if (errno) /* A syscall failed */
> ctx->runtime_errors++;
> else if (level == S_ERROR)
> ctx->errors_found++;
> else if (level == S_WARN)
> ctx->warnings_found++;
>
> pthread_mutex_unlock(&ctx->lock);
Yes, the whole thing could get unified into a single helper like this.
--D
> }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-01-16 23:59 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-06 1:51 [PATCH v11 00/27] xfsprogs: online scrub/repair support Darrick J. Wong
2018-01-06 1:51 ` [PATCH 01/27] xfs_scrub: create online filesystem scrub program Darrick J. Wong
2018-01-12 0:16 ` Eric Sandeen
2018-01-12 1:08 ` Darrick J. Wong
2018-01-12 1:07 ` Eric Sandeen
2018-01-12 1:10 ` Darrick J. Wong
2018-01-06 1:51 ` [PATCH 02/27] xfs_scrub: common error handling Darrick J. Wong
2018-01-12 1:15 ` Eric Sandeen
2018-01-12 1:23 ` Darrick J. Wong
2018-01-06 1:51 ` [PATCH 03/27] xfs_scrub: set up command line argument parsing Darrick J. Wong
2018-01-11 23:39 ` Eric Sandeen
2018-01-12 1:53 ` Darrick J. Wong
2018-01-12 1:30 ` Eric Sandeen
2018-01-12 2:03 ` Darrick J. Wong
2018-01-06 1:51 ` [PATCH 04/27] xfs_scrub: dispatch the various phases of the scrub program Darrick J. Wong
2018-01-06 1:51 ` [PATCH 05/27] xfs_scrub: figure out how many threads we're going to need Darrick J. Wong
2018-01-06 1:52 ` [PATCH 06/27] xfs_scrub: create an abstraction for a block device Darrick J. Wong
2018-01-11 23:24 ` Eric Sandeen
2018-01-11 23:59 ` Darrick J. Wong
2018-01-12 0:04 ` Eric Sandeen
2018-01-12 1:27 ` Darrick J. Wong
2018-01-06 1:52 ` [PATCH 07/27] xfs_scrub: find XFS filesystem geometry Darrick J. Wong
2018-01-06 1:52 ` [PATCH 08/27] xfs_scrub: add inode iteration functions Darrick J. Wong
2018-01-06 1:52 ` [PATCH 09/27] xfs_scrub: add space map " Darrick J. Wong
2018-01-06 1:52 ` [PATCH 10/27] xfs_scrub: add file " Darrick J. Wong
2018-01-11 23:19 ` Eric Sandeen
2018-01-12 0:24 ` Darrick J. Wong
2018-01-06 1:52 ` [PATCH 11/27] xfs_scrub: filesystem counter collection functions Darrick J. Wong
2018-01-06 1:52 ` [PATCH 12/27] xfs_scrub: wrap the scrub ioctl Darrick J. Wong
2018-01-11 23:12 ` Eric Sandeen
2018-01-12 0:28 ` Darrick J. Wong
2018-01-06 1:52 ` [PATCH 13/27] xfs_scrub: scan filesystem and AG metadata Darrick J. Wong
2018-01-06 1:52 ` [PATCH 14/27] xfs_scrub: thread-safe stats counter Darrick J. Wong
2018-01-06 1:53 ` [PATCH 15/27] xfs_scrub: scan inodes Darrick J. Wong
2018-01-06 1:53 ` [PATCH 16/27] xfs_scrub: check directory connectivity Darrick J. Wong
2018-01-06 1:53 ` [PATCH 17/27] xfs_scrub: warn about suspicious characters in directory/xattr names Darrick J. Wong
2018-01-06 1:53 ` [PATCH 18/27] xfs_scrub: warn about normalized Unicode name collisions Darrick J. Wong
2018-01-16 23:52 ` Eric Sandeen
2018-01-16 23:57 ` Eric Sandeen
2018-01-16 23:59 ` Darrick J. Wong [this message]
2018-01-06 1:53 ` [PATCH 19/27] xfs_scrub: create a bitmap data structure Darrick J. Wong
2018-01-06 1:53 ` [PATCH 20/27] xfs_scrub: create infrastructure to read verify data blocks Darrick J. Wong
2018-01-06 1:53 ` [PATCH 21/27] xfs_scrub: scrub file " Darrick J. Wong
2018-01-11 23:25 ` Eric Sandeen
2018-01-12 0:29 ` Darrick J. Wong
2018-01-06 1:53 ` [PATCH 22/27] xfs_scrub: optionally use SCSI READ VERIFY commands to scrub data blocks on disk Darrick J. Wong
2018-01-06 1:53 ` [PATCH 23/27] xfs_scrub: check summary counters Darrick J. Wong
2018-01-06 1:54 ` [PATCH 24/27] xfs_scrub: fstrim the free areas if there are no errors on the filesystem Darrick J. Wong
2018-01-16 22:07 ` Eric Sandeen
2018-01-16 22:23 ` Darrick J. Wong
2018-01-06 1:54 ` [PATCH 25/27] xfs_scrub: progress indicator Darrick J. Wong
2018-01-11 23:27 ` Eric Sandeen
2018-01-12 0:32 ` Darrick J. Wong
2018-01-06 1:54 ` [PATCH 26/27] xfs_scrub: create a script to scrub all xfs filesystems Darrick J. Wong
2018-01-06 1:54 ` [PATCH 27/27] xfs_scrub: integrate services with systemd Darrick J. Wong
2018-01-06 3:50 ` [PATCH 07/27] xfs_scrub: find XFS filesystem geometry Darrick J. Wong
2018-01-12 4:17 ` [PATCH v11 00/27] xfsprogs: online scrub/repair support Eric Sandeen
2018-01-17 1:31 ` Darrick J. Wong
2018-01-16 19:21 ` [PATCH 28/27] xfs_scrub: wire up repair ioctl Darrick J. Wong
2018-01-16 19:21 ` [PATCH 29/27] xfs_scrub: schedule and manage repairs to the filesystem Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2017-11-17 21:00 [PATCH v10 00/27] xfsprogs-4.15: online scrub/repair support Darrick J. Wong
2017-11-17 21:01 ` [PATCH 18/27] xfs_scrub: warn about normalized Unicode name collisions 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=20180116235948.GI5602@magnolia \
--to=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.com \
--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).