VFS: find job only if request is an transaction

This commit is contained in:
Thomas Veerman 2012-03-30 09:05:28 +00:00
parent 8f55767619
commit f571466c56

View File

@ -71,7 +71,7 @@ int main(void)
* three major activities: getting new work, processing the work, and sending * three major activities: getting new work, processing the work, and sending
* the reply. This loop never terminates as long as the file system runs. * the reply. This loop never terminates as long as the file system runs.
*/ */
int transid, req; int transid;
struct job *job; struct job *job;
/* SEF local startup. */ /* SEF local startup. */
@ -83,18 +83,20 @@ int main(void)
while (TRUE) { while (TRUE) {
yield_all(); /* let other threads run */ yield_all(); /* let other threads run */
self = NULL; self = NULL;
job = NULL;
send_work(); send_work();
get_work(); get_work();
transid = TRNS_GET_ID(m_in.m_type); transid = TRNS_GET_ID(m_in.m_type);
req = TRNS_DEL_ID(m_in.m_type); if (IS_VFS_FS_TRANSID(transid)) {
job = worker_getjob( (thread_t) transid - VFS_TRANSID); job = worker_getjob( (thread_t) transid - VFS_TRANSID);
if (job == NULL) {
/* Transaction encoding changes original m_type value; restore. */ printf("VFS: spurious message %d from endpoint %d\n",
if (job == NULL) m_in.m_type, m_in.m_source);
m_in.m_type = transid; continue;
else }
m_in.m_type = req; m_in.m_type = TRNS_DEL_ID(m_in.m_type);
}
if (job != NULL) { if (job != NULL) {
do_fs_reply(job); do_fs_reply(job);