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." > -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ