]> Zhao Yanbai Git Server - minix.git/commitdiff
Unmap drivers upon exit
authorThomas Veerman <thomas@minix3.org>
Tue, 13 Sep 2011 13:02:47 +0000 (13:02 +0000)
committerThomas Veerman <thomas@minix3.org>
Fri, 16 Sep 2011 10:16:00 +0000 (10:16 +0000)
servers/avfs/device.c
servers/avfs/misc.c
servers/avfs/proto.h

index 4fc25ab95b346543d3258f623170421dcc553288..b75200a3b80934df6872a06990040942447f930b 100644 (file)
@@ -565,8 +565,8 @@ PUBLIC int do_ioctl()
 /*===========================================================================*
  *                             gen_io                                       *
  *===========================================================================*/
-PUBLIC int gen_io(task_nr, mess_ptr)
-endpoint_t task_nr;            /* which task to call */
+PUBLIC int gen_io(driver_e, mess_ptr)
+endpoint_t driver_e;           /* which endpoint to call */
 message *mess_ptr;             /* pointer to message for task */
 {
 /* All file system I/O ultimately comes down to I/O on major/minor device
@@ -577,15 +577,15 @@ message *mess_ptr;                /* pointer to message for task */
 
   proc_e = mess_ptr->USER_ENDPT;
 
-  r = sendrec(task_nr, mess_ptr);
+  r = sendrec(driver_e, mess_ptr);
   if (r == OK && mess_ptr->REP_STATUS == ERESTART) r = EDEADEPT;
   if (r != OK) {
        if (r == EDEADSRCDST || r == EDEADEPT) {
-               printf("VFS: dead driver %d\n", task_nr);
-               dmap_unmap_by_endpt(task_nr);
+               printf("VFS: dead driver %d\n", driver_e);
+               dmap_unmap_by_endpt(driver_e);
                return(r);
        } else if (r == ELOCKED) {
-               printf("VFS: ELOCKED talking to %d\n", task_nr);
+               printf("VFS: ELOCKED talking to %d\n", driver_e);
                return(r);
        }
        panic("call_task: can't send/receive: %d", r);
index 0aee50600ad5ee9464cc8ca4e394f2af0d1f642f..092078c05dee15cfed62a3b7fd95fadff16d72ad 100644 (file)
@@ -456,6 +456,7 @@ PRIVATE void free_proc(struct fproc *exiter, int flags)
    * dmap table is used in the first step.)
    */
   unsuspend_by_endpt(exiter->fp_endpoint);
+  dmap_unmap_by_endpt(exiter->fp_endpoint);
 
   /* Release root and working directories. */
   if (exiter->fp_rd) { put_vnode(exiter->fp_rd); exiter->fp_rd = NULL; }
index d0c51b14abc49b71020f006cac1d28096f3ce7ac..9a327da78008ff6684cc11e4bd33b886813d1a66 100644 (file)
@@ -32,7 +32,7 @@ _PROTOTYPE( int dev_close, (dev_t dev, int filp_no)                   );
 _PROTOTYPE( int dev_io, (int op, dev_t dev, endpoint_t proc_e, void *buf,
                u64_t pos, size_t bytes, int flags, int suspend_reopen) );
 _PROTOTYPE( int gen_opcl, (int op, dev_t dev, endpoint_t task_nr, int flags));
-_PROTOTYPE( int gen_io, (int task_nr, message *mess_ptr)               );
+_PROTOTYPE( int gen_io, (endpoint_t driver_e, message *mess_ptr)               );
 _PROTOTYPE( int asyn_io, (int task_nr, message *mess_ptr)              );
 _PROTOTYPE( int no_dev, (int op, dev_t dev, int proc, int flags)       );
 _PROTOTYPE( int no_dev_io, (int, message *)                            );