Re: LTP ustat01 test fails on NFSROOT

Previous thread: Re: [PATCH 11/12] NET: fix subqueue bugs by Jeff Garzik on Tuesday, October 23, 2007 - 6:40 pm. (3 messages)

Next thread: [PATCH] IA64/perfmon: kill dead code, clean irq handling by Jeff Garzik on Tuesday, October 23, 2007 - 7:09 pm. (5 messages)
To: Linux Kernel Mailing List <linux-kernel@...>
Cc: <trond.myklebust@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Tuesday, October 23, 2007 - 6:52 pm

I'm looking into an issue with LTP's ustat01 & ustat02 tests in which
they report the following:

ustat01 1 FAIL : ustat(2) failed and setthe errno to 116 :
Stale NFS file handle
ustat02 2 FAIL : ustat(2) failed to produce expected error;
14, errno: EFAULT and got 116

It appears sometime between 2.6.21 and 2.6.22-rc1 some changes to NFS
got introduced that cause this.

was wondering about any ideas while I try to debug what's going on.

thanks

- k
-

To: Kumar Gala <galak@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Tuesday, October 23, 2007 - 9:21 pm

I'm seeing zero problems with the latest checkouts from Linus' git tree.
Mind giving us some more details?

'strace' output would be useful, as would the standard NFS list of
client mount options, server export options, details on how your
exported partition is set up on the server, etc...

Trond

-

To: Trond Myklebust <trond.myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Wednesday, October 24, 2007 - 1:05 am

I tried 2.6.24-rc1 w/the same result.

The system is a 32-bit PPC embedded board that we mounting the rootfs
over nfs on.

strace:

stat64("/", {st_dev=makedev(0, 14), st_ino=58821800, st_mode=S_IFDIR|
0775, st_nlink=18, st_uid=500, st_gid=500, st_blksize=4096,
st_blocks=8, st_size=4096, st_atime=2007/10/23-22:43:30,
st_mtime=2007/10/18-19:51:19, st_ctime=2007/10/18-19:51:19}) = 0
ustat(0xe, 0x1001a008) = -1 ESTALE (Stale NFS file
handle)
fstat64(1, {st_dev=makedev(0, 14), st_ino=58821964, st_mode=S_IFCHR|
0600, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=0,
st_rdev=makedev(4, 64), st_atime=2007/10/16-18:32:59,
st_mtime=2007/10/16-18:32:59, st_ctime=2007/10/24-05:03:34}) = 0

Info on the server:

[root@ducky ~]# exportfs -v
/ <world>(rw,async,wdelay,no_root_squash,no_subtree_check)
[root@ducky ~]# uname -a
Linux ducky.am.freescale.net 2.6.22.5-76.fc7 #1 SMP Thu Aug 30
13:04:34 EDT 2007 ppc64 ppc64 ppc64 GNU/Linux

On the host system:

(not sure how to get client mount options, mount reports:

%root% on / type unknown (rw)

-sh-2.05b# cat /proc/cmdline
root=/dev/nfs rw nfsroot=192.168.1.15:/home/galak/ltib-joust-8572/
rootfs
ip=192.168.1.147:192.168.1.15:192.168.1.1:255.255.254.0:rocky:eth0:off c
onsole=ttyS0,115200

If there is some other info that would be useful please let me know.
-

To: Trond Myklebust <trond.myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Thursday, October 25, 2007 - 11:59 am

any ideas? any other debug info needed?

- k
-

To: Kumar Gala <galak@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Thursday, October 25, 2007 - 1:59 pm

Could you please try the following patch?

Cheers
Trond
--------------------------------- CUT HERE -----------------------------
From: Trond Myklebust <Trond.Myklebust@netapp.com>
Date: Thu, 25 Oct 2007 13:56:10 -0400
NFS: Fix the ustat() regression

Since 2.6.18, the superblock sb->s_root has been a dummy dentry with a
dummy inode. This breaks ustat(), which actually uses sb->s_root in a
vfstat() call.

Fix this by making the s_root a dummy alias to the directory inode that was
used when creating the superblock.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---

fs/nfs/getroot.c | 81 ++++++++++++++++++------------------------------------
1 files changed, 27 insertions(+), 54 deletions(-)

diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c
index 522e5ad..0ee4384 100644
--- a/fs/nfs/getroot.c
+++ b/fs/nfs/getroot.c
@@ -43,6 +43,25 @@
#define NFSDBG_FACILITY NFSDBG_CLIENT

/*
+ * Set the superblock root dentry.
+ * Note that this function frees the inode in case of error.
+ */
+static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *inode)
+{
+ /* The mntroot acts as the dummy root dentry for this superblock */
+ if (sb->s_root == NULL) {
+ sb->s_root = d_alloc_root(inode);
+ if (sb->s_root == NULL) {
+ iput(inode);
+ return -ENOMEM;
+ }
+ /* Circumvent igrab(): we know the inode is not being freed */
+ atomic_inc(&inode->i_count);
+ }
+ return 0;
+}
+
+/*
* get an NFS2/NFS3 root dentry from the root filehandle
*/
struct dentry *nfs_get_root(struct super_block *sb, struct nfs_fh *mntfh)
@@ -54,33 +73,6 @@ struct dentry *nfs_get_root(struct super_block *sb, struct nfs_fh *mntfh)
struct inode *inode;
int error;

- /* create a dummy root dentry with dummy inode for this superblock */
- if (!sb->s_root) {
- struct nfs_fh dummyfh;
- struct dentry *root;
- struct inode *iroot;
-
- memset(&dummyfh, 0, sizeof(dummyfh));
- memset(&fattr, 0, sizeof(f...

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>, Andrew Morton <akpm@...>
Date: Friday, November 2, 2007 - 10:28 am

Its a new month so I'll ping again about sending this fix upstream to
linus for 2.6.24 :) ?

-

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, Linus Torvalds <torvalds@...>, <chuck.lever@...>, Andrew Morton <akpm@...>
Date: Thursday, November 8, 2007 - 3:36 am

Trond,

any update on sending this to Linus for 2.6.24?

-

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Friday, October 26, 2007 - 5:42 am

Any reason not to send this to Linus as a bug fix for 2.6.24 (and
possibly stable)?

- k
-

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Monday, October 29, 2007 - 10:41 am

ping. would love to see this is Linus's tree.

- k
-

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Thursday, October 25, 2007 - 2:36 pm

this fixes my issue. Any reason this hasn't been accepted?

-

To: Kumar Gala <galak@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Thursday, October 25, 2007 - 2:39 pm

Do you mean apart from the fact that I wrote it a couple of hours
ago? :-)

Trond
-

To: Trond Myklebust <Trond.Myklebust@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <nfs@...>, <neilb@...>, <bfields@...>, <chuck.lever@...>
Date: Thursday, October 25, 2007 - 3:05 pm

Oh, sorry. I glanced at the commit message and the 2.6.18 made me
think its been around for a while.

- k
-

Previous thread: Re: [PATCH 11/12] NET: fix subqueue bugs by Jeff Garzik on Tuesday, October 23, 2007 - 6:40 pm. (3 messages)

Next thread: [PATCH] IA64/perfmon: kill dead code, clean irq handling by Jeff Garzik on Tuesday, October 23, 2007 - 7:09 pm. (5 messages)