Re: help with ext3 reserved inode

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

 



Hi Donato,

On Wed, Jul 8, 2009 at 2:57 PM, Donato Capitella<d.capitella@xxxxxx> wrote:
> Two things:
>
> 1) the linker can't find ext3_sync_inode(), so can't I. I can only find
> the extern declaration using lxr, but there's no implementation in
> kernel 2.6.29 (according to lxr and to the linker)
>

Yes, I do see some issues there. The definition is missing completely.
try using sync_inode, the vfs layer. This is exported and you can easily
use it in your module.

> 2) Anyhow, that doesn't seem to be the real problem. If I execute this
> code passing a non-reserved inode, it works like a charm. This should
> suggest me something, but it doesn't.
>

That is really strange.
So, as per you the size is not getting updated. right?
What if you umount and remount the file system?
Check if it gets updated then.


> Now I'm stuck, again (XD)
> Thanks,
> Donato
>
> On Wed, 2009-07-08 at 14:23 +0530, SandeepKsinha wrote:
>> Hi Donato,
>>
>> On Wed, Jul 8, 2009 at 1:14 PM, Donato Capitella<d.capitella@xxxxxx> wrote:
>> > Hi there,
>> > I wrote a dummy function to write to the reserved inode. This is as far
>> > as I got and I have a few questions:
>> >
>> > /**************************************************************/
>> > void dummy_write_to_inode(struct inode *ino)
>> > {
>> >        struct buffer_head *bh;
>> >        handle_t *handle;
>> >        int err, blk;
>> >        char dummy_text[] = "The crazy fox jumps over the lazy dog!";
>> >
>> >        handle = ext3_start_journal(inode, 2);
>> >        if (IS_ERR(handle))
>> >                goto err;
>> >
>> >        /* allocate a block */
>> >        blk = ext3_new_block(handle, inode, 1, &err);
>> >        if (err)
>> >                goto err;
>> >
>> >        EXT3_I(inode)->i_data[0] = blk
>> >
>> >        /* write something to the block */
>> >        bh = sb_bread(ino->sb, blk);
>> >        if (IS_ERR(bh))
>> >                goto err;
>> >
>> >        memcpy(bh->b_data, dummy_text, sizeof(dummy_text));
>> >        mark_buffer_dirty(bh);
>> >        brelse(bh);
>> >
>> >        i_size_write(inode, sizeof(dummy_text));
>> >        mark_inode_dirty(inode);
>> >
>> ext3_sync_inode(handle, ino);
>>
>> >        ext3_journal_stop(handle);
>> >
>> >
>> > err:
>> >        /* ... error handling code ... */
>> > }
>> > /**************************************************************/
>> >
>> > For some reason, this code doesn't work as I expected. The block is
>> > actually written and at the end contains "The lazy fox jumps over the
>> > lazy dog". The problem is with the inode: it just gets partially
>> > updated. The block pointer to the first block is updated but the size
>> > stays zero. How is it possibile that half of the inode gets updated and
>> > the other half doesn't? What am I missing here?
>> >
>>
>> try syncing the inode. This should probably help.
>>
>> > Thanks,
>> > Donato
>> >
>> > p.s.: I'd also like to know if there is a "smarter" way to write to an
>> > inode that automatically allocates blocks when needed and the like...
>> >
>>
>> >
>> > --
>> > 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



[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