version 1.57.4.3, 2008/02/18 21:06:40 |
version 1.58, 2007/11/16 20:32:18 |
|
|
|
|
void |
void |
puffs_makecn(struct puffs_kcn *pkcn, struct puffs_kcred *pkcr, |
puffs_makecn(struct puffs_kcn *pkcn, struct puffs_kcred *pkcr, |
const struct componentname *cn, int full) |
struct puffs_kcid *pkcid, const struct componentname *cn, int full) |
{ |
{ |
|
|
pkcn->pkcn_nameiop = cn->cn_nameiop; |
pkcn->pkcn_nameiop = cn->cn_nameiop; |
pkcn->pkcn_flags = cn->cn_flags; |
pkcn->pkcn_flags = cn->cn_flags; |
|
puffs_cidcvt(pkcid, cn->cn_lwp); |
|
|
if (full) { |
if (full) { |
(void)strcpy(pkcn->pkcn_name, cn->cn_nameptr); |
(void)strcpy(pkcn->pkcn_name, cn->cn_nameptr); |
Line 87 puffs_credcvt(struct puffs_kcred *pkcr, |
|
Line 88 puffs_credcvt(struct puffs_kcred *pkcr, |
|
} |
} |
|
|
void |
void |
puffs_parkdone_asyncbioread(struct puffs_mount *pmp, |
puffs_cidcvt(struct puffs_kcid *pkcid, const struct lwp *l) |
struct puffs_req *preq, void *arg) |
|
{ |
{ |
struct puffs_vnmsg_read *read_msg = (void *)preq; |
|
struct buf *bp = arg; |
|
size_t moved; |
|
|
|
DPRINTF(("%s\n", __func__)); |
|
|
|
bp->b_error = checkerr(pmp, preq->preq_rv, __func__); |
|
if (bp->b_error == 0) { |
|
if (read_msg->pvnr_resid > bp->b_bcount) { |
|
puffs_senderr(pmp, PUFFS_ERR_READ, E2BIG, |
|
"resid grew", preq->preq_cookie); |
|
bp->b_error = E2BIG; |
|
} else { |
|
moved = bp->b_bcount - read_msg->pvnr_resid; |
|
bp->b_resid = read_msg->pvnr_resid; |
|
|
|
memcpy(bp->b_data, read_msg->pvnr_data, moved); |
if (l) { |
} |
pkcid->pkcid_type = PUFFCID_TYPE_REAL; |
|
pkcid->pkcid_pid = l->l_proc->p_pid; |
|
pkcid->pkcid_lwpid = l->l_lid; |
|
} else { |
|
pkcid->pkcid_type = PUFFCID_TYPE_FAKE; |
|
pkcid->pkcid_pid = 0; |
|
pkcid->pkcid_lwpid = 0; |
} |
} |
|
|
biodone(bp); |
|
} |
} |
|
|
void |
void |
puffs_parkdone_asyncbiowrite(struct puffs_mount *pmp, |
puffs_parkdone_asyncbioread(struct puffs_mount *pmp, |
struct puffs_req *preq, void *arg) |
struct puffs_req *preq, void *arg) |
{ |
{ |
struct puffs_vnmsg_write *write_msg = (void *)preq; |
struct puffs_vnmsg_read *read_msg = (void *)preq; |
struct buf *bp = arg; |
struct buf *bp = arg; |
|
size_t moved; |
DPRINTF(("%s\n", __func__)); |
|
|
|
bp->b_error = checkerr(pmp, preq->preq_rv, __func__); |
bp->b_error = checkerr(pmp, preq->preq_rv, __func__); |
if (bp->b_error == 0) { |
if (bp->b_error == 0) { |
if (write_msg->pvnr_resid > bp->b_bcount) { |
moved = bp->b_bcount - read_msg->pvnr_resid; |
puffs_senderr(pmp, PUFFS_ERR_WRITE, E2BIG, |
bp->b_resid = read_msg->pvnr_resid; |
"resid grew", preq->preq_cookie); |
|
bp->b_error = E2BIG; |
memcpy(bp->b_data, read_msg->pvnr_data, moved); |
} else { |
|
bp->b_resid = write_msg->pvnr_resid; |
|
} |
|
} |
} |
|
|
biodone(bp); |
biodone(bp); |
Line 194 puffs_gop_markupdate(struct vnode *vp, i |
|
Line 179 puffs_gop_markupdate(struct vnode *vp, i |
|
if (flags & GOP_UPDATE_MODIFIED) |
if (flags & GOP_UPDATE_MODIFIED) |
uflags |= PUFFS_UPDATEMTIME; |
uflags |= PUFFS_UPDATEMTIME; |
|
|
puffs_updatenode(VPTOPP(vp), uflags, 0); |
puffs_updatenode(vp, uflags); |
} |
} |
|
|
void |
void |
puffs_senderr(struct puffs_mount *pmp, int type, int error, |
puffs_senderr(struct puffs_mount *pmp, int type, int error, |
const char *str, puffs_cookie_t ck) |
const char *str, void *cookie) |
{ |
{ |
struct puffs_msgpark *park; |
struct puffs_msgpark *park; |
struct puffs_error *perr; |
struct puffs_error *perr; |
|
|
puffs_msgmem_alloc(sizeof(struct puffs_error), &park, (void *)&perr, 1); |
puffs_msgmem_alloc(sizeof(struct puffs_error), &park, (void**)&perr, 1); |
puffs_msg_setfaf(park); |
puffs_msg_setfaf(park); |
puffs_msg_setinfo(park, PUFFSOP_ERROR, type, ck); |
puffs_msg_setinfo(park, PUFFSOP_ERROR, type, cookie); |
|
|
perr->perr_error = error; |
perr->perr_error = error; |
strlcpy(perr->perr_str, str, sizeof(perr->perr_str)); |
strlcpy(perr->perr_str, str, sizeof(perr->perr_str)); |