All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: linux-fsdevel@vger.kernel.org, Jan Kara <jack@suse.cz>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] quota: reorder flags in quota state
Date: Thu, 12 Feb 2015 16:05:40 +0100	[thread overview]
Message-ID: <20150212150540.GC12905@quack.suse.cz> (raw)
In-Reply-To: <20150212093644.6055.17019.stgit@buzz>

On Thu 12-02-15 12:36:44, Konstantin Khlebnikov wrote:
> Flags in struct quota_state keep flags for each quota type and
> some common flags. This patch reorders typed flags:
> 
> Before:
> 
> 0 USRQUOTA DQUOT_USAGE_ENABLED
> 1 USRQUOTA DQUOT_LIMITS_ENABLED
> 2 USRQUOTA DQUOT_SUSPENDED
> 3 GRPQUOTA DQUOT_USAGE_ENABLED
> 4 GRPQUOTA DQUOT_LIMITS_ENABLED
> 5 GRPQUOTA DQUOT_SUSPENDED
> 6          DQUOT_QUOTA_SYS_FILE
> 7          DQUOT_NEGATIVE_USAGE
> 
> After:
> 
> 0 USRQUOTA DQUOT_USAGE_ENABLED
> 1 GRPQUOTA DQUOT_USAGE_ENABLED
> 2 USRQUOTA DQUOT_LIMITS_ENABLED
> 3 GRPQUOTA DQUOT_LIMITS_ENABLED
> 4 USRQUOTA DQUOT_SUSPENDED
> 5 GRPQUOTA DQUOT_SUSPENDED
> 6          DQUOT_QUOTA_SYS_FILE
> 7          DQUOT_NEGATIVE_USAGE
> 
> Now we can get bitmap of all enabled/suspended quota types without loop.
> For example suspended: (flags / DQUOT_SUSPENDED) & ((1 << MAXQUOTAS) - 1).
> 
> add/remove: 0/1 grow/shrink: 3/11 up/down: 56/-215 (-159)
> function                                     old     new   delta
> __dquot_initialize                           423     447     +24
> dquot_transfer                               181     197     +16
> dquot_alloc_inode                            286     302     +16
> dquot_reclaim_space_nodirty                  316     313      -3
> dquot_claim_space_nodirty                    314     311      -3
> dquot_resume                                 286     281      -5
> dquot_free_inode                             332     324      -8
> __dquot_alloc_space                          500     492      -8
> dquot_disable                               1944    1929     -15
> dquot_quota_enable                           252     236     -16
> __dquot_free_space                           750     734     -16
> dquot_writeback_dquots                       625     608     -17
> __dquot_transfer                            1186    1154     -32
> dquot_quota_sync                             299     261     -38
> dquot_active.isra                             54       -     -54
  Two minor comments below. Otherwise the patch looks good.

> Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
> ---
>  include/linux/quota.h    |   18 ++++++++++++------
>  include/linux/quotaops.h |   10 ++--------
>  2 files changed, 14 insertions(+), 14 deletions(-)
> 
> diff --git a/include/linux/quota.h b/include/linux/quota.h
> index d534e8e..205b4f7 100644
> --- a/include/linux/quota.h
> +++ b/include/linux/quota.h
> @@ -398,9 +398,9 @@ enum {
>  						 * memory to turn them on */
>  	_DQUOT_STATE_FLAGS
>  };
  Please explain how the flags are exactly laid out in a comment in
include/linux/quota.h at the enum definition above.

> -#define DQUOT_USAGE_ENABLED	(1 << _DQUOT_USAGE_ENABLED)
> -#define DQUOT_LIMITS_ENABLED	(1 << _DQUOT_LIMITS_ENABLED)
> -#define DQUOT_SUSPENDED		(1 << _DQUOT_SUSPENDED)
> +#define DQUOT_USAGE_ENABLED	(1 << _DQUOT_USAGE_ENABLED * MAXQUOTAS)
> +#define DQUOT_LIMITS_ENABLED	(1 << _DQUOT_LIMITS_ENABLED * MAXQUOTAS)
> +#define DQUOT_SUSPENDED		(1 << _DQUOT_SUSPENDED * MAXQUOTAS)
>  #define DQUOT_STATE_FLAGS	(DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED | \
>  				 DQUOT_SUSPENDED)
>  /* Other quota flags */
> @@ -414,15 +414,21 @@ enum {
>  						 */
>  #define DQUOT_NEGATIVE_USAGE	(1 << (DQUOT_STATE_LAST + 1))
>  					       /* Allow negative quota usage */
> -
>  static inline unsigned int dquot_state_flag(unsigned int flags, int type)
>  {
> -	return flags << _DQUOT_STATE_FLAGS * type;
> +	return flags << type;
>  }
>  
>  static inline unsigned int dquot_generic_flag(unsigned int flags, int type)
>  {
> -	return (flags >> _DQUOT_STATE_FLAGS * type) & DQUOT_STATE_FLAGS;
> +	return (flags >> type) & DQUOT_STATE_FLAGS;
> +}
> +
> +/* Bitmap of quota types where flag is set in flags */
> +static __always_inline unsigned dquot_state_types(unsigned flags, unsigned flag)
  Why do you have __always_inline here? Just use inline if the function
works standalone (which seems to be the case here).

> +{
> +	BUILD_BUG_ON_NOT_POWER_OF_2(flag);
> +	return (flags / flag) & ((1 << MAXQUOTAS) - 1);
>  }
>  
>  #ifdef CONFIG_QUOTA_NETLINK_INTERFACE

								Honza
-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR

  parent reply	other threads:[~2015-02-12 15:05 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-12  9:36 [PATCH 1/2] quota: reorder flags in quota state Konstantin Khlebnikov
2015-02-12  9:36 ` [PATCH 2/2] quota: merge sb->s_quota_types into sb->s_dquot.flags Konstantin Khlebnikov
2015-02-12 15:13   ` Jan Kara
2015-02-12 15:40     ` Konstantin Khlebnikov
2015-02-12 15:05 ` Jan Kara [this message]
2015-02-12 15:46   ` [PATCH 1/2] quota: reorder flags in quota state Konstantin Khlebnikov

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=20150212150540.GC12905@quack.suse.cz \
    --to=jack@suse.cz \
    --cc=khlebnikov@yandex-team.ru \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@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.