[Ocfs2-devel] [PATCH 2/3] Ocfs2: Change ocfs2_prepare_refcount_change_for_del() a bit to defer blocks reservation.

tristan tristan.ye at oracle.com
Wed Jan 27 17:28:44 PST 2010


TaoMa wrote:
> Hi Tristan,
>    you'd better integrate this patch with patch 3/3. otherwise we 
> can't build successfully if we apply this one and don't apply the next 
> one(in some git bisect case).

Yes I see, here I just split the patches as small as possible to be 
logically separate,  for the convenience of your reviewing:)

I'll merge 2 and 3 definitely in final series, thanks for the reminding.


>
> Regards,
> Tao
> Tristan Ye wrote:
>> As ocfs2_prepare_refcount_change_for_del() only called from 
>> ocfs2_commit_truncate for
>> now(punching holes are going to use that soon I guess), we're safe to 
>> defer metadata
>> blocks reservation unitl ocfs2_remove_btree_range(), who is also 
>> reserving blocks for
>> extent btree adjusting, so it will be nice to do these in one go.
>>
>> Instead, it will return the blocks calculated to caller, to let him 
>> know how many extra
>> blocks for refcount tree should be reserved next.
>>
>> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
>> ---
>>  fs/ocfs2/refcounttree.c |   21 +++++++--------------
>>  fs/ocfs2/refcounttree.h |    2 +-
>>  2 files changed, 8 insertions(+), 15 deletions(-)
>>
>> diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
>> index 60287fc..42a8446 100644
>> --- a/fs/ocfs2/refcounttree.c
>> +++ b/fs/ocfs2/refcounttree.c
>> @@ -2432,8 +2432,8 @@ out:
>>   *
>>   * Normally the refcount blocks store these refcount should be
>>   * continguous also, so that we can get the number easily.
>> - * As for meta_ac, we will at most add split 2 refcount record and
>> - * 2 more refcount block, so just check it in a rough way.
>> + * We will at most add split 2 refcount records and 2 more
>> + * refcount block, so just check it in a rough way.
>>   *
>>   * Caller must hold refcount tree lock.
>>   */
>> @@ -2442,9 +2442,9 @@ int 
>> ocfs2_prepare_refcount_change_for_del(struct inode *inode,
>>                        u64 phys_blkno,
>>                        u32 clusters,
>>                        int *credits,
>> -                      struct ocfs2_alloc_context **meta_ac)
>> +                      int *ref_blocks)
>>  {
>> -    int ret, ref_blocks = 0;
>> +    int ret;
>>      struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
>>      struct ocfs2_inode_info *oi = OCFS2_I(inode);
>>      struct buffer_head *ref_root_bh = NULL;
>> @@ -2480,21 +2480,14 @@ int 
>> ocfs2_prepare_refcount_change_for_del(struct inode *inode,
>>                             &tree->rf_ci,
>>                             ref_root_bh,
>>                             start_cpos, clusters,
>> -                           &ref_blocks, credits);
>> +                           ref_blocks, credits);
>>      if (ret) {
>>          mlog_errno(ret);
>>          goto out;
>>      }
>>  
>> -    mlog(0, "reserve new metadata %d, credits = %d\n",
>> -         ref_blocks, *credits);
>> -
>> -    if (ref_blocks) {
>> -        ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(inode->i_sb),
>> -                            ref_blocks, meta_ac);
>> -        if (ret)
>> -            mlog_errno(ret);
>> -    }
>> +    mlog(0, "reserve new metadata %d blocks, credits = %d\n",
>> +         *ref_blocks, *credits);
>>  
>>  out:
>>      brelse(ref_root_bh);
>> diff --git a/fs/ocfs2/refcounttree.h b/fs/ocfs2/refcounttree.h
>> index c1d19b1..f4bf110 100644
>> --- a/fs/ocfs2/refcounttree.h
>> +++ b/fs/ocfs2/refcounttree.h
>> @@ -51,7 +51,7 @@ int ocfs2_prepare_refcount_change_for_del(struct 
>> inode *inode,
>>                        u64 phys_blkno,
>>                        u32 clusters,
>>                        int *credits,
>> -                      struct ocfs2_alloc_context **meta_ac);
>> +                      int *ref_blocks);
>>  int ocfs2_refcount_cow(struct inode *inode, struct buffer_head *di_bh,
>>                 u32 cpos, u32 write_len, u32 max_cpos);
>>  
>>   
>




More information about the Ocfs2-devel mailing list