Deleted Added
full compact
devfs_vfsops.c (210925) devfs_vfsops.c (231265)
1/*-
2 * Copyright (c) 1992, 1993, 1995
3 * The Regents of the University of California. All rights reserved.
4 * Copyright (c) 2000
5 * Poul-Henning Kamp. All rights reserved.
6 *
7 * This code is derived from software donated to Berkeley by
8 * Jan-Simon Pendry.

--- 17 unchanged lines hidden (view full) ---

26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)kernfs_vfsops.c 8.10 (Berkeley) 5/14/95
32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vfsops.c 1.36
33 *
1/*-
2 * Copyright (c) 1992, 1993, 1995
3 * The Regents of the University of California. All rights reserved.
4 * Copyright (c) 2000
5 * Poul-Henning Kamp. All rights reserved.
6 *
7 * This code is derived from software donated to Berkeley by
8 * Jan-Simon Pendry.

--- 17 unchanged lines hidden (view full) ---

26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)kernfs_vfsops.c 8.10 (Berkeley) 5/14/95
32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vfsops.c 1.36
33 *
34 * $FreeBSD: head/sys/fs/devfs/devfs_vfsops.c 210925 2010-08-06 09:46:53Z kib $
34 * $FreeBSD: head/sys/fs/devfs/devfs_vfsops.c 231265 2012-02-09 10:09:12Z mm $
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/kernel.h>
40#include <sys/lock.h>
41#include <sys/malloc.h>
42#include <sys/mount.h>

--- 8 unchanged lines hidden (view full) ---

51
52MALLOC_DEFINE(M_DEVFS, "DEVFS", "DEVFS data");
53
54static vfs_mount_t devfs_mount;
55static vfs_unmount_t devfs_unmount;
56static vfs_root_t devfs_root;
57static vfs_statfs_t devfs_statfs;
58
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/kernel.h>
40#include <sys/lock.h>
41#include <sys/malloc.h>
42#include <sys/mount.h>

--- 8 unchanged lines hidden (view full) ---

51
52MALLOC_DEFINE(M_DEVFS, "DEVFS", "DEVFS data");
53
54static vfs_mount_t devfs_mount;
55static vfs_unmount_t devfs_unmount;
56static vfs_root_t devfs_root;
57static vfs_statfs_t devfs_statfs;
58
59static const char *devfs_opts[] = {
60 "from", "ruleset", NULL
61};
62
59/*
60 * Mount the filesystem
61 */
62static int
63devfs_mount(struct mount *mp)
64{
65 int error;
66 struct devfs_mount *fmp;
67 struct vnode *rvp;
63/*
64 * Mount the filesystem
65 */
66static int
67devfs_mount(struct mount *mp)
68{
69 int error;
70 struct devfs_mount *fmp;
71 struct vnode *rvp;
72 int rsnum;
68
69 if (devfs_unr == NULL)
70 devfs_unr = new_unrhdr(0, INT_MAX, NULL);
71
72 error = 0;
73
73
74 if (devfs_unr == NULL)
75 devfs_unr = new_unrhdr(0, INT_MAX, NULL);
76
77 error = 0;
78
74 if (mp->mnt_flag & (MNT_UPDATE | MNT_ROOTFS))
79 if (mp->mnt_flag & MNT_ROOTFS)
75 return (EOPNOTSUPP);
76
80 return (EOPNOTSUPP);
81
82 rsnum = 0;
83
84 if (mp->mnt_optnew != NULL) {
85 if (vfs_filteropt(mp->mnt_optnew, devfs_opts))
86 return (EINVAL);
87
88 if (vfs_getopt(mp->mnt_optnew, "ruleset", NULL, NULL) == 0 &&
89 (vfs_scanopt(mp->mnt_optnew, "ruleset", "%d",
90 &rsnum) != 1 || rsnum < 0 || rsnum > 65535))
91 error = EINVAL;
92 }
93
94 if (error) {
95 vfs_mount_error(mp, "%s", "invalid ruleset specification");
96 return (error);
97 }
98
99 if (mp->mnt_flag & MNT_UPDATE) {
100 if (rsnum != 0) {
101 fmp = mp->mnt_data;
102 if (fmp != NULL) {
103 sx_xlock(&fmp->dm_lock);
104 devfs_ruleset_set((devfs_rsnum)rsnum, fmp);
105 devfs_ruleset_apply(fmp);
106 sx_xunlock(&fmp->dm_lock);
107 }
108 }
109 return (0);
110 }
111
77 fmp = malloc(sizeof *fmp, M_DEVFS, M_WAITOK | M_ZERO);
78 fmp->dm_idx = alloc_unr(devfs_unr);
79 sx_init(&fmp->dm_lock, "devfsmount");
80 fmp->dm_holdcnt = 1;
81
82 MNT_ILOCK(mp);
83 mp->mnt_flag |= MNT_LOCAL;
84 mp->mnt_kern_flag |= MNTK_MPSAFE | MNTK_LOOKUP_SHARED |

--- 11 unchanged lines hidden (view full) ---

96 error = devfs_root(mp, LK_EXCLUSIVE, &rvp);
97 if (error) {
98 sx_destroy(&fmp->dm_lock);
99 free_unr(devfs_unr, fmp->dm_idx);
100 free(fmp, M_DEVFS);
101 return (error);
102 }
103
112 fmp = malloc(sizeof *fmp, M_DEVFS, M_WAITOK | M_ZERO);
113 fmp->dm_idx = alloc_unr(devfs_unr);
114 sx_init(&fmp->dm_lock, "devfsmount");
115 fmp->dm_holdcnt = 1;
116
117 MNT_ILOCK(mp);
118 mp->mnt_flag |= MNT_LOCAL;
119 mp->mnt_kern_flag |= MNTK_MPSAFE | MNTK_LOOKUP_SHARED |

--- 11 unchanged lines hidden (view full) ---

131 error = devfs_root(mp, LK_EXCLUSIVE, &rvp);
132 if (error) {
133 sx_destroy(&fmp->dm_lock);
134 free_unr(devfs_unr, fmp->dm_idx);
135 free(fmp, M_DEVFS);
136 return (error);
137 }
138
139 if (rsnum != 0) {
140 sx_xlock(&fmp->dm_lock);
141 devfs_ruleset_set((devfs_rsnum)rsnum, fmp);
142 sx_xunlock(&fmp->dm_lock);
143 }
144
104 VOP_UNLOCK(rvp, 0);
105
106 vfs_mountedfrom(mp, "devfs");
107
108 return (0);
109}
110
111void

--- 78 unchanged lines hidden ---
145 VOP_UNLOCK(rvp, 0);
146
147 vfs_mountedfrom(mp, "devfs");
148
149 return (0);
150}
151
152void

--- 78 unchanged lines hidden ---