version 1.22.2.13, 2007/10/09 15:22:16 |
version 1.22.2.14, 2007/10/12 17:03:17 |
|
|
puffs_parkdone_asyncbioread(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_vnreq_read *read_argp = (void *)preq; |
struct puffs_vnmsg_read *read_msg = (void *)preq; |
struct buf *bp = arg; |
struct buf *bp = arg; |
size_t moved; |
size_t moved; |
|
|
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) { |
moved = bp->b_bcount - read_argp->pvnr_resid; |
moved = bp->b_bcount - read_msg->pvnr_resid; |
bp->b_resid = read_argp->pvnr_resid; |
bp->b_resid = read_msg->pvnr_resid; |
|
|
memcpy(bp->b_data, read_argp->pvnr_data, moved); |
memcpy(bp->b_data, read_msg->pvnr_data, moved); |
} |
} |
|
|
biodone(bp); |
biodone(bp); |
free(preq, M_PUFFS); |
|
} |
} |
|
|
/* XXX: userspace can leak kernel resources */ |
/* XXX: userspace can leak kernel resources */ |
void |
void |
puffs_parkdone_poll(struct puffs_mount *pmp, struct puffs_req *preq, void *arg) |
puffs_parkdone_poll(struct puffs_mount *pmp, struct puffs_req *preq, void *arg) |
{ |
{ |
struct puffs_vnreq_poll *poll_argp = (void *)preq; |
struct puffs_vnmsg_poll *poll_msg = (void *)preq; |
struct puffs_node *pn = arg; |
struct puffs_node *pn = arg; |
int revents, error; |
int revents, error; |
|
|
error = checkerr(pmp, preq->preq_rv, __func__); |
error = checkerr(pmp, preq->preq_rv, __func__); |
if (error) |
if (error) |
revents = poll_argp->pvnr_events; |
revents = poll_msg->pvnr_events; |
else |
else |
revents = POLLERR; |
revents = POLLERR; |
|
|
Line 141 puffs_parkdone_poll(struct puffs_mount * |
|
Line 140 puffs_parkdone_poll(struct puffs_mount * |
|
mutex_exit(&pn->pn_mtx); |
mutex_exit(&pn->pn_mtx); |
|
|
selnotify(&pn->pn_sel, 0); |
selnotify(&pn->pn_sel, 0); |
free(preq, M_PUFFS); |
|
|
|
puffs_releasenode(pn); |
puffs_releasenode(pn); |
} |
} |