From: Chris Mason <mason@suse.com>
To: Jan Harkes <jaharkes@cs.cmu.edu>
Cc: Steve Lord <lord@sgi.com>, Alexander Viro <viro@math.psu.edu>,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH/RFC] Replacing iget4/read_inode2 with icreate
Date: 30 Apr 2002 12:40:33 -0400 [thread overview]
Message-ID: <1020184833.6770.285.camel@tiny> (raw)
In-Reply-To: <20020430161415.GA23998@ravel.coda.cs.cmu.edu>
Your reiserfs bits work, but I prefer reiserfs_read_locked_inode over
reiserfs_init_inode2 (we've got init_inode and reiserfs_init_inode it
got confusing....
Below is a slightly updated version (reiserfs parts only), the only
difference is the name change, and it is against the reiserfs patch the
namesys guys posted yesterday there was a trivial reject in
fs/reiserfs/super.c.
These work for me under light testing on 2.5.11 + Viro's fastwalk fixes
+ reiserfs update.
-chris
===== fs/reiserfs/inode.c 1.51 vs edited =====
--- 1.51/fs/reiserfs/inode.c Fri Apr 26 11:09:07 2002
+++ edited/fs/reiserfs/inode.c Tue Apr 30 09:31:28 2002
@@ -30,7 +30,7 @@
lock_kernel() ;
/* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */
- if (INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */
+ if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */
down (&inode->i_sem);
journal_begin(&th, inode->i_sb, jbegin_count) ;
@@ -1118,21 +1118,22 @@
}
+int reiserfs_init_inode (struct inode * inode, void *p)
+{
+ struct reiserfs_iget4_args *args = (struct reiserfs_iget4_args *)p ;
+ INODE_PKEY(inode)->k_dir_id = cpu_to_le32(args->objectid);
+ return 0;
+}
+
/* looks for stat data in the tree, and fills up the fields of in-core
inode stat data fields */
-void reiserfs_read_inode2 (struct inode * inode, void *p)
+void reiserfs_read_locked_inode (struct inode * inode, struct reiserfs_iget4_args *args)
{
INITIALIZE_PATH (path_to_sd);
struct cpu_key key;
- struct reiserfs_iget4_args *args = (struct reiserfs_iget4_args *)p ;
unsigned long dirino;
int retval;
- if (!p) {
- reiserfs_make_bad_inode(inode) ;
- return;
- }
-
dirino = args->objectid ;
/* set version 1, version 2 could be used too, because stat data
@@ -1202,8 +1203,7 @@
* inode numbers (objectids) are distinguished by parent directory ids.
*
*/
-static int reiserfs_find_actor( struct inode *inode,
- unsigned long inode_no, void *opaque )
+static int reiserfs_find_actor( struct inode *inode, void *opaque )
{
struct reiserfs_iget4_args *args;
@@ -1218,10 +1218,15 @@
struct reiserfs_iget4_args args ;
args.objectid = key->on_disk_key.k_dir_id ;
- inode = iget4 (s, key->on_disk_key.k_objectid,
- reiserfs_find_actor, (void *)(&args));
+ inode = icreate (s, key->on_disk_key.k_objectid,
+ reiserfs_find_actor, reiserfs_init_inode, (void *)(&args));
if (!inode)
return ERR_PTR(-ENOMEM) ;
+
+ if (inode->i_state & I_NEW) {
+ reiserfs_read_locked_inode(inode, &args);
+ unlock_new_inode(inode);
+ }
if (comp_short_keys (INODE_PKEY (inode), key) || is_bad_inode (inode)) {
/* either due to i/o error or a stale NFS handle */
===== fs/reiserfs/super.c 1.43 vs edited =====
--- 1.43/fs/reiserfs/super.c Mon Apr 29 08:55:12 2002
+++ edited/fs/reiserfs/super.c Tue Apr 30 09:31:49 2002
@@ -471,7 +471,6 @@
alloc_inode: reiserfs_alloc_inode,
destroy_inode: reiserfs_destroy_inode,
read_inode: reiserfs_read_inode,
- read_inode2: reiserfs_read_inode2,
write_inode: reiserfs_write_inode,
dirty_inode: reiserfs_dirty_inode,
delete_inode: reiserfs_delete_inode,
@@ -1148,10 +1147,16 @@
s->s_flags |= MS_RDONLY ;
}
args.objectid = REISERFS_ROOT_PARENT_OBJECTID ;
- root_inode = iget4 (s, REISERFS_ROOT_OBJECTID, 0, (void *)(&args));
+ root_inode = icreate (s, REISERFS_ROOT_OBJECTID, 0, reiserfs_init_inode,
+ (void *)(&args));
if (!root_inode) {
printk ("jmacd-10: reiserfs_fill_super: get root inode failed\n");
goto error;
+ }
+
+ if (root_inode->i_state & I_NEW) {
+ reiserfs_read_locked_inode(root_inode, &args);
+ unlock_new_inode(root_inode);
}
s->s_root = d_alloc_root(root_inode);
===== include/linux/reiserfs_fs.h 1.32 vs edited =====
--- 1.32/include/linux/reiserfs_fs.h Fri Apr 26 12:03:26 2002
+++ edited/include/linux/reiserfs_fs.h Tue Apr 30 10:28:52 2002
@@ -1822,7 +1822,8 @@
/* inode.c */
void reiserfs_read_inode (struct inode * inode) ;
-void reiserfs_read_inode2(struct inode * inode, void *p) ;
+int reiserfs_init_inode(struct inode * inode, void *p) ;
+void reiserfs_read_locked_inode(struct inode * inode, struct reiserfs_iget4_args *args) ;
void reiserfs_delete_inode (struct inode * inode);
void reiserfs_write_inode (struct inode * inode, int) ;
struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, __u32 *data,
next prev parent reply other threads:[~2002-04-30 16:40 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-04-29 23:24 [PATCH/RFC] Replacing iget4/read_inode2 with icreate Jan Harkes
2002-04-30 6:12 ` Christoph Hellwig
2002-04-30 14:52 ` Jan Harkes
2002-04-30 15:50 ` Jan Harkes
2002-04-30 15:54 ` Steve Lord
2002-04-30 16:05 ` Steve Lord
2002-04-30 16:14 ` Jan Harkes
2002-04-30 16:29 ` Steve Lord
2002-04-30 16:40 ` Chris Mason [this message]
2002-04-30 17:03 ` Jan Harkes
2002-05-01 2:42 ` Jan Harkes
2002-05-01 3:25 ` Alexander Viro
2002-05-01 3:47 ` Jan Harkes
2002-05-01 16:17 ` Kai Henningsen
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=1020184833.6770.285.camel@tiny \
--to=mason@suse.com \
--cc=jaharkes@cs.cmu.edu \
--cc=linux-fsdevel@vger.kernel.org \
--cc=lord@sgi.com \
--cc=viro@math.psu.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox