[Ocfs2-tools-devel] Patch for journal truncate of ocfs2-tools.
Sunil Mushran
Sunil.Mushran at oracle.com
Wed May 16 16:51:29 PDT 2007
Go ahead.
tao.ma wrote:
> Sunil,
> Since the test script works good now, Can I also check in this
> patch using your sob?
> Sunil Mushran wrote:
>> Tao,
>>
>> Looks good. However, I would like few tests added in conjuction with
>> this.
>>
>> 1. Test for ocfs2_truncate(). Test should create a file with lots of
>> extents (using the same scheme of allocating multiple clusters but
>> appending to the file in reverse order) and then truncate it. Run fsck
>> to check correctness. We should be able to run the same basic test in
>> multiple combinations of bs/cs. For each combination, we should make the
>> tree level 0 and level 1 trees.
>>
>> 2. Specific test for resizing journals in tunefs. Test should not try to
>> stress test truncate but concentrate on ensuring that the user not
>> resize the journal in conjunction with num slot increase.
>>
>> Thanks
>> Sunil
>>
>> On Sat, 2007-04-28 at 14:11 +0800, tao.ma wrote:
>>
>>> Sunil Mushran wrote:
>>>
>>>>> From the code it seems that we used to make the journal size
>>>>> smaller only under the condition that we change the numbers of
>>>>> slots, so here we have the check of "if (!opts.num_slots)". But
>>>>> now we can decrease the journal size without touching the number
>>>>> of slots, so we shouldn't care whether we change num_slots or not.
>>>>> Am I wrong? Please point it out.
>>>>>
>>>> The code used to handle the situation in which the user extends the
>>>> journal size and adds slots at the same time. The current code cannot
>>>> handle that.
>>>>
>>>> Again, I am ok with making the two ops exclusive. As in, disallow
>>>> changing slots and changing journal files at the same time. It may
>>>> make
>>>> life easier both coding/testing wise and not take much from the user.
>>>>
>>> Sorry for not reading the code clearly about the process of changing
>>> num_slots.
>>> First paste the original code here:
>>>
>>> if (opts.jrnl_size > def_jrnl_size)
>>> printf("Changing journal size %"PRIu64" to %"PRIu64"\n",
>>> def_jrnl_size, opts.jrnl_size);
>>> else {
>>> if (!opts.num_slots) {
>>> com_err(opts.progname, 0, "Journal size %"PRIu64" "
>>> "has to be larger " "than %"PRIu64"",
>>> opts.jrnl_size, def_jrnl_size);
>>> goto unlock;
>>> }
>>> }
>>>
>>>
>>> The code is used for an additional check of journal_size. When the
>>> user want to change num_slots, tunefs will set jrnl_size equals to
>>> the default size, so that here may meet with the situation
>>> "opts.jrnl_size == def_jrnl_size" and it should't be an error.
>>> During the following steps, update_slots will add the nodes and
>>> update_journal_size will do the work of filling the new journal
>>> files with the journal header.
>>> Now as we can decrease the journal size, all the possible values of
>>> opts.jrnl_size is right. So I removed the com_err completely.
>>> As for extending the journal size and adding slots at the same time,
>>> I think they can coexist with each other, since we will add the
>>> slots and fill the journal file later.
>>> Attached is the new patch. Please review.
>>>
>>>
>>> plain text document attachment (journal_truncate.patch)
>>> Index: libocfs2/mkjournal.c
>>> ===================================================================
>>> --- libocfs2/mkjournal.c (revision 1346)
>>> +++ libocfs2/mkjournal.c (working copy)
>>> @@ -301,6 +301,19 @@ errcode_t ocfs2_make_journal(ocfs2_files
>>> ret = ocfs2_write_inode(fs, blkno, (char *)di);
>>> if (ret)
>>> goto out;
>>> + } else if (clusters < di->i_clusters) {
>>> + uint64_t new_size = clusters <<
>>> + OCFS2_RAW_SB(fs->fs_super)->s_clustersize_bits;
>>> + ret = ocfs2_truncate(fs, blkno, new_size);
>>> + if (ret)
>>> + goto out;
>>> +
>>> + ocfs2_free_cached_inode(fs, ci);
>>> + ret = ocfs2_read_cached_inode(fs, blkno, &ci);
>>> + if (ret) {
>>> + ci = NULL;
>>> + goto out;
>>> + }
>>> }
>>>
>>> ret = ocfs2_format_journal(fs, ci);
>>> Index: tunefs.ocfs2/tunefs.c
>>> ===================================================================
>>> --- tunefs.ocfs2/tunefs.c (revision 1346)
>>> +++ tunefs.ocfs2/tunefs.c (working copy)
>>> @@ -976,7 +976,7 @@ static errcode_t update_journal_size(ocf
>>> }
>>>
>>> di = (struct ocfs2_dinode *)buf;
>>> - if (num_clusters <= di->i_clusters)
>>> + if (num_clusters == di->i_clusters)
>>> continue;
>>>
>>> printf("Updating %s... ", jrnl_file);
>>> @@ -1445,17 +1445,9 @@ int main(int argc, char **argv)
>>> opts.jrnl_size = num_clusters <<
>>> OCFS2_RAW_SB(fs->fs_super)->s_clustersize_bits;
>>>
>>> - if (opts.jrnl_size > def_jrnl_size)
>>> + if (opts.jrnl_size != def_jrnl_size)
>>> printf("Changing journal size %"PRIu64" to %"PRIu64"\n",
>>> def_jrnl_size, opts.jrnl_size);
>>> - else {
>>> - if (!opts.num_slots) {
>>> - com_err(opts.progname, 0, "Journal size %"PRIu64" "
>>> - "has to be larger " "than %"PRIu64"",
>>> - opts.jrnl_size, def_jrnl_size);
>>> - goto unlock;
>>> - }
>>> - }
>>> }
>>>
>>> /* validate volume size */
>>>
>>>
>>
>>
>
>
More information about the Ocfs2-tools-devel
mailing list