diff options
author | jamie <jamie@FreeBSD.org> | 2013-02-21 02:41:37 +0000 |
---|---|---|
committer | jamie <jamie@FreeBSD.org> | 2013-02-21 02:41:37 +0000 |
commit | 7e78ded6e9d467c0d625e405efdd95e374dcc8e5 (patch) | |
tree | 39044cc173d2d06c0058055b59d6ee4a6b1edad5 /sys/kern/vfs_init.c | |
parent | 8959a7aebb9aede121d4c8f2c7ba5ecd1af8fbcf (diff) | |
download | FreeBSD-src-7e78ded6e9d467c0d625e405efdd95e374dcc8e5.zip FreeBSD-src-7e78ded6e9d467c0d625e405efdd95e374dcc8e5.tar.gz |
Don't worry if a module is already loaded when looking for a fstype to mount
(possible in a race condition).
Reviewed by: kib
MFC after: 1 week
Diffstat (limited to 'sys/kern/vfs_init.c')
-rw-r--r-- | sys/kern/vfs_init.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/vfs_init.c b/sys/kern/vfs_init.c index 8172f18..eab48fb 100644 --- a/sys/kern/vfs_init.c +++ b/sys/kern/vfs_init.c @@ -122,7 +122,7 @@ struct vfsconf * vfs_byname_kld(const char *fstype, struct thread *td, int *error) { struct vfsconf *vfsp; - int fileid; + int fileid, loaded; vfsp = vfs_byname(fstype); if (vfsp != NULL) @@ -130,13 +130,17 @@ vfs_byname_kld(const char *fstype, struct thread *td, int *error) /* Try to load the respective module. */ *error = kern_kldload(td, fstype, &fileid); + loaded = (*error == 0); + if (*error == EEXIST) + *error = 0; if (*error) return (NULL); /* Look up again to see if the VFS was loaded. */ vfsp = vfs_byname(fstype); if (vfsp == NULL) { - (void)kern_kldunload(td, fileid, LINKER_UNLOAD_FORCE); + if (loaded) + (void)kern_kldunload(td, fileid, LINKER_UNLOAD_FORCE); *error = ENODEV; return (NULL); } |