Messages in this thread | | | Date | Sat, 20 Dec 1997 18:02:48 -0500 (EST) | From | "Peter J. Braam" <> | Subject | waiting and scheduling: is this OK? |
| |
The Coda filesystem passes requests to a user level cache manager and waits for answers. I tried to imitate things like "soft" and "hard" mounting from NFS but added a timeout for signals so that "short" calls (like stat, which programs like to complete) will not normally be interrupted in kernel mode.
When coda waits for a message it executes the routine below? Is this OK? I am asking because the routines interruptible_sleep_on etc are much more careful, but I don't understand the details there.
Thanks for any help!
- Peter -
(ps this is not in 2.1.73 yet, I'll send a patch tomorrow or so).
static inline void coda_waitfor_upcall(struct vmsg *vmp) { struct wait_queue wait = { current, NULL };
vmp->vm_posttime = jiffies;
add_wait_queue(&vmp->vm_sleep, &wait); for (;;) { if ( coda_hard == 0 ) current->state = TASK_INTERRUPTIBLE; else current->state = TASK_UNINTERRUPTIBLE;
if ( vmp->vm_flags & VM_WRITE ) break; if (signal_pending(current) && (jiffies > vmp->vm_posttime + coda_timeout * HZ) ) break; schedule(); } remove_wait_queue(&vmp->vm_sleep, &wait); current->state = TASK_RUNNING;
return; }
| |