From owner-freebsd-stable@FreeBSD.ORG Fri Jun 7 17:27:14 2013 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id B45D174F for ; Fri, 7 Jun 2013 17:27:14 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) by mx1.freebsd.org (Postfix) with ESMTP id 932521BD4 for ; Fri, 7 Jun 2013 17:27:14 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id CAC6EB946; Fri, 7 Jun 2013 13:27:13 -0400 (EDT) From: John Baldwin To: Julian Stecklina Subject: Re: Reproducable Infiniband panic Date: Fri, 7 Jun 2013 12:06:52 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p25; KDE/4.5.5; amd64; ; ) References: <51B07705.207@os.inf.tu-dresden.de> <201306061457.52278.jhb@freebsd.org> <51B1A2D6.4030901@os.inf.tu-dresden.de> In-Reply-To: <51B1A2D6.4030901@os.inf.tu-dresden.de> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201306071206.52994.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 07 Jun 2013 13:27:13 -0400 (EDT) Cc: freebsd-stable@freebsd.org X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Jun 2013 17:27:14 -0000 On Friday, June 07, 2013 5:07:34 am Julian Stecklina wrote: > On 06/06/2013 08:57 PM, John Baldwin wrote: > > On Thursday, June 06, 2013 9:54:35 am Andriy Gapon wrote: > [...] > >> The problem seems to be in incorrect interaction between devfs_close_f and > >> linux_file_dtor. The latter expects curthread->td_fpop to have a valid reasonable > >> value. But the former sets curthread->td_fpop to fp only around vnops.fo_close() > >> call and then restores it back to some (what?) previous value before calling > >> devfs_fpdrop->devfs_destroy_cdevpriv. In this case the previous value is NULL. > > > > It is normally NULL in this case. Why does linux_file_dtor even look at > > td_fpop? > > > > Ah. I think it should not do that and make the data it uses in the dtor more > > self-contained: > > > > Index: sys/ofed/include/linux/linux_compat.c > > =================================================================== > > --- linux_compat.c (revision 251465) > > +++ linux_compat.c (working copy) > > @@ -212,7 +212,7 @@ linux_file_dtor(void *cdp) > > struct linux_file *filp; > > > > filp = cdp; > > - filp->f_op->release(curthread->td_fpop->f_vnode, filp); > > + filp->f_op->release(filp->f_vnode, filp); > > kfree(filp); > > } > > > > @@ -232,6 +232,7 @@ linux_dev_open(struct cdev *dev, int oflags, int d > > filp->f_dentry = &filp->f_dentry_store; > > filp->f_op = ldev->ops; > > filp->f_flags = file->f_flag; > > + filp->f_vnode = file->f_vnode; > > if (filp->f_op->open) { > > error = -filp->f_op->open(file->f_vnode, filp); > > if (error) { > > > > Doesn't compile for me. Did you forget to add the f_vnode member to > struct linux_file? > > sys/ofed/include/linux/linux_compat.c: In function 'linux_file_dtor': > sys/ofed/include/linux/linux_compat.c:214: error: 'struct linux_file' > has no member named 'f_vnode' > sys/ofed/include/linux/linux_compat.c: In function 'linux_dev_open': > sys/ofed/include/linux/linux_compat.c:234: error: 'struct linux_file' > has no member named 'f_vnode' Oof it's in another header: Index: sys/ofed/include/linux/fs.h =================================================================== --- fs.h (revision 251494) +++ fs.h (working copy) @@ -73,6 +73,7 @@ struct linux_file { struct dentry f_dentry_store; struct selinfo f_selinfo; struct sigio *f_sigio; + struct vnode *f_vnode; }; #define file linux_file -- John Baldwin