1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
---
sys/kern/vfs_mount.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -582,10 +582,10 @@
struct vfsopt *opt, *noro_opt, *tmp_opt;
char *fstype, *fspath, *errmsg;
int error, fstypelen, fspathlen, errmsg_len, errmsg_pos;
- int has_rw, has_noro;
+ int has_noro;
errmsg = fspath = NULL;
- errmsg_len = has_noro = has_rw = fspathlen = 0;
+ errmsg_len = has_noro = fspathlen = 0;
errmsg_pos = -1;
error = vfs_buildopts(fsoptions, &optlist);
@@ -682,10 +682,8 @@
fsflags &= ~MNT_RDONLY;
has_noro = 1;
}
- else if (strcmp(opt->name, "rw") == 0) {
+ else if (strcmp(opt->name, "rw") == 0)
fsflags &= ~MNT_RDONLY;
- has_rw = 1;
- }
else if (strcmp(opt->name, "ro") == 0)
fsflags |= MNT_RDONLY;
else if (strcmp(opt->name, "rdonly") == 0) {
@@ -707,7 +705,7 @@
* we need a mount option "noro", since in vfs_mergeopts(),
* "noro" will cancel "ro", but "rw" will not do anything.
*/
- if (has_rw && !has_noro) {
+ if (!(fsflags & MNT_RDONLY) && !has_noro) {
noro_opt = malloc(sizeof(struct vfsopt), M_MOUNT, M_WAITOK);
noro_opt->name = strdup("noro", M_MOUNT);
noro_opt->value = NULL;
|