version 1.82, 2007/07/01 17:22:18 |
version 1.83, 2007/07/01 22:54:16 |
Line 455 puffs_lookup(void *v) |
|
Line 455 puffs_lookup(void *v) |
|
} |
} |
|
|
puffs_makecn(&lookup_arg.pvnr_cn, &lookup_arg.pvnr_cn_cred, |
puffs_makecn(&lookup_arg.pvnr_cn, &lookup_arg.pvnr_cn_cred, |
&lookup_arg.pvnr_cn_cid, cnp); |
&lookup_arg.pvnr_cn_cid, cnp, PUFFS_USE_FULLPNBUF(pmp)); |
|
|
if (cnp->cn_flags & ISDOTDOT) |
if (cnp->cn_flags & ISDOTDOT) |
VOP_UNLOCK(dvp, 0); |
VOP_UNLOCK(dvp, 0); |
Line 534 puffs_create(void *v) |
|
Line 534 puffs_create(void *v) |
|
struct componentname *a_cnp; |
struct componentname *a_cnp; |
struct vattr *a_vap; |
struct vattr *a_vap; |
} */ *ap = v; |
} */ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(create); |
PUFFS_VNREQ(create); |
|
|
DPRINTF(("puffs_create: dvp %p, cnp: %s\n", |
DPRINTF(("puffs_create: dvp %p, cnp: %s\n", |
ap->a_dvp, ap->a_cnp->cn_nameptr)); |
ap->a_dvp, ap->a_cnp->cn_nameptr)); |
|
|
puffs_makecn(&create_arg.pvnr_cn, &create_arg.pvnr_cn_cred, |
puffs_makecn(&create_arg.pvnr_cn, &create_arg.pvnr_cn_cred, |
&create_arg.pvnr_cn_cid, ap->a_cnp); |
&create_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
create_arg.pvnr_va = *ap->a_vap; |
create_arg.pvnr_va = *ap->a_vap; |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), PUFFS_VN_CREATE, |
error = puffs_vntouser(pmp, PUFFS_VN_CREATE, |
&create_arg, sizeof(create_arg), 0, ap->a_dvp, NULL); |
&create_arg, sizeof(create_arg), 0, ap->a_dvp, NULL); |
if (error) |
if (error) |
goto out; |
goto out; |
Line 572 puffs_mknod(void *v) |
|
Line 574 puffs_mknod(void *v) |
|
struct componentname *a_cnp; |
struct componentname *a_cnp; |
struct vattr *a_vap; |
struct vattr *a_vap; |
} */ *ap = v; |
} */ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(mknod); |
PUFFS_VNREQ(mknod); |
|
|
puffs_makecn(&mknod_arg.pvnr_cn, &mknod_arg.pvnr_cn_cred, |
puffs_makecn(&mknod_arg.pvnr_cn, &mknod_arg.pvnr_cn_cred, |
&mknod_arg.pvnr_cn_cid, ap->a_cnp); |
&mknod_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
mknod_arg.pvnr_va = *ap->a_vap; |
mknod_arg.pvnr_va = *ap->a_vap; |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), PUFFS_VN_MKNOD, |
error = puffs_vntouser(pmp, PUFFS_VN_MKNOD, |
&mknod_arg, sizeof(mknod_arg), 0, ap->a_dvp, NULL); |
&mknod_arg, sizeof(mknod_arg), 0, ap->a_dvp, NULL); |
if (error) |
if (error) |
goto out; |
goto out; |
Line 1200 puffs_remove(void *v) |
|
Line 1203 puffs_remove(void *v) |
|
struct vnode *a_vp; |
struct vnode *a_vp; |
struct componentname *a_cnp; |
struct componentname *a_cnp; |
} */ *ap = v; |
} */ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(remove); |
PUFFS_VNREQ(remove); |
|
|
remove_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
remove_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
puffs_makecn(&remove_arg.pvnr_cn, &remove_arg.pvnr_cn_cred, |
puffs_makecn(&remove_arg.pvnr_cn, &remove_arg.pvnr_cn_cred, |
&remove_arg.pvnr_cn_cid, ap->a_cnp); |
&remove_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_vp->v_mount), PUFFS_VN_REMOVE, |
error = puffs_vntouser(pmp, PUFFS_VN_REMOVE, |
&remove_arg, sizeof(remove_arg), 0, ap->a_dvp, ap->a_vp); |
&remove_arg, sizeof(remove_arg), 0, ap->a_dvp, ap->a_vp); |
|
|
vput(ap->a_vp); |
vput(ap->a_vp); |
Line 1230 puffs_mkdir(void *v) |
|
Line 1234 puffs_mkdir(void *v) |
|
struct componentname *a_cnp; |
struct componentname *a_cnp; |
struct vattr *a_vap; |
struct vattr *a_vap; |
} */ *ap = v; |
} */ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(mkdir); |
PUFFS_VNREQ(mkdir); |
|
|
puffs_makecn(&mkdir_arg.pvnr_cn, &mkdir_arg.pvnr_cn_cred, |
puffs_makecn(&mkdir_arg.pvnr_cn, &mkdir_arg.pvnr_cn_cred, |
&mkdir_arg.pvnr_cn_cid, ap->a_cnp); |
&mkdir_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
mkdir_arg.pvnr_va = *ap->a_vap; |
mkdir_arg.pvnr_va = *ap->a_vap; |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), PUFFS_VN_MKDIR, |
error = puffs_vntouser(pmp, PUFFS_VN_MKDIR, |
&mkdir_arg, sizeof(mkdir_arg), 0, ap->a_dvp, NULL); |
&mkdir_arg, sizeof(mkdir_arg), 0, ap->a_dvp, NULL); |
if (error) |
if (error) |
goto out; |
goto out; |
Line 1262 puffs_rmdir(void *v) |
|
Line 1267 puffs_rmdir(void *v) |
|
struct vnode *a_vp; |
struct vnode *a_vp; |
struct componentname *a_cnp; |
struct componentname *a_cnp; |
} */ *ap = v; |
} */ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(rmdir); |
PUFFS_VNREQ(rmdir); |
|
|
rmdir_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
rmdir_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
puffs_makecn(&rmdir_arg.pvnr_cn, &rmdir_arg.pvnr_cn_cred, |
puffs_makecn(&rmdir_arg.pvnr_cn, &rmdir_arg.pvnr_cn_cred, |
&rmdir_arg.pvnr_cn_cid, ap->a_cnp); |
&rmdir_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), PUFFS_VN_RMDIR, |
error = puffs_vntouser(pmp, PUFFS_VN_RMDIR, |
&rmdir_arg, sizeof(rmdir_arg), 0, ap->a_dvp, ap->a_vp); |
&rmdir_arg, sizeof(rmdir_arg), 0, ap->a_dvp, ap->a_vp); |
|
|
/* XXX: some call cache_purge() *for both vnodes* here, investigate */ |
/* XXX: some call cache_purge() *for both vnodes* here, investigate */ |
Line 1290 puffs_link(void *v) |
|
Line 1296 puffs_link(void *v) |
|
struct vnode *a_vp; |
struct vnode *a_vp; |
struct componentname *a_cnp; |
struct componentname *a_cnp; |
}/ *ap = v; |
}/ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
int error; |
int error; |
|
|
PUFFS_VNREQ(link); |
PUFFS_VNREQ(link); |
|
|
link_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
link_arg.pvnr_cookie_targ = VPTOPNC(ap->a_vp); |
puffs_makecn(&link_arg.pvnr_cn, &link_arg.pvnr_cn_cred, |
puffs_makecn(&link_arg.pvnr_cn, &link_arg.pvnr_cn_cred, |
&link_arg.pvnr_cn_cid, ap->a_cnp); |
&link_arg.pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), PUFFS_VN_LINK, |
error = puffs_vntouser(pmp, PUFFS_VN_LINK, |
&link_arg, sizeof(link_arg), 0, ap->a_dvp, ap->a_vp); |
&link_arg, sizeof(link_arg), 0, ap->a_dvp, ap->a_vp); |
|
|
/* |
/* |
Line 1324 puffs_symlink(void *v) |
|
Line 1331 puffs_symlink(void *v) |
|
struct vattr *a_vap; |
struct vattr *a_vap; |
char *a_target; |
char *a_target; |
}/ *ap = v; |
}/ *ap = v; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_dvp->v_mount); |
struct puffs_vnreq_symlink *symlink_argp; |
struct puffs_vnreq_symlink *symlink_argp; |
int error; |
int error; |
|
|
Line 1332 puffs_symlink(void *v) |
|
Line 1340 puffs_symlink(void *v) |
|
symlink_argp = malloc(sizeof(struct puffs_vnreq_symlink), |
symlink_argp = malloc(sizeof(struct puffs_vnreq_symlink), |
M_PUFFS, M_ZERO | M_WAITOK); |
M_PUFFS, M_ZERO | M_WAITOK); |
puffs_makecn(&symlink_argp->pvnr_cn, &symlink_argp->pvnr_cn_cred, |
puffs_makecn(&symlink_argp->pvnr_cn, &symlink_argp->pvnr_cn_cred, |
&symlink_argp->pvnr_cn_cid, ap->a_cnp); |
&symlink_argp->pvnr_cn_cid, ap->a_cnp, PUFFS_USE_FULLPNBUF(pmp)); |
symlink_argp->pvnr_va = *ap->a_vap; |
symlink_argp->pvnr_va = *ap->a_vap; |
(void)strlcpy(symlink_argp->pvnr_link, ap->a_target, |
(void)strlcpy(symlink_argp->pvnr_link, ap->a_target, |
sizeof(symlink_argp->pvnr_link)); |
sizeof(symlink_argp->pvnr_link)); |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_dvp->v_mount), |
error = puffs_vntouser(pmp, PUFFS_VN_SYMLINK, |
PUFFS_VN_SYMLINK, symlink_argp, sizeof(*symlink_argp), 0, |
symlink_argp, sizeof(*symlink_argp), 0, ap->a_dvp, NULL); |
ap->a_dvp, NULL); |
|
if (error) |
if (error) |
goto out; |
goto out; |
|
|
Line 1400 puffs_rename(void *v) |
|
Line 1407 puffs_rename(void *v) |
|
struct componentname *a_tcnp; |
struct componentname *a_tcnp; |
}/ *ap = v; |
}/ *ap = v; |
struct puffs_vnreq_rename *rename_argp = NULL; |
struct puffs_vnreq_rename *rename_argp = NULL; |
|
struct puffs_mount *pmp = MPTOPUFFSMP(ap->a_fdvp->v_mount); |
int error; |
int error; |
|
|
if (ap->a_fvp->v_mount != ap->a_tdvp->v_mount) |
if (ap->a_fvp->v_mount != ap->a_tdvp->v_mount) |
Line 1416 puffs_rename(void *v) |
|
Line 1424 puffs_rename(void *v) |
|
rename_argp->pvnr_cookie_targ = NULL; |
rename_argp->pvnr_cookie_targ = NULL; |
puffs_makecn(&rename_argp->pvnr_cn_src, |
puffs_makecn(&rename_argp->pvnr_cn_src, |
&rename_argp->pvnr_cn_src_cred, &rename_argp->pvnr_cn_src_cid, |
&rename_argp->pvnr_cn_src_cred, &rename_argp->pvnr_cn_src_cid, |
ap->a_fcnp); |
ap->a_fcnp, PUFFS_USE_FULLPNBUF(pmp)); |
puffs_makecn(&rename_argp->pvnr_cn_targ, |
puffs_makecn(&rename_argp->pvnr_cn_targ, |
&rename_argp->pvnr_cn_targ_cred, &rename_argp->pvnr_cn_targ_cid, |
&rename_argp->pvnr_cn_targ_cred, &rename_argp->pvnr_cn_targ_cid, |
ap->a_tcnp); |
ap->a_tcnp, PUFFS_USE_FULLPNBUF(pmp)); |
|
|
error = puffs_vntouser(MPTOPUFFSMP(ap->a_fdvp->v_mount), |
error = puffs_vntouser(pmp, PUFFS_VN_RENAME, |
PUFFS_VN_RENAME, rename_argp, sizeof(*rename_argp), 0, |
rename_argp, sizeof(*rename_argp), 0, ap->a_fdvp, NULL); /* XXX */ |
ap->a_fdvp, NULL); /* XXX */ |
|
|
|
/* |
/* |
* XXX: stay in touch with the cache. I don't like this, but |
* XXX: stay in touch with the cache. I don't like this, but |