linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Dmitry Monakhov <dmonakhov@openvz.org>
Cc: linux-fsdevel@vger.kernel.org, jack@suse.cz, hch@infradead.org,
	Dmitry Monakhov <dmonakhov@gmail.com>
Subject: Re: [PATCH 09/11] quota: protect dquot mem info with objects's lock
Date: Wed, 6 Oct 2010 14:37:27 +0200	[thread overview]
Message-ID: <20101006123726.GL3676@quack.suse.cz> (raw)
In-Reply-To: <1286302827-31043-10-git-send-email-dmonakhov@gmail.com>

On Tue 05-10-10 22:20:25, Dmitry Monakhov wrote:
> currently ->dq_data_lock is responsible for protecting three things
> 
> 1) dquot->dq_dqb info consistency
> 2) synchronization between ->dq_dqb with ->i_bytes
> 3) Protects mem_dqinfo (per-sb data),
>   3b) and consystency between mem_dqinfo and dq_dqb for following data.
               ^^ consistency

>       dqi_bgrace <=> dqb_btime
>       dqi_igrace <=> dqb_itime
> 
> In fact (1) and (2) is conceptually different from (3)
> By introducing per-dquot data lock we later can split (1)(2) from (3)
> This patch simply introduce new lock, without changing ->dq_data_lock.
                    ^^^^^^^^ introduces a

  I'd be interested in how much this split brings. The hold time of
dq_data_lock isn't so big and I wonder if the higher scalability won't
be mitigated by cache ping-pongs of structures themselves...

> @@ -378,6 +380,37 @@ static inline void dqput_all(struct dquot **dquot)
>  		dqput(dquot[cnt]);
>  }
>  
> +static inline void inode_dquot_lock(const struct inode *inode,
> +				struct dquot **dquot)
> +{
> +	unsigned int cnt;
> +
> +	for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
> +		dquot[cnt] = inode->i_dquot[cnt];
> +		if (dquot[cnt])
> +			spin_lock(&dquot[cnt]->dq_lock);
> +	}
> +}
> +
> +static inline void dquot_lock_all(struct dquot **dquot)
> +{
> +	unsigned int cnt;
> +
> +	for (cnt = 0; cnt < MAXQUOTAS; cnt++)
> +		if (dquot[cnt])
> +			spin_lock(&dquot[cnt]->dq_lock);
> +
> +}
> +
> +static inline void dquot_unlock_all(struct dquot **dquot)
> +{
> +	unsigned int cnt;
> +
> +	for (cnt = 0; cnt < MAXQUOTAS; cnt++)
> +		if (dquot[cnt])
> +			spin_unlock(&dquot[cnt]->dq_lock);
> +}
  Please, just have two locking functions like:
lock_inode_dquots(inode->i_dquot), unlock_inode_dquots(inode->i_dquot).
Also please avoid this copying of pointers to dquot structures. It just
makes things harder to read and since dquot structures are reference
counted, it's also not obviously correct strictly speaking (although fine
in the end in your case since you hold dqptr_sem). If you wish to save some
typing, just keep inode->i_dquot in a local variable.

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

  reply	other threads:[~2010-10-06 12:38 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-05 18:20 (unknown), Dmitry Monakhov
2010-10-05 18:20 ` [PATCH 01/11] quota: add wrapper function Dmitry Monakhov
2010-10-06  8:56   ` Christoph Hellwig
2010-10-06 10:01   ` Jan Kara
2010-10-05 18:20 ` [PATCH 02/11] quota: Convert dq_state_lock to per-sb dq_state_lock Dmitry Monakhov
2010-10-06 10:04   ` Jan Kara
2010-10-05 18:20 ` [PATCH 03/11] quota: add quota format lock Dmitry Monakhov
2010-10-06 10:05   ` Jan Kara
2010-10-05 18:20 ` [PATCH 04/11] quota: make dquot lists per-sb Dmitry Monakhov
2010-10-06  8:57   ` Christoph Hellwig
2010-10-06  9:39     ` Dmitry
2010-10-06 10:22   ` Jan Kara
2010-10-06 10:40     ` Dmitry
2010-10-06 10:54       ` Jan Kara
2010-10-05 18:20 ` [PATCH 05/11] quota: make per-sb hash array Dmitry Monakhov
2010-10-06 10:38   ` Jan Kara
2010-10-05 18:20 ` [PATCH 06/11] quota: remove global dq_list_lock Dmitry Monakhov
2010-10-05 18:20 ` [PATCH 07/11] quota: rename dq_lock Dmitry Monakhov
2010-10-05 18:20 ` [PATCH 08/11] quota: make per-sb dq_data_lock Dmitry Monakhov
2010-10-06 11:01   ` Jan Kara
2010-10-05 18:20 ` [PATCH 09/11] quota: protect dquot mem info with objects's lock Dmitry Monakhov
2010-10-06 12:37   ` Jan Kara [this message]
2010-10-06 13:17     ` Dmitry
2010-10-06 13:41       ` Jan Kara
2010-10-06 14:19     ` Dmitry
2010-10-06 13:30   ` Jan Kara
2010-10-06 13:41     ` Dmitry
2010-10-05 18:20 ` [PATCH 10/11] quota: drop dq_data_lock where possible Dmitry Monakhov
2010-10-05 18:20 ` [PATCH 11/11] quota: relax dq_data_lock dq_lock locking consistency Dmitry Monakhov
2010-10-06 11:56   ` Jan Kara
2010-10-06  7:08 ` [PATCH 0/11] RFC quota scalability V1 Dmitry
2010-10-06  9:44   ` Jan Kara
2010-10-06 10:15     ` Dmitry
2010-10-06 10:47       ` Jan Kara
2010-10-10  3:50     ` Brad Boyer

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=20101006123726.GL3676@quack.suse.cz \
    --to=jack@suse.cz \
    --cc=dmonakhov@gmail.com \
    --cc=dmonakhov@openvz.org \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@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 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).