• David Howells's avatar
    iget: remove iget() and the read_inode() super op as being obsolete · 12debc42
    David Howells authored
    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.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Acked-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    12debc42
Locking 21.2 KB