From: Thomas Veerman Date: Fri, 30 Mar 2012 09:05:28 +0000 (+0000) Subject: VFS: find job only if request is an transaction X-Git-Tag: v3.2.1~603 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/Bv9ARM.ch09.html?a=commitdiff_plain;h=f571466c5642e5512e9bbc13bd49dd84b19280d6;p=minix.git VFS: find job only if request is an transaction --- diff --git a/servers/vfs/main.c b/servers/vfs/main.c index 56eb1b84c..4e5791e49 100644 --- a/servers/vfs/main.c +++ b/servers/vfs/main.c @@ -71,7 +71,7 @@ int main(void) * three major activities: getting new work, processing the work, and sending * the reply. This loop never terminates as long as the file system runs. */ - int transid, req; + int transid; struct job *job; /* SEF local startup. */ @@ -83,18 +83,20 @@ int main(void) while (TRUE) { yield_all(); /* let other threads run */ self = NULL; + job = NULL; send_work(); get_work(); transid = TRNS_GET_ID(m_in.m_type); - req = TRNS_DEL_ID(m_in.m_type); - job = worker_getjob( (thread_t) transid - VFS_TRANSID); - - /* Transaction encoding changes original m_type value; restore. */ - if (job == NULL) - m_in.m_type = transid; - else - m_in.m_type = req; + if (IS_VFS_FS_TRANSID(transid)) { + job = worker_getjob( (thread_t) transid - VFS_TRANSID); + if (job == NULL) { + printf("VFS: spurious message %d from endpoint %d\n", + m_in.m_type, m_in.m_source); + continue; + } + m_in.m_type = TRNS_DEL_ID(m_in.m_type); + } if (job != NULL) { do_fs_reply(job);