Reproducable Infiniband panic
John Baldwin
jhb at freebsd.org
Thu Jun 6 18:59:25 UTC 2013
On Thursday, June 06, 2013 9:54:35 am Andriy Gapon wrote:
> on 06/06/2013 14:48 Julian Stecklina said the following:
> > #7 0xffffffff807a3d83 in linux_file_dtor (cdp=0xfffffe000aeabb80) at
> > /usr/home/julian/src/freebsd/sys/ofed/include/linux/linux_compat.c:214
> > filp = (struct linux_file *) 0xfffffe000aeabb80
> > #8 0xffffffff80513c39 in devfs_destroy_cdevpriv (p=0xfffffe0005772980)
> > at /usr/home/julian/src/freebsd/sys/fs/devfs/devfs_vnops.c:159
> > No locals.
> > #9 0xffffffff80513e47 in devfs_close_f (fp=0xfffffe000b0e9aa0,
> > td=<value optimized out>)
> > at /usr/home/julian/src/freebsd/sys/fs/devfs/devfs_vnops.c:619
> > error = 0
> > fpop = (struct file *) 0x0
>
> 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) {
--
John Baldwin
More information about the freebsd-stable
mailing list