linux-bcache.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [Bcache v13 14/16] bcache: Request, io and allocation code
Date: Thu, 31 May 2012 15:45:15 +0900	[thread overview]
Message-ID: <20120531064515.GA18984@mtj.dyndns.org> (raw)
In-Reply-To: <20120531051321.GA12602-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>

Hello, Kent.

On Thu, May 31, 2012 at 01:13:21AM -0400, Kent Overstreet wrote:
> BKEY_PADDED() was originally for keys in other structs that needed
> padded, where the transparent union thing actually works. Are you
> against the macro in general or just for stack allocated keys?

Macro in general.  If it needs an extra union / struct member deref,
so be it.  No need to be smart for things like this.

> I would like more descriptive/unique variable names for cache,
> cache_set, bcache_device and cached_dev, I'm just not coming up with
> anything that's reasonably terse and seems to me like an improvement.
> 
> (I'm not really against cdev, it's just that bcache_device should then
> be bdev by analogy and that's taken... argh).
>
> Anyways, I'm not really attached to the current variable names like I am
> some of the style issues, I just can't come up with anything I like.

Heh, yeah, naming isn't easy.  In most cases, it just has to be
something consistent which has some association tho.

> > * Generic names.  bio_insert() belongs to block layer.  Block layer
> >   may use it in the future and when one sees bio_insert(), it's
> >   natural for that person to assume that it's a block layer thing
> >   doing something with bio.  As for better name, I'm not sure.  Maybe
> >   just prefix it with bc_?
> 
> Agreed on bio_insert() (there's a fair number of functions that I've
> been meaning to rename for similarish reasons - get_bucket() and
> pop_bucket() don't have anything to do with each other, for example).
> 
> I think the function names are easier to improve than variabe names,
> though. The main obstacle (for me) to renaming stuff is that when I do I
> want to come up with names that are patterned on the relationships in
> the code, and that'll take some work.

It doesn't have to be perfect.  Naming schemes like anything else tend
to lose consistency over time anyway, so something good enough is
usually good enough.

> > * These aren't hard and fast rules.  There isn't one true fixed
> >   standard that everyone conforms to.  There still are different
> >   styles and people adopt the ones they think are pretty.  That's how
> >   it evolves, but it too is a problem of degree and you can bend only
> >   so far before people start complaining.
> > 
> >   For example, here's a fictionalized process that I got irritated and
> >   felt generally hostile against the code base.
> > 
> >   1. Reading code.  Full of macros.
> > 
> >   2. Reading macros.  Single char arguments.  Starting to get
> >      irritated.
> > 
> >   3. Encountered closures.  Still unsure what they mean.  This one
> >      looks like a simple refcnt.  Wonders what the hell is wrong with
> >      the usual refcnts.  Maybe somehow this gets used differently
> >      somewhere else?  Of course, no explanation.
> > 
> >   4. While trying to follow the control flow, encounters a function
> >      with full of cryptic numbers with "different" formatting.  No
> >      high level explanation or anything.  Getting irritated.
> 
> Which function was that?

Heh, this was dramatized for maximum effect.  I was thinking about the
condition check functions / macros with hard-coded constants.

...
> I think also I haven't been explicit about it but I do try to
> differentiate between style issues that are of no consequence (whoever
> feels more strongly about those can decide, for all I care) and things
> that make the codebase harder to read and understand.
> 
> Hell, I've never pretended to be any good at writing code that's
> understandable by others. There's things I _am_ good at - writing fast
> code, writing complex asynchronous code that _reliably works_ - but
> understandable code? Hell no.

I don't think your style is inferior or anything.  It's just different
from the one used in the kernel.  I don't think it's anything
difficult either.  It's just a matter of habit.

...
> That said, it does bug me when things are rejected out of hand merely
> for being different and foreign.
> 
> Closures being the main example - I'd be more receptive to criticism if
> I'd seen a half decent solution before, or if you or anyone else was
> actually trying to come up with something better.
> 
> I'd really like to see what you come up with if you implement that bio
> sequencer you've been talking about, because either you'll come up with
> something better or you'll have a better understanding of the problems I
> was trying to solve.

I still don't understand what's being made better by closure.  At
least the ones I've seen didn't seem to be justified, so if you have
some examples which highlight the benefits of closure, please go ahead
and explain them.

I'll write more about it later but here are some of my current
thoughts.

* I personally think async (using something other than stack for
  execution state) programming inherently sucks, no matter how it's
  done.  The programming language and even the processor we use assume
  that stack is used to track execution context after all.  My opinion
  about async programming can essentially be summarized as "avoid it
  as much as possible".

* This itself may be too abstract but excess is often worse than lack,
  especially for abstraction and design.  Problems caused by excess is
  much more difficult to rectify as the problems are intentional and
  systematic.  That's the part I dislike the most about kobject and
  friends.

* I don't (yet anyway) believe that you have something drastically
  better in closure.  You just have something very different and maybe
  a bit more convenient.  Both async and refcnting are well known
  problems with established patterns.

  In a sense, I think it's similar to the style argument although at a
  higher level.  I don't think the amount of benefit justifies the
  amount of deviation.

So, at least to me, the bar for highly abstract refcnty async thingy
is pretty high.  It's a ugly problem and I'd prefer to leave it ugly
and painful unless it can be drastically better.

Thanks.

-- 
tejun

  parent reply	other threads:[~2012-05-31  6:45 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-10  3:07 [Bcache v13 00/16] Kent Overstreet
2012-05-10  3:09 ` [Bcache v13 05/16] Export get_random_int() Kent Overstreet
     [not found]   ` <5278ad493eb3ad441b2091b4c119d741e47f5c97.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-15 16:44     ` Tejun Heo
2012-05-10  3:09 ` [Bcache v13 07/16] Closures Kent Overstreet
     [not found]   ` <82f00ebb4ee0404788c5bd7fbfa1fe4969f28ba1.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-15 22:41     ` Tejun Heo
     [not found]       ` <20120515224137.GA15386-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-18  6:29         ` Kent Overstreet
     [not found]           ` <20120518062948.GA21163-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-18 10:02             ` Alan Cox
2012-05-21 19:40               ` Kent Overstreet
2012-05-10  3:10 ` [Bcache v13 08/16] bcache: Documentation, and changes to generic code Kent Overstreet
2012-05-10  3:10 ` [Bcache v13 09/16] Bcache: generic utility code Kent Overstreet
     [not found]   ` <c3f0ca2a499f532253d4c16a30837d43e237266a.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-10 19:35     ` Dan Williams
2012-05-10 21:42       ` Kent Overstreet
2012-05-22 21:17     ` Tejun Heo
2012-05-23  3:12       ` Kent Overstreet
     [not found]         ` <20120523031214.GA607-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  3:36           ` Joe Perches
2012-05-23  4:50             ` [PATCH] Add human-readable units modifier to vsnprintf() Kent Overstreet
     [not found]               ` <20120523045023.GE607-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  5:10                 ` Joe Perches
2012-05-23  5:22                   ` Kent Overstreet
     [not found]                     ` <20120523052236.GA14312-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  5:42                       ` Joe Perches
2012-05-23  6:04                         ` Kent Overstreet
     [not found]                           ` <20120523060435.GD14312-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  6:12                             ` Joe Perches
2012-05-23  5:08           ` [Bcache v13 09/16] Bcache: generic utility code Tejun Heo
     [not found]             ` <20120523050808.GA29976-RcKxWJ4Cfj1J2suj2OqeGauc2jM2gXBXkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  5:54               ` Kent Overstreet
     [not found]                 ` <20120523055402.GC14312-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23 16:51                   ` Tejun Heo
     [not found]       ` <20120522211706.GH14339-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-23 15:15         ` [dm-devel] " Vivek Goyal
     [not found]           ` <20120523151538.GJ14943-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-05-23 15:33             ` Kent Overstreet
2012-05-22 21:19     ` Tejun Heo
2012-05-10  3:10 ` [Bcache v13 10/16] bcache: Superblock/initialization/sysfs code Kent Overstreet
2012-05-10  3:10 ` [Bcache v13 11/16] bcache: Core btree code Kent Overstreet
     [not found]   ` <7f1de39b6d7040b3fe271500776f4b985b21ea82.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-22 22:12     ` Tejun Heo
     [not found]       ` <20120522221259.GJ14339-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-23  3:45         ` Kent Overstreet
     [not found]           ` <20120523034546.GB607-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23  5:20             ` Tejun Heo
2012-05-23  5:34               ` Kent Overstreet
     [not found]                 ` <20120523053403.GB14312-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23 17:24                   ` Tejun Heo
2012-05-22 22:40     ` Tejun Heo
2012-05-30  7:47     ` Tejun Heo
     [not found]       ` <20120530074708.GA32121-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-31  1:09         ` Kent Overstreet
2012-05-10  3:11 ` [Bcache v13 12/16] bcache: Bset code (lookups within a btree node) Kent Overstreet
     [not found]   ` <5b5998d7d09ec36377acdb5d15665d1e4e818521.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-22 22:39     ` Tejun Heo
     [not found]       ` <20120522223932.GK14339-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-23  4:21         ` Kent Overstreet
     [not found]           ` <20120523042114.GC607-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-23 17:55             ` Tejun Heo
     [not found]               ` <20120523175544.GC18143-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-23 20:49                 ` Tejun Heo
     [not found]                   ` <20120523204914.GC3933-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-05-24 18:11                     ` Tejun Heo
2012-05-10  3:11 ` [Bcache v13 13/16] bcache: Journalling Kent Overstreet
2012-05-10  3:11 ` [Bcache v13 14/16] bcache: Request, io and allocation code Kent Overstreet
     [not found]   ` <9ea33658f2a71b3b9bd2ec10bee959bef146f23c.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-22 22:42     ` Tejun Heo
     [not found]       ` <20120522224255.GM14339-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-23  1:44         ` Kent Overstreet
2012-05-23  4:24         ` Kent Overstreet
2012-05-22 22:44     ` Tejun Heo
2012-05-30  7:23     ` Tejun Heo
     [not found]       ` <20120530072358.GB4854-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-31  0:52         ` Kent Overstreet
     [not found]           ` <20120531005224.GA5645-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-31  2:43             ` Tejun Heo
2012-05-31  5:13               ` Kent Overstreet
     [not found]                 ` <20120531051321.GA12602-RcKxWJ4Cfj3IzGYXcIpNmNLIRw13R84JkQQo+JxHRPFibQn6LdNjmg@public.gmane.org>
2012-05-31  6:45                   ` Tejun Heo [this message]
     [not found]                     ` <20120531064515.GA18984-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2012-06-01  2:37                       ` Tejun Heo
2012-05-31  2:45           ` Tejun Heo
2012-05-30  7:32     ` Tejun Heo
2012-05-10  3:11 ` [Bcache v13 15/16] bcache: Writeback Kent Overstreet
     [not found] ` <cover.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-10  3:08   ` [Bcache v13 01/16] Only clone bio vecs that are in use Kent Overstreet
     [not found]     ` <cb817596299fecd01ea36e4a80203f23165bda75.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-10 21:35       ` [dm-devel] " Vivek Goyal
     [not found]         ` <20120510213556.GO23768-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-05-10 21:42           ` Kent Overstreet
     [not found]             ` <CAH+dOxJ2Vi=8Oq1zDZLmqD9-a_wgM=co3+xemw4XBoiDkh_4zg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-11 13:29               ` Jeff Moyer
2012-05-11 20:29                 ` Kent Overstreet
2012-05-15 16:19       ` Tejun Heo
2012-05-10  3:08   ` [Bcache v13 02/16] Bio pool freeing Kent Overstreet
     [not found]     ` <ba8ce9fcca87f192ff5f5d3a436eb8f4d0bcb006.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-10 21:32       ` [dm-devel] " Vivek Goyal
2012-05-10 21:39         ` Kent Overstreet
     [not found]           ` <CAH+dOxL7QwcyUm46cK-pF1qK+kHYC=67iAaQDDwUF2ssJwergA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-05-10 21:52             ` Vivek Goyal
     [not found]               ` <20120510215208.GC2613-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-05-10 21:53                 ` Kent Overstreet
2012-05-15 16:24       ` Tejun Heo
2012-05-15 16:25       ` Tejun Heo
2012-05-10  3:08   ` [Bcache v13 03/16] Revert "rw_semaphore: remove up/down_read_non_owner" Kent Overstreet
     [not found]     ` <3f51ec3e69b8f471e2d1cc539f01504e2b903fed.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-15 16:37       ` Tejun Heo
2012-05-15 16:38     ` Tejun Heo
2012-05-10  3:09   ` [Bcache v13 04/16] Fix ratelimit macro to compile in c99 mode Kent Overstreet
     [not found]     ` <d7cfd6b70316efc3fe2ce575203d906a610e3670.1336619038.git.koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-05-15 16:43       ` Tejun Heo
2012-05-10  3:09   ` [Bcache v13 06/16] Export blk_fill_rwbs() Kent Overstreet
2012-05-10  3:11   ` [Bcache v13 16/16] bcache: Debug and tracing code Kent Overstreet
2012-05-10 18:34   ` [Bcache v13 00/16] Dan Williams
2012-05-18 10:06   ` Arnd Bergmann
2012-05-30  8:29   ` Tejun Heo
2012-05-30  8:54   ` Zhi Yong Wu
2012-05-10 13:54 ` Vivek Goyal
2012-05-10 15:03 ` [dm-devel] " Vivek Goyal
     [not found]   ` <20120510150353.GI23768-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-05-10 15:34     ` Kent Overstreet
     [not found] ` <1188908028.170.1336674698865.JavaMail.mail@webmail09>
2012-05-10 18:49   ` [Bcache v13 11/16] bcache: Core btree code Joe Perches
2012-05-10 21:48     ` 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=20120531064515.GA18984@mtj.dyndns.org \
    --to=tj-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@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).