summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_extattr.c
diff options
context:
space:
mode:
authormux <mux@FreeBSD.org>2002-05-23 23:02:19 +0000
committermux <mux@FreeBSD.org>2002-05-23 23:02:19 +0000
commit67080508a876e1f11f67b14f032dea36788a310e (patch)
treed3e0f99d4809cc83209a4999a13558ca721cd416 /sys/kern/vfs_extattr.c
parent617cfa745a862b7dacb60c495c61c54120e91eba (diff)
downloadFreeBSD-src-67080508a876e1f11f67b14f032dea36788a310e.zip
FreeBSD-src-67080508a876e1f11f67b14f032dea36788a310e.tar.gz
Slightly change the way we pass mount options to the filesystem
VFS_NMOUNT operations. Reviewed by: phk
Diffstat (limited to 'sys/kern/vfs_extattr.c')
-rw-r--r--sys/kern/vfs_extattr.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 6360b60..8117506 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -434,7 +434,6 @@ vfs_nmount(td, fsflags, fsoptions)
mp->mnt_flag |= fsflags &
(MNT_RELOAD | MNT_FORCE | MNT_UPDATE | MNT_SNAPSHOT);
VOP_UNLOCK(vp, 0, td);
- mp->mnt_optnew = optlist;
goto update;
}
/*
@@ -528,8 +527,8 @@ vfs_nmount(td, fsflags, fsoptions)
mp->mnt_iosize_max = DFLTPHYS;
VOP_UNLOCK(vp, 0, td);
- mp->mnt_opt = optlist;
update:
+ mp->mnt_optnew = optlist;
/*
* Check if the fs implements the new VFS_NMOUNT()
* function, since the new system call was used.
@@ -567,6 +566,17 @@ update:
* get. No freeing of cn_pnbuf.
*/
error = VFS_NMOUNT(mp, &nd, td);
+ if (!error) {
+ if (mp->mnt_opt != NULL)
+ vfs_freeopts(mp->mnt_opt);
+ mp->mnt_opt = mp->mnt_optnew;
+ } else
+ vfs_freeopts(mp->mnt_optnew);
+ /*
+ * Prevent external consumers of mount
+ * options to read mnt_optnew.
+ */
+ mp->mnt_optnew = NULL;
if (mp->mnt_flag & MNT_UPDATE) {
if (mp->mnt_kern_flag & MNTK_WANTRDWR)
mp->mnt_flag &= ~MNT_RDONLY;
@@ -576,10 +586,6 @@ update:
if (error) {
mp->mnt_flag = flag;
mp->mnt_kern_flag = kern_flag;
- vfs_freeopts(mp->mnt_optnew);
- } else {
- vfs_freeopts(mp->mnt_opt);
- mp->mnt_opt = mp->mnt_optnew;
}
if ((mp->mnt_flag & MNT_RDONLY) == 0) {
if (mp->mnt_syncer == NULL)
OpenPOWER on IntegriCloud