NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/50664: "cd .." over NFS/ZFS can panic kernel



The following reply was made to PR kern/50664; it has been noted by GNATS.

From: "J. Hannken-Illjes" <hannken%eis.cs.tu-bs.de@localhost>
To: Brian Marcotte <marcotte%panix.com@localhost>
Cc: gnats-bugs%NetBSD.org@localhost
Subject: Re: kern/50664: "cd .." over NFS/ZFS can panic kernel
Date: Mon, 18 Jan 2016 12:46:51 +0100

 > This isn't working yet. I put a printf in there as well, and it's not
 > printing my message before the panic. Also, if DIAGNOSTIC is included,
 > it still stops at "KASSERT(dvp !=3D *vpp);=E2=80=9D.
 
 This is the second lookup, reading from name cache.
 
 What prints this diff?
 
 --- nfs_vnops.c 12 Aug 2012 12:59:48 -0000      1.293.4.1
 +++ nfs_vnops.c 18 Jan 2016 11:45:53 -0000
 @@ -946,8 +946,9 @@ dorpc:
          * because it should be done while dvp is locked (unlocking
          * dvp is different for each case).
          */
 =20
 +printf("lookup \"%.*s\"\n", cnp->cn_namelen, cnp->cn_nameptr);
         if (NFS_CMPFH(np, fhp, fhsize)) {
                 /*
                  * as we handle "." lookup locally, this should be
                  * a broken server.
 @@ -960,8 +961,9 @@ dorpc:
                         nfsm_postop_attr(dvp, attrflag, 0);
                 } else
  #endif
                         nfsm_loadattr(newvp, (struct vattr *)0, 0);
 +printf("dvp %p newvp %p DOT\n", dvp, newvp);
         } else if (flags & ISDOTDOT) {
                 /*
                  * ".." lookup
                  */
 @@ -980,8 +982,9 @@ dorpc:
                         nfsm_postop_attr(dvp, attrflag, 0);
                 } else
  #endif
                         nfsm_loadattr(newvp, (struct vattr *)0, 0);
 +printf("dvp %p newvp %p DOTDOT\n", dvp, newvp);
         } else {
                 /*
                  * Other lookups.
                  */
 @@ -997,8 +1000,9 @@ dorpc:
                         nfsm_postop_attr(dvp, attrflag, 0);
                 } else
  #endif
                         nfsm_loadattr(newvp, (struct vattr *)0, 0);
 +printf("dvp %p newvp %p OTHER\n", dvp, newvp);
         }
         if (cnp->cn_nameiop !=3D DELETE || !(flags & ISLASTCN)) {
                 nfs_cache_enter(dvp, newvp, cnp);
         }
 
 --
 J. Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig (Germany)
 



Home | Main Index | Thread Index | Old Index