All of lore.kernel.org
 help / color / mirror / Atom feed
From: Niu Yawei <yawei.niu@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@infradead.org>,
	linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
	yawei.niu@intel.com, andreas.dilger@intel.com,
	lai.siyao@intel.com
Subject: [PATCH 2/5] quota: avoid unnecessary dqget()/dqput() calls
Date: Wed, 04 Jun 2014 12:20:30 +0800	[thread overview]
Message-ID: <538E9E8E.4060903@gmail.com> (raw)
In-Reply-To: <20140603154301.GE30706@quack.suse.cz>

Avoid unnecessary dqget()/dqput() calls in __dquot_initialize(),
that will introduce global lock contention otherwise.

Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Signed-off-by: Niu Yawei <yawei.niu@intel.com>
---
 fs/quota/dquot.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 9cd5f63..a00201d 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -1400,7 +1400,7 @@ static int dquot_active(const struct inode *inode)
  */
 static void __dquot_initialize(struct inode *inode, int type)
 {
-	int cnt;
+	int cnt, init_needed = 0;
 	struct dquot *got[MAXQUOTAS];
 	struct super_block *sb = inode->i_sb;
 	qsize_t rsv;
@@ -1416,6 +1416,13 @@ static void __dquot_initialize(struct inode *inode, int type)
 		got[cnt] = NULL;
 		if (type != -1 && cnt != type)
 			continue;
+		/* The i_dquot should have been initialized in most cases,
+		 * we check it without locking here to avoid unnecessary
+		 * dqget()/dqput() calls. */
+		if (inode->i_dquot[cnt])
+			continue;
+		init_needed = 1;
+
 		switch (cnt) {
 		case USRQUOTA:
 			qid = make_kqid_uid(inode->i_uid);
@@ -1427,6 +1434,10 @@ static void __dquot_initialize(struct inode *inode, int type)
 		got[cnt] = dqget(sb, qid);
 	}
 
+	/* All required i_dquot has been initialized */
+	if (!init_needed)
+		return;
+
 	down_write(&sb_dqopt(sb)->dqptr_sem);
 	if (IS_NOQUOTA(inode))
 		goto out_err;
-- 
1.7.1



  parent reply	other threads:[~2014-06-04  4:20 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-22 10:47 [PATCH] quota: remove dqptr_sem for scalability Niu Yawei
2014-05-22 13:25 ` Jan Kara
2014-05-23  3:37   ` Niu Yawei
2014-05-27 10:13   ` [PATCH 2/3] quota: avoid unnecessary dqget()/dqput() calls Niu Yawei
2014-05-27 10:15   ` [PATCH 3/3] quota: remove dqptr_sem Niu Yawei
2014-05-23  4:02 ` [PATCH] quota: remove dqptr_sem for scalability Eric Sandeen
2014-05-23  5:22   ` Niu Yawei
2014-05-23 13:02     ` Eric Sandeen
2014-05-27 10:10 ` [PATCH 1/3] quota: protect Q_GETFMT by dqonoff_mutex Niu Yawei
2014-05-27 10:12   ` Christoph Hellwig
2014-05-27 10:28     ` Niu Yawei
2014-05-28  1:52     ` [PATCH 1/3 v2] " Niu Yawei
2014-06-02  7:32       ` Jan Kara
2014-05-28  1:53     ` [PATCH 2/3 v2] quota: avoid unnecessary dqget()/dqput() calls Niu Yawei
2014-06-02  7:42       ` Jan Kara
2014-05-28  1:55     ` [PATCH 3/3 v2] quota: remove dqptr_sem Niu Yawei
2014-05-28  2:01       ` Niu Yawei
2014-06-02  8:34       ` Jan Kara
2014-06-03  9:51         ` Niu Yawei
2014-06-03 15:43           ` Jan Kara
2014-06-04  4:19             ` [PATCH 1/5] quota: protect Q_GETFMT by dqonoff_mutex Niu Yawei
2014-06-04 15:36               ` Jan Kara
2014-06-04  4:20             ` Niu Yawei [this message]
2014-06-04  4:21             ` [PATCH 3/5] quota: simplify remove_inode_dquot_ref() Niu Yawei
2014-06-04  4:22             ` [PATCH 4/5] quota: missing lock in dqcache_shrink_scan() Niu Yawei
2014-06-04  4:23             ` [PATCH 5/5] quota: remove dqptr_sem Niu Yawei

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=538E9E8E.4060903@gmail.com \
    --to=yawei.niu@gmail.com \
    --cc=andreas.dilger@intel.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=lai.siyao@intel.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=yawei.niu@intel.com \
    /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.