Re: help with ext3 reserved inode

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

 



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)

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.

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
> >
> >
> 
> 
> 


--
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