On Tue, May 05, 2015 at 09:54:43PM +0800, Kinglong Mee wrote: > On 5/5/2015 6:01 AM, J. Bruce Fields wrote: > > + * Unlike lookup_one_len, it should be called without the parent > > + * i_mutex held, and will take the i_mutex itself if necessary. > > + */ > > +struct dentry *lookup_one_len_unlocked(const char *name, > > + struct dentry *base, int len) > > +{ > > + struct qstr this; > > + unsigned int c; > > + int err; > > + struct dentry *ret; > > + > > + WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex)); > > Remove this line. Whoops, thanks. > > diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c > > index a30e79900086..cc7995762190 100644 > > --- a/fs/nfsd/vfs.c > > +++ b/fs/nfsd/vfs.c > > @@ -217,6 +217,13 @@ nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp, > > host_err = PTR_ERR(dentry); > > if (IS_ERR(dentry)) > > goto out_nfserr; > > + if (!S_ISREG(d_inode(dentry)->i_mode)) { > > Got a crash here tested by pynfs, OK, I guess I just forgot to take into account negative dentries. Testing that now with (!(d_inode(dentry) && S_ISREG(..))). --b. > # ./testserver.py 127.0.0.1:/nfs/pnfs/ --rundeps --maketree open > > PID: 2314 TASK: ffff88006ad2cfc0 CPU: 0 COMMAND: "nfsd" > #0 [ffff88006adc7870] machine_kexec at ffffffff8104debb > #1 [ffff88006adc78e0] crash_kexec at ffffffff810f92a2 > #2 [ffff88006adc79b0] oops_end at ffffffff81015c28 > #3 [ffff88006adc79e0] no_context at ffffffff8105a9af > #4 [ffff88006adc7a50] __bad_area_nosemaphore at ffffffff8105ac90 > #5 [ffff88006adc7aa0] bad_area_nosemaphore at ffffffff8105ae23 > #6 [ffff88006adc7ab0] __do_page_fault at ffffffff8105b13e > #7 [ffff88006adc7b10] do_page_fault at ffffffff8105b4df > #8 [ffff88006adc7b50] page_fault at ffffffff81713258 > [exception RIP: nfsd_lookup_dentry+231] > RIP: ffffffffa0447b87 RSP: ffff88006adc7c08 RFLAGS: 00010283 > RAX: ffff88006a9d2180 RBX: ffff88006ad80068 RCX: 0000000000000000 > RDX: 0000000000000000 RSI: ffff88007fdf4eb0 RDI: ffff88006a9d2180 > RBP: ffff88006adc7c88 R8: ffff88006b13dcc0 R9: 0000000000000000 > R10: ffff88006adb6cc0 R11: ffff88006adb6cc0 R12: ffff88006a9d0cc0 > R13: ffff88006adc7ca0 R14: ffff88006adc7ca8 R15: ffff88006ad640bc > ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 > #9 [ffff88006adc7c90] nfsd_lookup at ffffffffa0448029 [nfsd] > #10 [ffff88006adc7cf0] nfsd4_open at ffffffffa0456cbb [nfsd] > #11 [ffff88006adc7d60] nfsd4_proc_compound at ffffffffa0457317 [nfsd] > #12 [ffff88006adc7dc0] nfsd_dispatch at ffffffffa0442f83 [nfsd] > #13 [ffff88006adc7e00] svc_process_common at ffffffffa0160c5b [sunrpc] > #14 [ffff88006adc7e70] svc_process at ffffffffa0161cc3 [sunrpc] > #15 [ffff88006adc7ea0] nfsd at ffffffffa044294f [nfsd] > #16 [ffff88006adc7ed0] kthread at ffffffff810a9d07 > #17 [ffff88006adc7f50] ret_from_fork at ffffffff81711b62 > > thanks, > Kinglong Mee -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html