From: Roel Kluin <12o3l@tiscali.nl>
To: David Howells <dhowells@redhat.com>
Cc: hch@infradead.org, viro@ftp.linux.org.uk, torvalds@osdl.org,
akpm@osdl.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 09/31] IGET: Stop BFS from using iget() and read_inode() [try #3]
Date: Thu, 11 Oct 2007 02:54:27 +0200 [thread overview]
Message-ID: <470D7443.6030206@tiscali.nl> (raw)
In-Reply-To: <20071010214354.17535.22412.stgit@warthog.procyon.org.uk>
It is very well possible that I misunderstand the locking order here,
but FWIW:
David Howells wrote:
> diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c
> index f346eb1..76798c9 100644
> --- a/fs/bfs/inode.c
> +++ b/fs/bfs/inode.c
> @@ -32,25 +32,29 @@ MODULE_LICENSE("GPL");
>
> void dump_imap(const char *prefix, struct super_block * s);
>
> -static void bfs_read_inode(struct inode * inode)
> +struct inode *bfs_iget(struct super_block *sb, unsigned long ino)
> {
> - unsigned long ino = inode->i_ino;
> struct bfs_inode * di;
> struct buffer_head * bh;
> + struct inode *inode;
> int block, off;
>
> + inode = iget_locked(sb, ino);
after this
> + if (IS_ERR(inode))
> + return ERR_PTR(-ENOMEM);
> + if (!(inode->i_state & I_NEW))
> + return inode;
Don't you have to unlock_new_inode(inode) before returning?
> +
> if (ino < BFS_ROOT_INO || ino > BFS_SB(inode->i_sb)->si_lasti) {
> printf("Bad inode number %s:%08lx\n", inode->i_sb->s_id, ino);
> - make_bad_inode(inode);
> - return;
> + goto error;
> }
>
> block = (ino - BFS_ROOT_INO)/BFS_INODES_PER_BLOCK + 1;
> bh = sb_bread(inode->i_sb, block);
> if (!bh) {
> printf("Unable to read inode %s:%08lx\n", inode->i_sb->s_id, ino);
> - make_bad_inode(inode);
> - return;
> + goto error;
> }
>
> off = (ino - BFS_ROOT_INO) % BFS_INODES_PER_BLOCK;
> @@ -85,6 +89,12 @@ static void bfs_read_inode(struct inode * inode)
> BFS_I(inode)->i_dsk_ino = le16_to_cpu(di->i_ino); /* can be 0 so we store a copy */
>
> brelse(bh);
> + unlock_new_inode(inode);
> + return inode;
> +
> +error:
and also here?
> + iget_failed(inode);
> + return ERR_PTR(-EIO);
> }
next prev parent reply other threads:[~2007-10-11 0:54 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-10 21:43 [PATCH 00/31] Remove iget() and read_inode() [try #3] David Howells
2007-10-10 21:43 ` [PATCH 01/31] Add an ERR_CAST() macro to complement ERR_PTR and co. " David Howells
2007-10-10 21:43 ` [PATCH 02/31] Convert ERR_PTR(PTR_ERR(p)) instances to ERR_CAST(p) " David Howells
2007-10-10 21:43 ` [PATCH 03/31] IGET: Introduce a function to register iget failure " David Howells
2007-10-10 21:43 ` [PATCH 04/31] IGET: Use iget_failed() in AFS " David Howells
2007-10-10 21:43 ` [PATCH 05/31] IGET: Use iget_failed() in GFS2 " David Howells
2007-10-10 21:43 ` [PATCH 06/31] IGET: Stop AFFS from using iget() and read_inode() " David Howells
2007-10-10 21:43 ` [PATCH 07/31] IGET: Stop autofs " David Howells
2007-10-10 21:43 ` [PATCH 08/31] IGET: Stop BEFS " David Howells
2007-10-10 21:43 ` [PATCH 09/31] IGET: Stop BFS " David Howells
2007-10-11 0:54 ` Roel Kluin [this message]
2007-10-11 7:39 ` David Howells
2007-10-10 21:43 ` [PATCH 10/31] IGET: Stop CIFS " David Howells
2007-10-10 21:44 ` [PATCH 11/31] IGET: Stop EFS " David Howells
2007-10-10 21:44 ` [PATCH 12/31] IGET: Stop EXT2 " David Howells
2007-10-10 21:44 ` [PATCH 13/31] IGET: Stop EXT3 " David Howells
2007-10-10 21:44 ` [PATCH 14/31] IGET: Stop EXT4 " David Howells
2007-10-10 21:44 ` [PATCH 15/31] IGET: Stop FAT " David Howells
2007-10-10 21:44 ` [PATCH 16/31] IGET: Stop FreeVXFS " David Howells
2007-10-10 21:44 ` [PATCH 17/31] IGET: Stop FUSE " David Howells
2007-10-10 21:44 ` [PATCH 18/31] IGET: Stop HFSPLUS " David Howells
2007-10-10 21:44 ` [PATCH 19/31] IGET: Stop ISOFS from using " David Howells
2007-10-10 21:44 ` [PATCH 20/31] IGET: Stop JFFS2 from using iget() and " David Howells
2007-10-10 21:44 ` [PATCH 21/31] IGET: Stop JFS " David Howells
2007-10-10 21:45 ` [PATCH 22/31] IGET: Stop the MINIX filesystem " David Howells
2007-10-10 21:45 ` [PATCH 23/31] IGET: Stop PROCFS " David Howells
2007-10-10 21:45 ` [PATCH 24/31] IGET: Stop QNX4 " David Howells
2007-10-10 21:45 ` [PATCH 25/31] IGET: Stop ROMFS " David Howells
2007-10-10 21:45 ` [PATCH 26/31] IGET: Stop the SYSV filesystem " David Howells
2007-10-10 21:45 ` [PATCH 27/31] IGET: Stop UFS " David Howells
2007-10-10 21:45 ` [PATCH 28/31] IGET: Stop OPENPROMFS " David Howells
2007-10-10 21:45 ` [PATCH 29/31] IGET: Stop HOSTFS " David Howells
2007-10-10 21:45 ` [PATCH 30/31] IGET: Stop HPPFS " David Howells
2007-10-10 21:45 ` [PATCH 31/31] IGET: Remove iget() and the read_inode() super op as being obsolete " David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=470D7443.6030206@tiscali.nl \
--to=12o3l@tiscali.nl \
--cc=akpm@osdl.org \
--cc=dhowells@redhat.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
--cc=viro@ftp.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.