--- linux-2.6.3/fs/nfsd/vfs.c.pix	2004-02-18 04:57:29.000000000 +0100
+++ linux-2.6.3/fs/nfsd/vfs.c	2004-04-05 15:56:35.423508058 +0200
@@ -444,6 +444,41 @@
 
 
 
+static unsigned int i2a(char* dest,unsigned int x) {
+  register unsigned int tmp=x;
+  register unsigned int len=0;
+  if (x>=100) { *dest++=tmp/100+'0'; tmp=tmp%100; ++len; }
+  if (x>=10) { *dest++=tmp/10+'0'; tmp=tmp%10; ++len; }
+  *dest++=tmp+'0';
+  return len+1;
+}
+
+static char *inet_ntoa_r(struct in_addr in,char* buf) {
+  unsigned int len;
+  unsigned char *ip=(unsigned char*)∈
+  len=i2a(buf,ip[0]); buf[len]='.'; ++len;
+  len+=i2a(buf+ len,ip[1]); buf[len]='.'; ++len;
+  len+=i2a(buf+ len,ip[2]); buf[len]='.'; ++len;
+  len+=i2a(buf+ len,ip[3]); buf[len]=0;
+  return buf;
+}
+
+static char *inet_ntoa(struct in_addr in) {
+  static char buf[20];
+  return inet_ntoa_r(in,buf);
+}
+
+static void printk_debug_file_access(struct svc_rqst *rqstp, struct dentry *dentry) {
+  printk("nfsd (%s): ", inet_ntoa(rqstp->rq_addr.sin_addr));
+  while (1) {
+    if (dentry == dentry->d_parent) break;
+    printk("%s/", dentry->d_name.name);
+    dentry = dentry->d_parent;
+  }
+  printk("\n");
+}
+
+
 /*
  * Open an existing file or directory.
  * The access argument indicates the type of open (read/write/lock)
@@ -502,6 +537,8 @@
 	} else if (access & MAY_WRITE)
 		put_write_access(inode);
 
+	if (err == 0) printk_debug_file_access(rqstp, dentry);
+
 out_nfserr:
 	if (err)
 		err = nfserrno(err);
@@ -1156,6 +1193,7 @@
 		goto out_nfserr;
 	*lenp = err;
 	err = 0;
+	printk_debug_file_access(rqstp, dentry);
 out:
 	return err;