From owner-freebsd-fs@FreeBSD.ORG Sun Jun 7 15:21:50 2009 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB614106566B for ; Sun, 7 Jun 2009 15:21:50 +0000 (UTC) (envelope-from georg@dts.su) Received: from host4.symbios.ru (host4.symbios.ru [80.84.112.82]) by mx1.freebsd.org (Postfix) with ESMTP id 749D88FC08 for ; Sun, 7 Jun 2009 15:21:50 +0000 (UTC) (envelope-from georg@dts.su) Received: from [127.0.0.1] (helo=WORLDMY) by host4.symbios.ru with esmtpa (Exim 4.69 (FreeBSD)) (envelope-from ) id 1MDKBw-000Bxc-0b for freebsd-fs@freebsd.org; Sun, 07 Jun 2009 19:21:48 +0400 Received: from WORLDMY ([80.84.121.226] helo=WORLDMY) with IPv4:25 by host4.symbios.ru; 7 Jun 2009 19:21:47 +0400 Date: Sun, 7 Jun 2009 19:21:46 +0400 From: georg@dts.su Organization: dts.su X-Priority: 3 (Normal) Message-ID: <1186509222.20090607192146@dts.su> To: freebsd-fs@freebsd.org In-Reply-To: <20090607134038.GL1927@deviant.kiev.zoral.com.ua> References: <20090606161600.GB61928@dchagin.static.corbina.ru> <20090606175033.GJ1927@deviant.kiev.zoral.com.ua> <49009886.20090607153452@dts.su> <20090607134038.GL1927@deviant.kiev.zoral.com.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: quoted-printable X-Assp-Whitelisted: Yes X-Assp-Envelope-From: georg@dts.su X-Assp-Intended-For: freebsd-fs@freebsd.org X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host4.symbios.ru X-AntiAbuse: Original Domain - freebsd.org X-AntiAbuse: Originator/Caller UID/GID - [26 6] / [26 6] X-AntiAbuse: Sender Address Domain - dts.su Subject: Re[2]: fatal trap 12 X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: georg@dts.su List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2009 15:21:51 -0000 Hello, Kostik. Have this after apply patch: cc1: warnings being treated as errors /usr/src/sys/fs/pseudofs/pseudofs_vnops.c: In function 'pfs_ioctl': /usr/src/sys/fs/pseudofs/pseudofs_vnops.c:265: warning: 'pn' is used uninit= ialized in this function /usr/src/sys/fs/pseudofs/pseudofs_vnops.c:295: warning: 'pvd' is used unini= tialized in this function *** Error code 1 > I asked to remove questions@, isn't it ? > On Sun, Jun 07, 2009 at 03:34:52PM +0400, georg@dts.su wrote: >> Hello. >>=20 >> After patch, whan make kernel I have this: >> /usr/src/sys/kern/vfs_vnops.c:750:37: error: macro "vn_lock" requires 3 = arguments, but only 2 given >> /usr/src/sys/kern/vfs_vnops.c: In function 'vn_ioctl': >> /usr/src/sys/kern/vfs_vnops.c:750: error: 'vn_lock' undeclared (first us= e in this function) >> /usr/src/sys/kern/vfs_vnops.c:750: error: (Each undeclared identifier is= reported only once >> /usr/src/sys/kern/vfs_vnops.c:750: error: for each function it appears i= n.) >> /usr/src/sys/kern/vfs_vnops.c:769: error: too few arguments to function = 'VOP_UNLOCK' >> *** Error code 1 >>=20 > The patch is for HEAD. You did not specified the version of your system. > For RELENG_7, patch shall be adopted by adding curthread parameter > to several calls, among them are vn_lock, VOP_ISLOCKED and VOP_UNLOCK(). > The patch probably cannot be merged to RELENG_7 due to KBI breakage. > There, I think the following workaround for pseudofs might be enough, > but it would be also needed for cd9660 and devfs at least. > Try this. > Index: fs/pseudofs/pseudofs_vnops.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- fs/pseudofs/pseudofs_vnops.c (revision 193634) > +++ fs/pseudofs/pseudofs_vnops.c (working copy) > @@ -260,34 +260,51 @@ > static int > pfs_ioctl(struct vop_ioctl_args *va) > { > - struct vnode *vn =3D va->a_vp; > - struct pfs_vdata *pvd =3D vn->v_data; > - struct pfs_node *pn =3D pvd->pvd_pn; > + struct vnode *vn; > + struct pfs_vdata *pvd; > + struct pfs_node *pn; > struct proc *proc; > + struct thread *td; > int error; > =20 + vn =3D va->>a_vp; > + td =3D curthread; > + vn_lock(vn, LK_SHARED | LK_RETRY, td); + if (vn->>v_iflag & VI_DOOMED) { > + VOP_UNLOCK(vn, 0, td); > + return (EBADF); > + } + pvd =3D vn->>v_data; + pn =3D pvd->>pvd_pn; > PFS_TRACE(("%s: %lx", pn->pn_name, va->a_command)); > pfs_assert_not_owned(pn); > =20 - if (vn->>v_type !=3D VREG) + if (vn->>v_type !=3D VREG) { > + VOP_UNLOCK(vn, 0, td); > PFS_RETURN (EINVAL); > + } > KASSERT_PN_IS_FILE(pn); > =20 - if (pn->>pn_ioctl =3D=3D NULL) + if (pn->>pn_ioctl =3D=3D NULL) { > + VOP_UNLOCK(vn, 0, td); > PFS_RETURN (ENOTTY); > + } > =20 > /* > * This is necessary because process' privileges may > * have changed since the open() call. > */ > - if (!pfs_visible(curthread, pn, pvd->pvd_pid, &proc)) > + if (!pfs_visible(curthread, pn, pvd->pvd_pid, &proc)) { > + VOP_UNLOCK(vn, 0, td); > PFS_RETURN (EIO); > + } > =20 > error =3D pn_ioctl(curthread, proc, pn, va->a_command, va->a_data= ); > =20 > if (proc !=3D NULL) > PROC_UNLOCK(proc); > =20 > + VOP_UNLOCK(vn, 0, td); > PFS_RETURN (error); > } > =20 > Index: fs/devfs/devfs_vnops.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- fs/devfs/devfs_vnops.c (revision 193634) > +++ fs/devfs/devfs_vnops.c (working copy) > @@ -1240,11 +1240,21 @@ > static int > devfs_rioctl(struct vop_ioctl_args *ap) > { > + struct vnode *vp; > + struct devfs_mount *dmp; > + struct thread *td; > int error; > - struct devfs_mount *dmp; > =20 + vp =3D ap->>a_vp; + td =3D ap->>a_td; > + vn_lock(vp, LK_SHARED | LK_RETRY, td); + if (vp->>v_iflag & VI_DOOMED) { > + VOP_UNLOCK(vp, 0, td); > + return (EBADF); > + } > dmp =3D VFSTODEVFS(ap->a_vp->v_mount); > sx_xlock(&dmp->dm_lock); > + VOP_UNLOCK(vp, 0, td); > DEVFS_DMP_HOLD(dmp); > devfs_populate(dmp); > if (DEVFS_DMP_DROP(dmp)) { > @@ -1252,7 +1262,7 @@ > devfs_unmount_final(dmp); > return (ENOENT); > } > - error =3D devfs_rules_ioctl(dmp, ap->a_command, ap->a_data, ap->a= _td); > + error =3D devfs_rules_ioctl(dmp, ap->a_command, ap->a_data, td); > sx_xunlock(&dmp->dm_lock); > return (error); > } > Index: fs/cd9660/cd9660_vnops.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- fs/cd9660/cd9660_vnops.c (revision 193634) > +++ fs/cd9660/cd9660_vnops.c (working copy) > @@ -253,20 +253,37 @@ > struct thread *a_td; > } */ *ap; > { > - struct vnode *vp =3D ap->a_vp; > - struct iso_node *ip =3D VTOI(vp); > + struct vnode *vp; > + struct iso_node *ip; > + struct thread *td; > + int error; > =20 - if (vp->>v_type =3D=3D VCHR || vp->v_type =3D=3D VBLK) > - return (EOPNOTSUPP); + vp =3D ap->>a_vp; + td =3D ap->>a_td; > + vn_lock(vp, LK_SHARED | LK_RETRY, td); + if (vp->>v_iflag & VI_DOOMED) { > + error =3D EBADF; > + goto out; > + } > + ip =3D VTOI(vp); + if (vp->>v_type =3D=3D VCHR || vp->v_type =3D=3D VBLK) { > + error =3D EOPNOTSUPP; > + goto out; > + } > =20 > + error =3D 0; > switch (ap->a_command) { > - > case FIOGETLBA: > *(int *)(ap->a_data) =3D ip->iso_start; > - return 0; > + break; > default: > - return (ENOTTY); > + error =3D ENOTTY; > + break; > } > + > +out: > + VOP_UNLOCK(vp, 0, td); > + return (error); > } > =20 > /* --=20 Regards, Yura mailto:georg@dts.su