On Tue, Oct 19, 2010 at 5:23 PM, Felipe Franciosi <felipe@xxxxxxxxxxxx> wrote: > Dear all, > > I am experimenting on a 2.6.20.3-ubuntu1 kernel to prototype and evaluate > different methods for migrating datablocks for a given inode on the fly. > > I have created an ioctl call that implements some verifications and invokes > a function I wrote in balloc.c for such migration. > > Upon receiving a struct inode*, I retrieve the corresponding iloc using the > ext3_get_inode_iloc() function and then the struct ext3_inode* using the > ext3_raw_inode() on the iloc. I have confirmed the pointer is correct by > printing several ext3_inode relevant fields. > you've complicated things too much. all you have to do is modify EXT3_I(inode)->i_data and then call ext3_mark_inode_dirty(). the rest of the iloc and raw inode stuff is taken care of by ext3_put_inode(). > After making my modifications to the i_block array, I am finding it > impossible to commit these changes to the inode itself. > that is because your changes are being overriden by the unmodified ei->i_data. > I have tried different things such as marking the iloc.bh buffer_head as > dirty and submitting it for writing, marking the page as dirty, etc, but I > think I'm missing something more fundamental. Most of my attempts were > planned according to what I've seen inside similar code of buffer_head > manipulation. > maybe you should have looked at code that modifies inodes instead... > Can anyone shed some light on what I'm missing? > hope this helps, Amir. -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html