version 1.40, 2007/07/09 21:10:49 |
version 1.40.2.1, 2007/08/15 13:48:59 |
Line 187 puffs_getvnode(struct mount *mp, void *c |
|
Line 187 puffs_getvnode(struct mount *mp, void *c |
|
} |
} |
|
|
pnode = pool_get(&puffs_pnpool, PR_WAITOK); |
pnode = pool_get(&puffs_pnpool, PR_WAITOK); |
|
memset(pnode, 0, sizeof(struct puffs_node)); |
|
|
pnode->pn_cookie = cookie; |
pnode->pn_cookie = cookie; |
pnode->pn_stat = 0; |
|
pnode->pn_refcount = 1; |
pnode->pn_refcount = 1; |
|
|
mutex_init(&pnode->pn_mtx, MUTEX_DEFAULT, IPL_NONE); |
mutex_init(&pnode->pn_mtx, MUTEX_DEFAULT, IPL_NONE); |
SLIST_INIT(&pnode->pn_sel.sel_klist); |
SLIST_INIT(&pnode->pn_sel.sel_klist); |
pnode->pn_revents = 0; |
|
|
|
plist = puffs_cookie2hashlist(pmp, cookie); |
plist = puffs_cookie2hashlist(pmp, cookie); |
LIST_INSERT_HEAD(plist, pnode, pn_hashent); |
LIST_INSERT_HEAD(plist, pnode, pn_hashent); |
vp->v_data = pnode; |
vp->v_data = pnode; |
vp->v_type = type; |
vp->v_type = type; |
pnode->pn_vp = vp; |
pnode->pn_vp = vp; |
|
pnode->pn_serversize = vsize; |
|
|
genfs_node_init(vp, &puffs_genfsops); |
genfs_node_init(vp, &puffs_genfsops); |
*vpp = vp; |
*vpp = vp; |
Line 577 puffs_parkdone_asyncbioread(struct puffs |
|
Line 578 puffs_parkdone_asyncbioread(struct puffs |
|
bp->b_resid = read_argp->pvnr_resid; |
bp->b_resid = read_argp->pvnr_resid; |
|
|
memcpy(bp->b_data, read_argp->pvnr_data, moved); |
memcpy(bp->b_data, read_argp->pvnr_data, moved); |
} else { |
|
bp->b_flags |= B_ERROR; |
|
} |
} |
|
|
biodone(bp); |
biodone(bp); |
free(preq, M_PUFFS); |
free(preq, M_PUFFS); |
} |
} |
|
|
|
/* XXX: userspace can leak kernel resources */ |
void |
void |
puffs_parkdone_poll(struct puffs_req *preq, void *arg) |
puffs_parkdone_poll(struct puffs_req *preq, void *arg) |
{ |
{ |