[Pvfs2-developers] kmod no read_inode or iget
Sam Lang
slang at mcs.anl.gov
Tue Feb 19 02:24:27 EST 2008
On Feb 16, 2008, at 5:46 PM, Pete Wyckoff wrote:
> If anyone is excited about tracking the latest kernels,
Oh, so very.
> pvfs kmod
> breaks on 2.6.25-rc1 and later due to this commit. It's a bit too
> deep for me to handle.
More config checks and #ifdefs. We basically can call our read_inode
directly (which does a getattr to fill in the inode) if its no longer
part of the super_operations struct. We were doing this before, but
through the actual s_ops->read_inode pointer. Can you try the
attached patch? It compiles against the latest tree, but I don't have
a machine that I can run that kernel on at the moment.
Also, I didn't include configure in this patch so you'll have to ./
prepare.
The #ifdefs around the iget4, iget5_locked, etc. code are especially
nasty. iget5_locked has been defined in all versions of the 2.6
kernel, so it would be really nice to just whack those #ifdefs if we
were to decide not to support 2.4 kernels in future releases.
Thanks,
-sam
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nomo-read-inode.patch
Type: application/octet-stream
Size: 1596 bytes
Desc: not available
Url : http://www.beowulf-underground.org/pipermail/pvfs2-developers/attachments/20080219/e89b3aed/nomo-read-inode.obj
-------------- next part --------------
>
>
> -- Pete
>
>
> commit 12debc4248a4a7f1873e47cda2cdd7faca80b099
> Author: David Howells <dhowells at redhat.com>
> Date: Thu Feb 7 00:15:52 2008 -0800
>
> iget: remove iget() and the read_inode() super op as being obsolete
>
> Remove the old iget() call and the read_inode() superblock operation
> it uses
> as these are really obsolete, and the use of read_inode() does not
> produce
> proper error handling (no distinction between ENOMEM and EIO when
> marking an
> inode bad).
>
> Furthermore, this removes the temptation to use iget() to find an
> inode by
> number in a filesystem from code outside that filesystem.
>
> iget_locked() should be used instead. A new function is added in an
> earlier
> patch (iget_failed) that is to be called to mark an inode as bad,
> unlock it
> and release it should the get routine fail. Mark iget() and
> read_inode() as
> being obsolete and remove references to them from the documentation.
>
> Typically a filesystem will be modified such that the read_inode
> function
> becomes an internal iget function, for example the following:
>
> void thingyfs_read_inode(struct inode *inode)
> {
> ...
> }
>
> would be changed into something like:
>
> struct inode *thingyfs_iget(struct super_block *sp, unsigned long
> ino)
> {
> struct inode *inode;
> int ret;
>
> inode = iget_locked(sb, ino);
> if (!inode)
> return ERR_PTR(-ENOMEM);
> if (!(inode->i_state & I_NEW))
> return inode;
>
> ...
> unlock_new_inode(inode);
> return inode;
> error:
> iget_failed(inode);
> return ERR_PTR(ret);
> }
>
> and then thingyfs_iget() would be called rather than iget(), for
> example:
>
> ret = -EINVAL;
> inode = iget(sb, ino);
> if (!inode || is_bad_inode(inode))
> goto error;
>
> becomes:
>
> inode = thingyfs_iget(sb, ino);
> if (IS_ERR(inode)) {
> ret = PTR_ERR(inode);
> goto error;
> }
>
> Note that is_bad_inode() does not need to be called. The error
> returned by
> thingyfs_iget() should render it unnecessary.
>
> _______________________________________________
> Pvfs2-developers mailing list
> Pvfs2-developers at beowulf-underground.org
> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
>
More information about the Pvfs2-developers
mailing list