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