All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Sterba <dsterba@suse.cz>
To: Liu Bo <bo.li.liu@oracle.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 04/12] btrfs: change how delay_iput is tracked in btrfs_delalloc_work
Date: Fri, 4 Dec 2015 13:36:25 +0100	[thread overview]
Message-ID: <20151204123625.GF31035@suse.cz> (raw)
In-Reply-To: <20151204022537.GH19589@localhost.localdomain>

On Thu, Dec 03, 2015 at 06:25:37PM -0800, Liu Bo wrote:
> >  	struct inode *inode;
> > -	int delay_iput;
> >  	struct completion completion;
> >  	struct list_head list;
> >  	struct btrfs_work work;
> > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> > index 15b29e879ffc..529a53b80ca0 100644
> > --- a/fs/btrfs/inode.c
> > +++ b/fs/btrfs/inode.c
> > @@ -9436,16 +9436,21 @@ static void btrfs_run_delalloc_work(struct btrfs_work *work)
> >  {
> >  	struct btrfs_delalloc_work *delalloc_work;
> >  	struct inode *inode;
> > +	int delay_iput;
> >  
> >  	delalloc_work = container_of(work, struct btrfs_delalloc_work,
> >  				     work);
> >  	inode = delalloc_work->inode;
> > +	/* Lowest bit of inode pointer tracks the delayed status */
> > +	delay_iput = ((unsigned long)inode & 1UL);
> > +	inode = (struct inode *)((unsigned long)inode & ~1UL);
> > +
> 
> To be quite frankly, I don't like this, it's a pointer anyway,
> error-prone in a debugging view, instead would 'u8 delayed_iput' help?

The point was to shrink the structure. Adding the u8 will grow it by
another 8 bytes, besides the slab objects are aligned to 8 bytes by
default so the overall cost of storing the delayed information is 8
bytes:

struct btrfs_delalloc_work {
        struct inode *             inode;                /*     0     8 */
        struct completion          completion;           /*     8    32 */
        struct list_head           list;                 /*    40    16 */
        struct btrfs_work          work;                 /*    56    88 */
        /* --- cacheline 2 boundary (128 bytes) was 16 bytes ago --- */
        u8                         delay;                /*   144     1 */

        /* size: 152, cachelines: 3, members: 5 */
        /* padding: 7 */
        /* last cacheline: 24 bytes */
};

As the use of the inode pointer is limited, I don't think this would
cause surprises. And it's commented where used which should help during
debugging.

Abusing the low bits of pointers is nothing new, the page cache tags are
implemented that way. This kind of low-level optimizations is IMO acceptable.

  reply	other threads:[~2015-12-04 12:38 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-03 16:56 [PULL][PATCH 00/12] Minor cleanups and code simplifications David Sterba
2015-12-03 16:56 ` [PATCH 01/12] btrfs: make btrfs_close_one_device static David Sterba
2015-12-03 16:56 ` [PATCH 02/12] btrfs: sink parameter wait to btrfs_alloc_delalloc_work David Sterba
2015-12-03 16:56 ` [PATCH 03/12] btrfs: remove wait from struct btrfs_delalloc_work David Sterba
2015-12-03 16:56 ` [PATCH 04/12] btrfs: change how delay_iput is tracked in btrfs_delalloc_work David Sterba
2015-12-04  2:25   ` Liu Bo
2015-12-04 12:36     ` David Sterba [this message]
2015-12-04 12:50       ` Holger Hoffstätte
2015-12-07 14:23         ` David Sterba
2015-12-04 13:08       ` Filipe Manana
2015-12-07 13:52         ` David Sterba
2015-12-03 16:56 ` [PATCH 05/12] btrfs: remove a trivial helper btrfs_set_buffer_uptodate David Sterba
2015-12-03 16:56 ` [PATCH 06/12] btrfs: make set_extent_buffer_uptodate return void David Sterba
2015-12-03 16:56 ` [PATCH 07/12] btrfs: make clear_extent_buffer_uptodate " David Sterba
2015-12-03 16:56 ` [PATCH 08/12] btrfs: make extent_clear_unlock_delalloc " David Sterba
2015-12-03 16:56 ` [PATCH 09/12] btrfs: make end_extent_writepage " David Sterba
2015-12-03 16:56 ` [PATCH 10/12] btrfs: make extent_range_clear_dirty_for_io " David Sterba
2015-12-03 16:56 ` [PATCH 11/12] btrfs: make extent_range_redirty_for_io " David Sterba
2015-12-03 16:56 ` [PATCH 12/12] btrfs: make set_range_writeback " David Sterba
2015-12-07 14:16 ` [PULL][PATCH 00/12] Minor cleanups and code simplifications David Sterba

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=20151204123625.GF31035@suse.cz \
    --to=dsterba@suse.cz \
    --cc=bo.li.liu@oracle.com \
    --cc=linux-btrfs@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.