Fixes remove bug
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 29 Jan 2014 23:48:20 +0000 (15:48 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 30 Jan 2014 03:09:46 +0000 (19:09 -0800)
Inferno has this annoying habit of assuming a dev type == 0 means "do a
noop on close".  Devroot used to be the first in the devtab, but we
can't guarantee that since devtab is built by the linker.

kern/src/ns/sysfile.c

index df80ceb..6a359e2 100644 (file)
@@ -849,16 +849,16 @@ int sysremove(char *path)
 
        c = namec(path, Aremove, 0, 0);
        if (waserror()) {
-               c->type = 0;    /* see below */
+               c->type = -1;   /* see below */
                cclose(c);
                nexterror();
        }
        devtab[c->type].remove(c);
        /*
         * Remove clunks the fid, but we need to recover the Chan
-        * so fake it up.  rootclose() is known to be a nop.
+        * so fake it up.  -1 aborts the dev's close.
         */
-       c->type = 0;
+       c->type = -1;
        poperror();
        cclose(c);