From: Tao Ma <tm@tao.ma>
To: linux-ext4@vger.kernel.org, Zheng Liu <wenqing.lz@taobao.com>,
Theodore Ts'o <tytso@mit.edu>, Jan kara <jack@suse.cz>
Subject: Re: [PATCH 8/9] ext4: adjust some functions for reclaiming extents from extent status tree
Date: Mon, 18 Feb 2013 10:10:19 +0800 [thread overview]
Message-ID: <51218D8B.9020704@tao.ma> (raw)
In-Reply-To: <20130217163323.GA18354@gmail.com>
Hi Zheng,
On 02/18/2013 12:33 AM, Zheng Liu wrote:
> On Mon, Feb 18, 2013 at 12:27:53AM +0800, Zheng Liu wrote:
>> From: Zheng Liu <wenqing.lz@taobao.com>
>>
>> This commit changes some interfaces in extent status tree because we
>> need to use inode to count the cached objects in a extent status tree.
>>
>> Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
>> Cc: "Theodore Ts'o" <tytso@mit.edu>
>> Cc: Jan kara <jack@suse.cz>
>
> Oops, I forgot to add 'v6' in subject. The patch itself is right.
You can use git format-patch --subject-prefix="PATCH V6" to create this
series of subjects automatically.
Thanks,
Tao
>
> Regards,
> - Zheng
>
>> ---
>> fs/ext4/extents_status.c | 50 +++++++++++++++++++++++-------------------------
>> 1 file changed, 24 insertions(+), 26 deletions(-)
>>
>> diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
>> index 473a935..3021858 100644
>> --- a/fs/ext4/extents_status.c
>> +++ b/fs/ext4/extents_status.c
>> @@ -142,9 +142,8 @@
>>
>> static struct kmem_cache *ext4_es_cachep;
>>
>> -static int __es_insert_extent(struct ext4_es_tree *tree,
>> - struct extent_status *newes);
>> -static int __es_remove_extent(struct ext4_es_tree *tree, ext4_lblk_t lblk,
>> +static int __es_insert_extent(struct inode *inode, struct extent_status *newes);
>> +static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
>> ext4_lblk_t end);
>>
>> int __init ext4_init_es(void)
>> @@ -285,7 +284,8 @@ out:
>> }
>>
>> static struct extent_status *
>> -ext4_es_alloc_extent(ext4_lblk_t lblk, ext4_lblk_t len, ext4_fsblk_t pblk)
>> +ext4_es_alloc_extent(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len,
>> + ext4_fsblk_t pblk)
>> {
>> struct extent_status *es;
>> es = kmem_cache_alloc(ext4_es_cachep, GFP_ATOMIC);
>> @@ -297,7 +297,7 @@ ext4_es_alloc_extent(ext4_lblk_t lblk, ext4_lblk_t len, ext4_fsblk_t pblk)
>> return es;
>> }
>>
>> -static void ext4_es_free_extent(struct extent_status *es)
>> +static void ext4_es_free_extent(struct inode *inode, struct extent_status *es)
>> {
>> kmem_cache_free(ext4_es_cachep, es);
>> }
>> @@ -326,8 +326,9 @@ static int ext4_es_can_be_merged(struct extent_status *es1,
>> }
>>
>> static struct extent_status *
>> -ext4_es_try_to_merge_left(struct ext4_es_tree *tree, struct extent_status *es)
>> +ext4_es_try_to_merge_left(struct inode *inode, struct extent_status *es)
>> {
>> + struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
>> struct extent_status *es1;
>> struct rb_node *node;
>>
>> @@ -339,7 +340,7 @@ ext4_es_try_to_merge_left(struct ext4_es_tree *tree, struct extent_status *es)
>> if (ext4_es_can_be_merged(es1, es)) {
>> es1->es_len += es->es_len;
>> rb_erase(&es->rb_node, &tree->root);
>> - ext4_es_free_extent(es);
>> + ext4_es_free_extent(inode, es);
>> es = es1;
>> }
>>
>> @@ -347,8 +348,9 @@ ext4_es_try_to_merge_left(struct ext4_es_tree *tree, struct extent_status *es)
>> }
>>
>> static struct extent_status *
>> -ext4_es_try_to_merge_right(struct ext4_es_tree *tree, struct extent_status *es)
>> +ext4_es_try_to_merge_right(struct inode *inode, struct extent_status *es)
>> {
>> + struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
>> struct extent_status *es1;
>> struct rb_node *node;
>>
>> @@ -360,15 +362,15 @@ ext4_es_try_to_merge_right(struct ext4_es_tree *tree, struct extent_status *es)
>> if (ext4_es_can_be_merged(es, es1)) {
>> es->es_len += es1->es_len;
>> rb_erase(node, &tree->root);
>> - ext4_es_free_extent(es1);
>> + ext4_es_free_extent(inode, es1);
>> }
>>
>> return es;
>> }
>>
>> -static int __es_insert_extent(struct ext4_es_tree *tree,
>> - struct extent_status *newes)
>> +static int __es_insert_extent(struct inode *inode, struct extent_status *newes)
>> {
>> + struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
>> struct rb_node **p = &tree->root.rb_node;
>> struct rb_node *parent = NULL;
>> struct extent_status *es;
>> @@ -389,14 +391,14 @@ static int __es_insert_extent(struct ext4_es_tree *tree,
>> ext4_es_is_unwritten(es))
>> ext4_es_store_pblock(es,
>> newes->es_pblk);
>> - es = ext4_es_try_to_merge_left(tree, es);
>> + es = ext4_es_try_to_merge_left(inode, es);
>> goto out;
>> }
>> p = &(*p)->rb_left;
>> } else if (newes->es_lblk > ext4_es_end(es)) {
>> if (ext4_es_can_be_merged(es, newes)) {
>> es->es_len += newes->es_len;
>> - es = ext4_es_try_to_merge_right(tree, es);
>> + es = ext4_es_try_to_merge_right(inode, es);
>> goto out;
>> }
>> p = &(*p)->rb_right;
>> @@ -406,7 +408,7 @@ static int __es_insert_extent(struct ext4_es_tree *tree,
>> }
>> }
>>
>> - es = ext4_es_alloc_extent(newes->es_lblk, newes->es_len,
>> + es = ext4_es_alloc_extent(inode, newes->es_lblk, newes->es_len,
>> newes->es_pblk);
>> if (!es)
>> return -ENOMEM;
>> @@ -430,7 +432,6 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
>> ext4_lblk_t len, ext4_fsblk_t pblk,
>> unsigned long long status)
>> {
>> - struct ext4_es_tree *tree;
>> struct extent_status newes;
>> ext4_lblk_t end = lblk + len - 1;
>> int err = 0;
>> @@ -447,11 +448,10 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
>> trace_ext4_es_insert_extent(inode, &newes);
>>
>> write_lock(&EXT4_I(inode)->i_es_lock);
>> - tree = &EXT4_I(inode)->i_es_tree;
>> - err = __es_remove_extent(tree, lblk, end);
>> + err = __es_remove_extent(inode, lblk, end);
>> if (err != 0)
>> goto error;
>> - err = __es_insert_extent(tree, &newes);
>> + err = __es_insert_extent(inode, &newes);
>>
>> error:
>> write_unlock(&EXT4_I(inode)->i_es_lock);
>> @@ -521,9 +521,10 @@ out:
>> return found;
>> }
>>
>> -static int __es_remove_extent(struct ext4_es_tree *tree, ext4_lblk_t lblk,
>> - ext4_lblk_t end)
>> +static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
>> + ext4_lblk_t end)
>> {
>> + struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
>> struct rb_node *node;
>> struct extent_status *es;
>> struct extent_status orig_es;
>> @@ -561,7 +562,7 @@ static int __es_remove_extent(struct ext4_es_tree *tree, ext4_lblk_t lblk,
>> ext4_es_store_pblock(&newes, block);
>> }
>> ext4_es_store_status(&newes, ext4_es_status(&orig_es));
>> - err = __es_insert_extent(tree, &newes);
>> + err = __es_insert_extent(inode, &newes);
>> if (err) {
>> es->es_lblk = orig_es.es_lblk;
>> es->es_len = orig_es.es_len;
>> @@ -590,7 +591,7 @@ static int __es_remove_extent(struct ext4_es_tree *tree, ext4_lblk_t lblk,
>> while (es && ext4_es_end(es) <= end) {
>> node = rb_next(&es->rb_node);
>> rb_erase(&es->rb_node, &tree->root);
>> - ext4_es_free_extent(es);
>> + ext4_es_free_extent(inode, es);
>> if (!node) {
>> es = NULL;
>> break;
>> @@ -622,7 +623,6 @@ out:
>> int ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
>> ext4_lblk_t len)
>> {
>> - struct ext4_es_tree *tree;
>> ext4_lblk_t end;
>> int err = 0;
>>
>> @@ -633,10 +633,8 @@ int ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
>> end = lblk + len - 1;
>> BUG_ON(end < lblk);
>>
>> - tree = &EXT4_I(inode)->i_es_tree;
>> -
>> write_lock(&EXT4_I(inode)->i_es_lock);
>> - err = __es_remove_extent(tree, lblk, end);
>> + err = __es_remove_extent(inode, lblk, end);
>> write_unlock(&EXT4_I(inode)->i_es_lock);
>> ext4_es_print_tree(inode);
>> return err;
>> --
>> 1.7.12.rc2.18.g61b472e
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2013-02-18 2:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-17 16:27 [PATCH 0/9 v6] ext4: extent status tree (step2) Zheng Liu
2013-02-17 16:27 ` [PATCH 1/9 v6] ext4: refine extent status tree Zheng Liu
2013-02-17 16:27 ` [PATCH 2/9 v6] ext4: add physical block and status member into " Zheng Liu
2013-02-17 16:27 ` [PATCH 3/9 v6] ext4: ext4_es_find_extent improvement Zheng Liu
2013-02-17 16:27 ` [PATCH 4/9 v6] ext4: let ext4_ext_map_blocks return EXT4_MAP_UNWRITTEN flag Zheng Liu
2013-02-17 16:27 ` [PATCH 5/9 v6] ext4: track all extent status in extent status tree Zheng Liu
2013-02-17 16:27 ` [PATCH 6/9 v6] ext4: lookup block mapping " Zheng Liu
2013-02-17 16:27 ` [PATCH 7/9 v6] ext4: remove single extent cache Zheng Liu
2013-02-17 16:27 ` [PATCH 8/9] ext4: adjust some functions for reclaiming extents from extent status tree Zheng Liu
2013-02-17 16:33 ` Zheng Liu
2013-02-18 2:10 ` Tao Ma [this message]
2013-02-18 3:54 ` Zheng Liu
2013-02-17 16:27 ` [PATCH 9/9 v6] ext4: reclaim " Zheng Liu
2013-02-18 5:38 ` [PATCH 0/9 v6] ext4: extent status tree (step2) Theodore Ts'o
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=51218D8B.9020704@tao.ma \
--to=tm@tao.ma \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=wenqing.lz@taobao.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.