Linux filesystem development
 help / color / mirror / Atom feed
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,


  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