]> Zhao Yanbai Git Server - minix.git/commitdiff
VFS: fix access bits in device reopen calls 94/694/1
authorDavid van Moolenbroek <david@minix3.org>
Sun, 4 Aug 2013 12:39:02 +0000 (14:39 +0200)
committerDavid van Moolenbroek <david@minix3.org>
Mon, 5 Aug 2013 10:30:13 +0000 (12:30 +0200)
servers/vfs/device.c
servers/vfs/glo.h
servers/vfs/open.c

index e52db1086680df5ebe472812c05e9f59a75e9659..ab42a22380b58952579750cb5ced5b770743ab2d 100644 (file)
@@ -968,7 +968,7 @@ void bdev_up(int maj)
        if (!S_ISBLK(vp->v_mode)) continue;
 
        /* Reopen the device on the driver, once per filp. */
-       bits = mode_map[rfilp->filp_mode & O_ACCMODE];
+       bits = rfilp->filp_mode & (R_BIT|W_BIT);
        if ((r = bdev_open(vp->v_sdev, bits)) != OK) {
                printf("VFS: mounted dev %d/%d re-open failed: %d.\n",
                        maj, minor(vp->v_sdev), r);
@@ -1124,7 +1124,7 @@ int maj;
        if (rfilp->filp_flags & O_REOPEN) {
                /* Try to reopen a file upon driver restart */
                r = dev_reopen(vp->v_sdev, rfilp-filp,
-                       vp->v_mode & (R_BIT|W_BIT));
+                       rfilp->filp_mode & (R_BIT|W_BIT));
 
                if (r == OK)
                        return;
index ad17d1ea418f9f76174cc942a30269bb74aff651..be48c1ba3c44ec131a54a89af5e6cf1bf3bcbec0 100644 (file)
@@ -51,7 +51,6 @@ EXTERN int err_code;          /* temporary storage for error number */
 /* Data initialized elsewhere. */
 extern int(*call_vec[]) (message *);
 extern int(*pfs_call_vec[]) (message *m_out);
-extern char mode_map[];        /* mapping from O_ACCMODE mask to R_BIT/W_BIT flags */
 
 EXTERN struct kinfo kinfo;     /* kernel information */
 
index 71efa1dec70e54d7a9cdf4c2585aa5c588e87e78..2d0dde2000a461d70ab2332ab611938941c3edeb 100644 (file)
@@ -31,7 +31,7 @@
 #include "vmnt.h"
 #include "path.h"
 
-char mode_map[] = {R_BIT, W_BIT, R_BIT|W_BIT, 0};
+static char mode_map[] = {R_BIT, W_BIT, R_BIT|W_BIT, 0};
 
 static struct vnode *new_node(struct lookup *resolve, int oflags,
        mode_t bits);