Re: block allocation for ext2_mkdir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hm.....i like these....will read up more....cannot comment anything at
the moment though.....as good as a newbie like you :-)....

On Sun, Dec 21, 2008 at 6:57 PM, Rohit Sharma <imreckless@xxxxxxxxx> wrote:
> On Sun, Dec 21, 2008 at 10:50 AM, Sandeep K Sinha
> <sandeepksinha@xxxxxxxxx> wrote:
>> Thanks a lot Peter for taking out time and looking into the issue at
>> such a deeper level.
>>
>> Thanks again,
>>
>>
>> On Sun, Dec 21, 2008 at 6:48 AM, Peter Teoh <htmldeveloper@xxxxxxxxx> wrote:
>>> On Sat, Dec 20, 2008 at 3:18 AM, Rohit Sharma <imreckless@xxxxxxxxx> wrote:
>>>> in ext2/balloc.c
>>>> i saw a function ext2_new_blocks()
>>>> its the core function to allocate blocks, it has been specified there.
>>>>
>>>> So all the blocks that are allocated in the file system is through
>>>> this function only ,
>>>> am i correct ?
>>>
>>> In this ext2_new_blocks() function, between retry_alloc: and the
>>> allocated: symbol:
>>>
>>> retry_alloc:
>>>        gdp = ext2_get_group_desc(sb, group_no, &gdp_bh);
>>>        if (!gdp)
>>>                goto io_error;
>>>
>>>        free_blocks = le16_to_cpu(gdp->bg_free_blocks_count);
>>>        /*
>>> <snip>
>>> <snip>
>>>
>>>        /*
>>>         * We may end up a bogus ealier ENOSPC error due to
>>>         * filesystem is "full" of reservations, but
>>>         * there maybe indeed free blocks avaliable on disk
>>>         * In this case, we just forget about the reservations
>>>         * just do block allocation as without reservations.
>>>         */
>>>        if (my_rsv) {
>>>                my_rsv = NULL;
>>>                windowsz = 0;
>>>                group_no = goal_group;
>>>                goto retry_alloc;
>>>        }
>>>        /* No space left on the device */
>>>        *errp = -ENOSPC;
>>>        goto out;
>>>
>>> allocated:
>>>
>>> It seemed that you can copy the chunk and modify it to your
>>> requirement - which is to allocate only from a particular block group.
>>>  And you have also to modify it so that if the group_no is not
>>> available anymore than ENOSPC must be returned.
>>>
>>> But then this is too low level.
>>>
>>> Reading Documentation/filesystem/ext2.txt, it says that:
>>>
>>> "The inode allocation code tries to assign inodes which are in the same
>>> block group as the directory in which they are first created."
>>>
>>> So if you create an API that create a directory in a particular block
>>> group, and then let the file be created naturally, it should end up in
>>> the same block group.   Just create the file, and check the inode
>>> later.   If it is not in the same block group, most likely u have run
>>> out of space within the block group.
>>>
>>> Modify at the highest possible ext2 level (API specified in
>>> ext2_file_operations, and ext2_dir_operations).
>>>
>
> At higher level , we are using the following functions.
>
> These can restrict inode allocation to a particular block group.
>
> find_group_dir()
> find_group_orlov()
> find_group_other()
>
> and for allocating data blocks for an inode
> we can use
>
> ext2_find_near()
> ext2_find_goal()
>
> Tell me if i can use some other functions for the purpose.
>
>
>>> --
>>> Regards,
>>> Peter Teoh
>>>
>>> Ernest Hemingway - "Never mistake motion for action."
>>>
>>> --
>>> To unsubscribe from this list: send an email with
>>> "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
>>> Please read the FAQ at http://kernelnewbies.org/FAQ
>>>
>>>
>>
>>
>>
>> --
>> Regards,
>> Sandeep.
>>
>>
>>
>>
>>
>>
>> "To learn is to change. Education is a process that changes the learner."
>>
>



-- 
Regards,
Peter Teoh

Ernest Hemingway - "Never mistake motion for action."

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux