version 1.20.2.1, 2007/02/27 16:54:13 |
version 1.20.2.2, 2007/03/12 05:58:12 |
Line 481 puffs_userdead(struct puffs_mount *pmp) |
|
Line 481 puffs_userdead(struct puffs_mount *pmp) |
|
|
|
/* and wakeup processes waiting for a reply from userspace */ |
/* and wakeup processes waiting for a reply from userspace */ |
TAILQ_FOREACH(park, &pmp->pmp_req_replywait, park_entries) { |
TAILQ_FOREACH(park, &pmp->pmp_req_replywait, park_entries) { |
park->park_preq->preq_rv = ENXIO; |
if (park->park_preq) |
|
park->park_preq->preq_rv = ENXIO; |
TAILQ_REMOVE(&pmp->pmp_req_replywait, park, park_entries); |
TAILQ_REMOVE(&pmp->pmp_req_replywait, park, park_entries); |
wakeup(park); |
wakeup(park); |
} |
} |
|
|
/* wakeup waiters for completion of vfs/vnode requests */ |
/* wakeup waiters for completion of vfs/vnode requests */ |
TAILQ_FOREACH(park, &pmp->pmp_req_touser, park_entries) { |
TAILQ_FOREACH(park, &pmp->pmp_req_touser, park_entries) { |
park->park_preq->preq_rv = ENXIO; |
if (park->park_preq) |
|
park->park_preq->preq_rv = ENXIO; |
TAILQ_REMOVE(&pmp->pmp_req_touser, park, park_entries); |
TAILQ_REMOVE(&pmp->pmp_req_touser, park, park_entries); |
wakeup(park); |
wakeup(park); |
} |
} |
} |
} |
|
|
|
/* |
|
* Converts a non-FAF op to a FAF. This simply involves making copies |
|
* of the park and request structures and tagging the request as a FAF. |
|
* It is safe to block here, since the original op is not a FAF. |
|
*/ |
|
struct puffs_park * |
|
puffs_reqtofaf(struct puffs_park *ppark) |
|
{ |
|
struct puffs_park *newpark; |
|
struct puffs_req *newpreq; |
|
|
|
KASSERT((ppark->park_preq->preq_opclass & PUFFSOPFLAG_FAF) == 0); |
|
|
|
MALLOC(newpark, struct puffs_park *, sizeof(struct puffs_park), |
|
M_PUFFS, M_ZERO | M_WAITOK); |
|
MALLOC(newpreq, struct puffs_req *, sizeof(struct puffs_req), |
|
M_PUFFS, M_ZERO | M_WAITOK); |
|
|
|
memcpy(newpark, ppark, sizeof(struct puffs_park)); |
|
memcpy(newpreq, ppark->park_preq, sizeof(struct puffs_req)); |
|
|
|
newpark->park_preq = newpreq; |
|
newpark->park_preq->preq_opclass |= PUFFSOPFLAG_FAF; |
|
|
|
return newpark; |
|
} |