linux-bcache.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
To: Joe Perches <joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>, g@google.com
Cc: linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	tejun-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Subject: Re: [Bcache v14 16/16] bcache: Debug and tracing code
Date: Tue, 12 Jun 2012 10:24:44 -0700	[thread overview]
Message-ID: <20120612172444.GA11365@google.com> (raw)
In-Reply-To: <1339519858.2017.10.camel@joe2Laptop>

On Tue, Jun 12, 2012 at 09:50:58AM -0700, Joe Perches wrote:
> On Tue, 2012-06-12 at 08:39 -0700, Kent Overstreet wrote:
> 
> > diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
> 
> > +static void dump_bset(struct btree *b, struct bset *i)
> > +{
> > +	for (struct bkey *k = i->start; k < end(i); k = bkey_next(k)) {
> > +		printk(KERN_ERR "block %zu key %zu/%i: %s", index(i, b),
> > +		       (uint64_t *) k - i->d, i->keys, pkey(k));
> 
> Add #define pr_fmt and use pr_<level> not printk everywhere.

I've got the pr_fmt, but I don't want to use it here because it's
dumping a btree node (100s of lines) so the bcache: would be redundant,
but more importantly I don't want lines getting truncated.

> Doesn't this throw a gcc warning for argument mismatch?

No, why?

> 
> > +static void vdump_bucket_and_panic(struct btree *b, const char *m, va_list args)
> > +{
> 
> m should be renamed fmt

Agreed.

> 
> > +	struct bset *i;
> > +
> > +	console_lock();
> > +
> > +	for_each_sorted_set(b, i)
> > +		dump_bset(b, i);
> > +
> > +	vprintk(m, args);
> > +
> > +	console_unlock();
> > +
> > +	panic("at %s\n", pbtree(b));
> > +}
> > +
> > +static void dump_bucket_and_panic(struct btree *b, const char *m, ...)
> > +{
> 
> here too.
> 
> > +	va_list args;
> > +	va_start(args, m);
> > +	vdump_bucket_and_panic(b, m, args);
> > +	va_end(args);
> > +}
> > +
> > +static void __maybe_unused
> > +dump_key_and_panic(struct btree *b, struct bset *i, int j)
> > +{
> > +	long bucket = PTR_BUCKET_NR(b->c, node(i, j), 0);
> > +	long r = PTR_OFFSET(node(i, j), 0) & ~(~0 << b->c->bucket_bits);
> > +
> > +	printk(KERN_ERR "level %i block %zu key %i/%i: %s "
> > +	       "bucket %llu offset %li into bucket\n",
> 
> coalesce formats please.

The "block %zu key %i/%i" part? I think I can do that.

> 
> > +	       b->level, index(i, b), j, i->keys, pkey(node(i, j)),
> > +	       (uint64_t) bucket, r);
> > +	dump_bucket_and_panic(b, "");
> > +}
> 
> []
> 
> > +static int debug_seq_show(struct seq_file *f, void *data)
> > +{
> > +	static const char *tabs = "\t\t\t\t\t";
> 
> Seems a _very_ odd use.

It is a strange hack.

The idea is that we want to indent more as we recurse; we could build up
a new string of tabs each time we recurse that's got one more tab than
our parent's, but that'd be a pain in the ass and it'd use more stack
space (though that should be fine here), so instead it's just
decrementing the pointer to the tab string to produce a string with one
more tab.

I'm not opposed to taking it out if you know cleaner way that isn't
ridiculously verbose. But this code needs to be rewritten to not use
single_open() (which I tihnk is going to be a pain in the ass) so it's
not really at the top of my list.

> 
> > +	uint64_t last = 0, sectors = 0;
> > +	struct cache_set *c = f->private;
> > +
> > +	struct btree_op op;
> > +	bch_btree_op_init_stack(&op);
> > +
> > +	btree_root(dump, c, &op, f, &tabs[4], &last, &sectors);
> > +
> 
> Why not just:
> 
> 	btree_root(dump, c, &op, "\t", &last, &sectors);
> 
> Please don't be lazy when modifying code.
> 
> []
> 
> > diff --git a/drivers/md/bcache/debug.h b/drivers/md/bcache/debug.h
> []
> > +#define KEYHACK_SIZE 80
> > +struct keyprint_hack {
> > +	char s[KEYHACK_SIZE];
> > +};
> 
> structures named _hack are generally a bad idea.

Heh. Well, I don't try to hide my terrible hacks. Ugly stuff should be
ugly.

If you missed what it's for, it lets you do
printk("some key: %s\n", pkey(k));

which is very handy.

IMO it ought to be a vsnprintf extension, except that there's no plugin
mechanism to do that so it could be specific to bcache. I'd love to
implement that (shouldn't be very hard), but in the meantime this gets
the job done.

  reply	other threads:[~2012-06-12 17:24 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-12 15:39 [Bcache v14 00/16] Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 01/16] Revert "rw_semaphore: remove up/down_read_non_owner" Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 02/16] Fix ratelimit macro to compile in c99 mode Kent Overstreet
     [not found] ` <1339515562-14638-1-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-06-12 15:39   ` [Bcache v14 03/16] Export get_random_int() Kent Overstreet
2012-06-12 15:39   ` [Bcache v14 07/16] Closures Kent Overstreet
2012-06-12 15:39   ` [Bcache v14 10/16] bcache: Superblock/initialization/sysfs code Kent Overstreet
2012-06-12 15:39   ` [Bcache v14 15/16] bcache: Writeback, copying garbage collection Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 04/16] Add human-readable units modifier to vsnprintf() Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 05/16] Export blk_fill_rwbs() Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 06/16] Export __lockdep_no_validate__ Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 08/16] bcache: Documentation, and changes to generic code Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 09/16] bcache: Generic utility code Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 11/16] bcache: Core btree code Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 12/16] bcache: Bset code (lookups within a btree node) Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 13/16] bcache: Journalling Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 14/16] bcache: Request, io and allocation code Kent Overstreet
2012-06-12 15:39 ` [Bcache v14 16/16] bcache: Debug and tracing code Kent Overstreet
     [not found]   ` <1339515562-14638-17-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-06-12 16:50     ` Joe Perches
2012-06-12 17:24       ` Kent Overstreet [this message]
2012-06-12 17:35         ` Joe Perches
2012-06-12 17:45           ` Kent Overstreet

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=20120612172444.GA11365@google.com \
    --to=koverstreet-hpiqsd4aklfqt0dzr+alfa@public.gmane.org \
    --cc=agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=g@google.com \
    --cc=joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org \
    --cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=tejun-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.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 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).