version 1.158, 2011/10/17 23:54:01 |
version 1.159, 2011/10/18 15:39:09 |
Line 1243 puffs_vnop_readdir(void *v) |
|
Line 1243 puffs_vnop_readdir(void *v) |
|
|
|
/* provide cookies to caller if so desired */ |
/* provide cookies to caller if so desired */ |
if (ap->a_cookies) { |
if (ap->a_cookies) { |
|
#ifdef DIAGNOSTIC |
|
KASSERT(curlwp != uvm.pagedaemon_lwp); |
|
#endif |
*ap->a_cookies = malloc(readdir_msg->pvnr_ncookies*CSIZE, |
*ap->a_cookies = malloc(readdir_msg->pvnr_ncookies*CSIZE, |
M_TEMP, M_WAITOK); |
M_TEMP, M_WAITOK); |
*ap->a_ncookies = readdir_msg->pvnr_ncookies; |
*ap->a_ncookies = readdir_msg->pvnr_ncookies; |
Line 2217 puffs_vnop_strategy(void *v) |
|
Line 2220 puffs_vnop_strategy(void *v) |
|
struct buf *bp; |
struct buf *bp; |
size_t argsize; |
size_t argsize; |
size_t tomove, moved; |
size_t tomove, moved; |
int error, dofaf, dobiodone; |
int error, dofaf, cansleep, dobiodone; |
|
|
pmp = MPTOPUFFSMP(vp->v_mount); |
pmp = MPTOPUFFSMP(vp->v_mount); |
bp = ap->a_bp; |
bp = ap->a_bp; |
error = 0; |
error = 0; |
dofaf = 0; |
dofaf = 0; |
|
cansleep = 0; |
pn = VPTOPP(vp); |
pn = VPTOPP(vp); |
park_rw = NULL; /* explicit */ |
park_rw = NULL; /* explicit */ |
dobiodone = 1; |
dobiodone = 1; |
Line 2262 puffs_vnop_strategy(void *v) |
|
Line 2266 puffs_vnop_strategy(void *v) |
|
mutex_exit(vp->v_interlock); |
mutex_exit(vp->v_interlock); |
} |
} |
|
|
|
cansleep = (curlwp == uvm.pagedaemon_lwp || dofaf) ? 0 : 1; |
|
|
#ifdef DIAGNOSTIC |
#ifdef DIAGNOSTIC |
if (curlwp == uvm.pagedaemon_lwp) |
if (curlwp == uvm.pagedaemon_lwp) |
KASSERT(dofaf || BIOASYNC(bp)); |
KASSERT(dofaf || BIOASYNC(bp)); |
Line 2271 puffs_vnop_strategy(void *v) |
|
Line 2277 puffs_vnop_strategy(void *v) |
|
tomove = PUFFS_TOMOVE(bp->b_bcount, pmp); |
tomove = PUFFS_TOMOVE(bp->b_bcount, pmp); |
argsize = sizeof(struct puffs_vnmsg_rw); |
argsize = sizeof(struct puffs_vnmsg_rw); |
error = puffs_msgmem_alloc(argsize + tomove, &park_rw, |
error = puffs_msgmem_alloc(argsize + tomove, &park_rw, |
(void *)&rw_msg, dofaf); |
(void *)&rw_msg, cansleep); |
if (error) |
if (error) |
goto out; |
goto out; |
RWARGS(rw_msg, 0, tomove, bp->b_blkno << DEV_BSHIFT, FSCRED); |
RWARGS(rw_msg, 0, tomove, bp->b_blkno << DEV_BSHIFT, FSCRED); |
Line 2531 puffs_vnop_getpages(void *v) |
|
Line 2537 puffs_vnop_getpages(void *v) |
|
#ifdef notnowjohn |
#ifdef notnowjohn |
/* allocate worst-case memory */ |
/* allocate worst-case memory */ |
runsizes = ((npages / 2) + 1) * sizeof(struct puffs_cacherun); |
runsizes = ((npages / 2) + 1) * sizeof(struct puffs_cacherun); |
|
#ifdef DIAGNOSTIC |
|
if (curlwp == uvm.pagedaemon_lwp) |
|
KASSERT(locked); |
|
#endif |
pcinfo = kmem_zalloc(sizeof(struct puffs_cacheinfo) + runsize, |
pcinfo = kmem_zalloc(sizeof(struct puffs_cacheinfo) + runsize, |
locked ? KM_NOSLEEP : KM_SLEEP); |
locked ? KM_NOSLEEP : KM_SLEEP); |
|
|