Arla 0.26/27pre4 vs. Linux 2.2.10 on SparcUltra 5

Love lha at stacken.kth.se
Fri Aug 27 17:47:35 CEST 1999


Tobias Grundmann <grundman at Informatik.Uni-Tuebingen.De> writes:

> thank you for sending the patch. Maybe I should have better mentioned again 
> that I tried the cvs version now where this patch is integrated already. Sorry.

Oh, well.
 
> The question is should I try to work on this or not? If there will be an 
> update soon this would be wasted time.

If you turn on xfs-debugging, do you ever get the logmessage caused by

xfs_syscalls.c: fhget_call()
[...] 
    XFSDEB(XDEBVFOPS, ("fhget_call: dev: %u inode: %u\n",
		       fh.dev_index, (unsigned int) fh.inode));


?

> Well my machine panics in xfs_message_installdata after calling
> xfs_fh_to_dentry which returns a defective dentry (IS_ERR(dentry)):
>  
> iterator kernel: XFS Panic: xfs_message_installdata failed to lookup
> cache file = 00/01@, errno: -22

Can you try this patch, it might be a workaround for the broken fhopen.

Love

Index: xfs_message.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/linux/xfs_message.c,v
retrieving revision 1.53
diff -u -w -u -w -r1.53 xfs_message.c
--- xfs_message.c	1999/08/21 03:44:30	1.53
+++ xfs_message.c	1999/08/27 15:39:54
@@ -46,7 +46,7 @@
 #include <xfs/xfs_fs.h>
 #include <xfs/xfs_dev.h>
 
-RCSID("$Id$");
+RCSID("$Id: xfs_message.c,v 1.53 1999/08/21 03:44:30 map Exp $");
 
 #ifdef LINUX2_1
 static void
@@ -222,12 +222,6 @@
 #ifndef LINUX2_1
 	current->fs->pwd->i_count++;
 	error = open_namei(message->cache_name, 3, 0, &vp, current->fs->pwd);
-#else
-	dentry = xfs_fh_to_dentry(&message->cache_handle);
-	XFSDEB(XDEBMSG, ("xfs_message_installdata dentry: %p\n",
-			 dentry));
-#endif /* LINUX2_1 */
-#ifndef LINUX2_1
 	if (error == 0) {
 	    if (DATA_FROM_XNODE(t)) {
 		iput(DATA_FROM_XNODE(t));
@@ -242,8 +236,22 @@
 	    memmove(t->rights, message->node.rights, sizeof(t->rights));
 	    t->anonrights = message->node.anonrights;
 	} else
-	    printk(KERN_EMERG "XFS Panic: xfs_message_installdata failed to lookup cache file = %s, error = %d\n", message->cache_name, error);
+	    printk(KERN_EMERG "XFS Panic: xfs_message_installdata failed to lookup "
+		   "cache file = %s, error = %d\n", message->cache_name, error);
 #else
+	dentry = xfs_fh_to_dentry(&message->cache_handle);
+	XFSDEB(XDEBMSG, ("xfs_message_installdata dentry: %p\n",
+			 dentry));
+	if (IS_ERR(dentry)) {
+	    printk(KERN_EMERG "XFS Panic: xfs_message_installdata failed fh_to_dentry = %s, errno: %ld\n",
+		   message->cache_name, PTR_ERR(dentry));
+	    dentry = open_namei(message->cache_name, 3, 0);
+	    if (IS_ERR(dentry)) {
+		printk(KERN_EMERG "XFS Panic: xfs_message_installdata failed open_namei, errno: %ld\n",
+		       PTR_ERR(dentry));
+		return PTR_ERR(dentry);
+	    }
+	}
 	if (!IS_ERR(dentry)) {
 	    if (DATA_FROM_XNODE(t)) {
 		dput(DATA_FROM_XNODE(t));
@@ -259,9 +267,7 @@
 	    memmove(t->id, message->node.id, sizeof(t->id));
 	    memmove(t->rights, message->node.rights, sizeof(t->rights));
 	    t->anonrights = message->node.anonrights;
-	} else {
-	    printk(KERN_EMERG "XFS Panic: xfs_message_installdata failed to lookup cache file = %s, errno: %ld\n", message->cache_name, PTR_ERR(dentry));
-	    error = ENOTTY; /* XXXXX */
+	    error = 0;
 	}
 #endif /* LINUX2_1 */
     } else {










More information about the Arla-drinkers mailing list