All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
To: <viro@ZenIV.linux.org.uk>, <jack@suse.cz>, <dedekind1@gmail.com>,
	<richard.weinberger@gmail.com>
Cc: <linux-mtd@lists.infradead.org>, <linux-fsdevel@vger.kernel.org>,
	Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Subject: [PATCH v2 14/35] ubifs: extend budget for blocks
Date: Thu, 30 Jul 2015 13:48:10 +0800	[thread overview]
Message-ID: <1438235311-23788-15-git-send-email-yangds.fnst@cn.fujitsu.com> (raw)
In-Reply-To: <1438235311-23788-1-git-send-email-yangds.fnst@cn.fujitsu.com>

Currently, budget subsystem in ubifs are working on budgeting
page-by-page. But sometimes we want to budget a space for one
block, e.g for quota file writing. So this commit extend budget
subsystem to support blocks budgeting and releasing.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
---
 fs/ubifs/budget.c | 4 ++++
 fs/ubifs/debug.c  | 2 ++
 fs/ubifs/super.c  | 1 +
 fs/ubifs/ubifs.h  | 5 +++++
 4 files changed, 12 insertions(+)

diff --git a/fs/ubifs/budget.c b/fs/ubifs/budget.c
index 11a11b3..ba4e530 100644
--- a/fs/ubifs/budget.c
+++ b/fs/ubifs/budget.c
@@ -397,6 +397,8 @@ static int calc_data_growth(const struct ubifs_info *c,
 		data_growth += c->bi.page_budget;
 	if (req->new_dent)
 		data_growth += c->bi.dent_budget;
+	if (req->new_block_num)
+		data_growth += c->bi.block_budget * req->new_block_num;
 	data_growth += req->new_ino_d;
 	return data_growth;
 }
@@ -418,6 +420,8 @@ static int calc_dd_growth(const struct ubifs_info *c,
 		dd_growth += c->bi.inode_budget << (req->dirtied_ino - 1);
 	if (req->mod_dent)
 		dd_growth += c->bi.dent_budget;
+	if (req->dirtied_block_num)
+		dd_growth += c->bi.block_budget * req->dirtied_block_num;
 	dd_growth += req->dirtied_ino_d;
 	return dd_growth;
 }
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c
index 4c46a98..cafd592 100644
--- a/fs/ubifs/debug.c
+++ b/fs/ubifs/debug.c
@@ -556,6 +556,8 @@ void ubifs_dump_budget_req(const struct ubifs_budget_req *req)
 	       req->new_page, req->dirtied_page);
 	pr_err("\tnew_dent    %d, mod_dent     %d\n",
 	       req->new_dent, req->mod_dent);
+	pr_err("\tnew_block   %d, dirtied_block %d\n",
+	       req->new_block_num, req->dirtied_block_num);
 	pr_err("\tidx_growth  %d\n", req->idx_growth);
 	pr_err("\tdata_growth %d dd_growth     %d\n",
 	       req->data_growth, req->dd_growth);
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index c643261..eb04e42 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -698,6 +698,7 @@ static int init_constants_sb(struct ubifs_info *c)
 	c->bi.page_budget = UBIFS_MAX_DATA_NODE_SZ * UBIFS_BLOCKS_PER_PAGE;
 	c->bi.inode_budget = UBIFS_INO_NODE_SZ;
 	c->bi.dent_budget = UBIFS_MAX_DENT_NODE_SZ;
+	c->bi.block_budget = UBIFS_MAX_DATA_NODE_SZ;
 
 	/*
 	 * When the amount of flash space used by buds becomes
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index 3b5e932..71b79b5 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -861,6 +861,8 @@ struct ubifs_compressor {
  * @new_ino_d: how much data newly created inode contains
  * @dirtied_ino: how many inodes the operation makes dirty
  * @dirtied_ino_d: how much data dirtied inode contains
+ * @new_block_num: how many new blocks
+ * @dirtied_block_num: how many dirtied blocks
  * @idx_growth: how much the index will supposedly grow
  * @data_growth: how much new data the operation will supposedly add
  * @dd_growth: how much data that makes other data dirty the operation will
@@ -902,6 +904,8 @@ struct ubifs_budget_req {
 	unsigned int dirtied_ino;
 	unsigned int dirtied_ino_d;
 #endif
+	unsigned int new_block_num;
+	unsigned int dirtied_block_num;
 	int idx_growth;
 	int data_growth;
 	int dd_growth;
@@ -983,6 +987,7 @@ struct ubifs_budg_info {
 	int page_budget;
 	int inode_budget;
 	int dent_budget;
+	int block_budget;
 };
 
 struct ubifs_debug_info;
-- 
1.8.4.2


  parent reply	other threads:[~2015-07-30  5:54 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-30  5:47 [PATCH v2 00/35] Add quota supporting in ubifs Dongsheng Yang
2015-07-30  5:47 ` [PATCH v2 01/35] fs: introduce a ->s_cdev field into struct super_block Dongsheng Yang
2015-07-30  5:47 ` [PATCH v2 02/35] fs: cleanup: remove the blank line before EXPORT_SYMBOL Dongsheng Yang
2015-07-30  5:47 ` [PATCH v2 03/35] fs: super: cleanup: make the comment of each function aligned Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 04/35] fs: super: consolidate the get_super class functions Dongsheng Yang
2015-08-03 19:50   ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 05/35] fs: super: introduce a get_super_cdev to get super by a cdev reference Dongsheng Yang
2015-08-03 19:51   ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 06/35] fs: super: introduce a get_super_cdev_thawed to get sb by " Dongsheng Yang
2015-08-03 19:56   ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 07/35] fs: char_dev: introduce cd_acquire function to acquire cdev Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 08/35] fs: introduce a __lookup_dev for internal using Dongsheng Yang
2015-08-03 20:08   ` Jan Kara
2015-08-03 20:13     ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 09/35] fs: char_dev: introduce lookup_cdev to get cdev by pathname Dongsheng Yang
2015-08-03 20:08   ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 10/35] fs: dquot: skip invalidate_bdev if bdev is NULL Dongsheng Yang
2015-08-03 20:04   ` Jan Kara
2015-07-30  5:48 ` [PATCH v2 11/35] fs: quota: make quota support fs which is running on char dev Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 12/35] ubi: introduce a interface to get cdev in ubi_volume Dongsheng Yang
2015-08-03 20:56   ` Richard Weinberger
2015-07-30  5:48 ` [PATCH v2 13/35] ubifs: fix a typo in comment of ubifs_budget_req Dongsheng Yang
2015-08-03 20:56   ` Richard Weinberger
2015-08-10  8:21   ` Artem Bityutskiy
2015-07-30  5:48 ` Dongsheng Yang [this message]
2015-08-03 20:56   ` [PATCH v2 14/35] ubifs: extend budget for blocks Richard Weinberger
2015-08-21  5:59     ` Dongsheng Yang
2015-08-21  7:12       ` Richard Weinberger
2015-08-21  7:55         ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 15/35] ubifs: fill sb->s_cdev in ubifs_fill_super() Dongsheng Yang
2015-08-03 20:58   ` Richard Weinberger
2015-07-30  5:48 ` [PATCH v2 16/35] ubifs: fill ->s_dev in ubifs_fill_super Dongsheng Yang
2015-08-03 21:00   ` Richard Weinberger
2015-07-30  5:48 ` [PATCH v2 17/35] ubifs: export read_block() from file.c Dongsheng Yang
2015-08-03 21:13   ` Richard Weinberger
2015-08-03 21:29     ` Richard Weinberger
2015-08-07  3:15       ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 18/35] ubifs: introduce quota related mount options Dongsheng Yang
2015-08-03 21:13   ` Richard Weinberger
2015-08-07  3:17     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 19/35] ubifs: budget for inode in ubifs_dirty_inode if necessary Dongsheng Yang
2015-08-03 21:13   ` Richard Weinberger
2015-08-07  3:18     ` Dongsheng Yang
2015-08-05  8:11   ` Artem Bityutskiy
2015-08-06  6:46     ` Dongsheng Yang
2015-08-06  7:26       ` Artem Bityutskiy
2015-08-06  7:30         ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 20/35] ubifs: implement IO functions for quota files Dongsheng Yang
2015-08-03 21:46   ` Richard Weinberger
2015-08-05  1:21     ` Dongsheng Yang
2015-08-07  3:24     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 21/35] ubifs: disable quota in ubifs_put_super Dongsheng Yang
2015-08-08 21:08   ` Richard Weinberger
2015-08-10  2:03     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 22/35] ubifs: write quota back in ubifs_sync Dongsheng Yang
2015-08-08 21:17   ` Richard Weinberger
2015-07-30  5:48 ` [PATCH v2 23/35] ubifs: set/clear MS_RDONLY properly in ubifs_remount Dongsheng Yang
2015-08-08 21:17   ` Richard Weinberger
2015-08-10  2:46     ` Dongsheng Yang
2015-08-24  1:29       ` Dongsheng Yang
2015-08-24  7:02         ` Artem Bityutskiy
2015-08-24  7:12           ` Dongsheng Yang
2015-08-24  7:26             ` Artem Bityutskiy
2015-08-27  2:52               ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 24/35] ubifs: suspend & resume quota " Dongsheng Yang
2015-08-08 21:24   ` Richard Weinberger
2015-08-10  2:04     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 25/35] ubifs: record quota information about inode in ubifs_new_inode Dongsheng Yang
2015-08-08 21:43   ` Richard Weinberger
2015-08-10  2:13     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 26/35] ubifs: free quota inode information in ubifs_evict_inode Dongsheng Yang
2015-08-08 21:51   ` Richard Weinberger
2015-08-10  3:09     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 27/35] ubifs: alloc quota space in ubifs_write_begin Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 28/35] ubifs: free quota space in do_truncation Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 29/35] ubifs: free quota space when deleting a file Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 30/35] ubifs: adapt quota space informatin in do_setattr Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 31/35] ubifs: transfer quota information in changing owner or group Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 32/35] ubifs: write inode in ubifs_quota_write if we are appending Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 33/35] fs: introduce a get_qsize() to file_operations Dongsheng Yang
2015-08-03 20:15   ` Jan Kara
2015-08-07  3:30     ` Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 34/35] ubifs: implement ubifs_get_qsize to get quota size in ubifs Dongsheng Yang
2015-07-30  5:48 ` [PATCH v2 35/35] ubifs: make ubifs to support quota Dongsheng Yang

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=1438235311-23788-15-git-send-email-yangds.fnst@cn.fujitsu.com \
    --to=yangds.fnst@cn.fujitsu.com \
    --cc=dedekind1@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=richard.weinberger@gmail.com \
    --cc=viro@ZenIV.linux.org.uk \
    /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.