SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 7.70
SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 7.70
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)ufs_vnops.c 7.69 (Berkeley) %G%
+ * @(#)ufs_vnops.c 7.70 (Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
fifo_printinfo(vp);
#endif /* FIFO */
printf("%s\n", (ip->i_flag & ILOCKED) ? " (LOCKED)" : "");
fifo_printinfo(vp);
#endif /* FIFO */
printf("%s\n", (ip->i_flag & ILOCKED) ? " (LOCKED)" : "");
+ if (ip->i_lockholder == 0)
- printf("\towner pid %d", ip->i_spare0);
- if (ip->i_spare1)
- printf(" waiting pid %d", ip->i_spare1);
+ printf("\towner pid %d", ip->i_lockholder);
+ if (ip->i_lockwaiter)
+ printf(" waiting pid %d", ip->i_lockwaiter);
printf("\n");
return (0);
}
printf("\n");
return (0);
}
{
struct inode *ip, *nip;
struct vnode *vp, *nvp;
{
struct inode *ip, *nip;
struct vnode *vp, *nvp;
+ extern struct vnodeops spec_vnodeops;
vp = *vpp;
ip = VTOI(vp);
vp = *vpp;
ip = VTOI(vp);
vp->v_op = specops;
if (nvp = checkalias(vp, ip->i_rdev, mntp)) {
/*
vp->v_op = specops;
if (nvp = checkalias(vp, ip->i_rdev, mntp)) {
/*
- * Reinitialize aliased inode.
+ * Discard unneeded vnode, but save its inode.
- vp = nvp;
- nip = VTOI(vp);
- nip->i_vnode = vp;
- nip->i_flag = 0;
- nip->i_din = ip->i_din;
- nip->i_dev = ip->i_dev;
- nip->i_number = ip->i_number;
- ufs_ihashins(nip);
+ remque(ip);
+ IUNLOCK(ip);
+ nvp->v_data = vp->v_data;
+ vp->v_data = NULL;
+ vp->v_op = &spec_vnodeops;
+ vrele(vp);
+ vgone(vp);
- * Discard unneeded inode.
+ * Reinitialize aliased inode.
- ip->i_mode = 0;
- ufs_iput(ip);
- ip = nip;
+ vp = nvp;
+ ip->i_vnode = vp;
+ ufs_ihashins(ip);
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)ufs_vnops.c 7.69 (Berkeley) %G%
+ * @(#)ufs_vnops.c 7.70 (Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
fifo_printinfo(vp);
#endif /* FIFO */
printf("%s\n", (ip->i_flag & ILOCKED) ? " (LOCKED)" : "");
fifo_printinfo(vp);
#endif /* FIFO */
printf("%s\n", (ip->i_flag & ILOCKED) ? " (LOCKED)" : "");
+ if (ip->i_lockholder == 0)
- printf("\towner pid %d", ip->i_spare0);
- if (ip->i_spare1)
- printf(" waiting pid %d", ip->i_spare1);
+ printf("\towner pid %d", ip->i_lockholder);
+ if (ip->i_lockwaiter)
+ printf(" waiting pid %d", ip->i_lockwaiter);
printf("\n");
return (0);
}
printf("\n");
return (0);
}
{
struct inode *ip, *nip;
struct vnode *vp, *nvp;
{
struct inode *ip, *nip;
struct vnode *vp, *nvp;
+ extern struct vnodeops spec_vnodeops;
vp = *vpp;
ip = VTOI(vp);
vp = *vpp;
ip = VTOI(vp);
vp->v_op = specops;
if (nvp = checkalias(vp, ip->i_rdev, mntp)) {
/*
vp->v_op = specops;
if (nvp = checkalias(vp, ip->i_rdev, mntp)) {
/*
- * Reinitialize aliased inode.
+ * Discard unneeded vnode, but save its inode.
- vp = nvp;
- nip = VTOI(vp);
- nip->i_vnode = vp;
- nip->i_flag = 0;
- nip->i_din = ip->i_din;
- nip->i_dev = ip->i_dev;
- nip->i_number = ip->i_number;
- ufs_ihashins(nip);
+ remque(ip);
+ IUNLOCK(ip);
+ nvp->v_data = vp->v_data;
+ vp->v_data = NULL;
+ vp->v_op = &spec_vnodeops;
+ vrele(vp);
+ vgone(vp);
- * Discard unneeded inode.
+ * Reinitialize aliased inode.
- ip->i_mode = 0;
- ufs_iput(ip);
- ip = nip;
+ vp = nvp;
+ ip->i_vnode = vp;
+ ufs_ihashins(ip);