Deleted Added
full compact
pseudofs.c (158611) pseudofs.c (167482)
1/*-
2 * Copyright (c) 2001 Dag-Erling Co�dan Sm�rgrav
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2001 Dag-Erling Co�dan Sm�rgrav
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
30__FBSDID("$FreeBSD: head/sys/fs/pseudofs/pseudofs.c 158611 2006-05-15 19:42:10Z kbyanc $");
30__FBSDID("$FreeBSD: head/sys/fs/pseudofs/pseudofs.c 167482 2007-03-12 12:16:52Z des $");
31
32#include "opt_pseudofs.h"
33
34#include <sys/param.h>
35#include <sys/kernel.h>
36#include <sys/systm.h>
37#include <sys/lock.h>
38#include <sys/malloc.h>

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

117 return (0);
118}
119
120/*
121 * Create a directory
122 */
123struct pfs_node *
124pfs_create_dir(struct pfs_node *parent, const char *name,
31
32#include "opt_pseudofs.h"
33
34#include <sys/param.h>
35#include <sys/kernel.h>
36#include <sys/systm.h>
37#include <sys/lock.h>
38#include <sys/malloc.h>

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

117 return (0);
118}
119
120/*
121 * Create a directory
122 */
123struct pfs_node *
124pfs_create_dir(struct pfs_node *parent, const char *name,
125 pfs_attr_t attr, pfs_vis_t vis, int flags)
125 pfs_attr_t attr, pfs_vis_t vis, pfs_destroy_t destroy,
126 int flags)
126{
127 struct pfs_node *dir;
128
129 KASSERT(strlen(name) < PFS_NAMELEN,
130 ("%s(): node name is too long", __func__));
131
132 MALLOC(dir, struct pfs_node *, sizeof *dir,
133 M_PFSNODES, M_WAITOK|M_ZERO);
134 strcpy(dir->pn_name, name);
135 dir->pn_type = (flags & PFS_PROCDEP) ? pfstype_procdir : pfstype_dir;
136 dir->pn_attr = attr;
137 dir->pn_vis = vis;
127{
128 struct pfs_node *dir;
129
130 KASSERT(strlen(name) < PFS_NAMELEN,
131 ("%s(): node name is too long", __func__));
132
133 MALLOC(dir, struct pfs_node *, sizeof *dir,
134 M_PFSNODES, M_WAITOK|M_ZERO);
135 strcpy(dir->pn_name, name);
136 dir->pn_type = (flags & PFS_PROCDEP) ? pfstype_procdir : pfstype_dir;
137 dir->pn_attr = attr;
138 dir->pn_vis = vis;
139 dir->pn_destroy = destroy;
138 dir->pn_flags = flags;
139
140 if (_pfs_add_node(parent, dir) != 0) {
141 FREE(dir, M_PFSNODES);
142 return (NULL);
143 }
144
145 if (_pfs_fixup_dir(dir) != 0) {

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

150 return (dir);
151}
152
153/*
154 * Create a file
155 */
156struct pfs_node *
157pfs_create_file(struct pfs_node *parent, const char *name, pfs_fill_t fill,
140 dir->pn_flags = flags;
141
142 if (_pfs_add_node(parent, dir) != 0) {
143 FREE(dir, M_PFSNODES);
144 return (NULL);
145 }
146
147 if (_pfs_fixup_dir(dir) != 0) {

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

152 return (dir);
153}
154
155/*
156 * Create a file
157 */
158struct pfs_node *
159pfs_create_file(struct pfs_node *parent, const char *name, pfs_fill_t fill,
158 pfs_attr_t attr, pfs_vis_t vis, int flags)
160 pfs_attr_t attr, pfs_vis_t vis, pfs_destroy_t destroy,
161 int flags)
159{
160 struct pfs_node *node;
161
162 KASSERT(strlen(name) < PFS_NAMELEN,
163 ("%s(): node name is too long", __func__));
164
165 MALLOC(node, struct pfs_node *, sizeof *node,
166 M_PFSNODES, M_WAITOK|M_ZERO);
167 strcpy(node->pn_name, name);
168 node->pn_type = pfstype_file;
169 node->pn_func = fill;
170 node->pn_attr = attr;
171 node->pn_vis = vis;
162{
163 struct pfs_node *node;
164
165 KASSERT(strlen(name) < PFS_NAMELEN,
166 ("%s(): node name is too long", __func__));
167
168 MALLOC(node, struct pfs_node *, sizeof *node,
169 M_PFSNODES, M_WAITOK|M_ZERO);
170 strcpy(node->pn_name, name);
171 node->pn_type = pfstype_file;
172 node->pn_func = fill;
173 node->pn_attr = attr;
174 node->pn_vis = vis;
175 node->pn_destroy = destroy;
172 node->pn_flags = flags;
173
174 if (_pfs_add_node(parent, node) != 0) {
175 FREE(node, M_PFSNODES);
176 return (NULL);
177 }
178
179 return (node);
180}
181
182/*
183 * Create a symlink
184 */
185struct pfs_node *
186pfs_create_link(struct pfs_node *parent, const char *name, pfs_fill_t fill,
176 node->pn_flags = flags;
177
178 if (_pfs_add_node(parent, node) != 0) {
179 FREE(node, M_PFSNODES);
180 return (NULL);
181 }
182
183 return (node);
184}
185
186/*
187 * Create a symlink
188 */
189struct pfs_node *
190pfs_create_link(struct pfs_node *parent, const char *name, pfs_fill_t fill,
187 pfs_attr_t attr, pfs_vis_t vis, int flags)
191 pfs_attr_t attr, pfs_vis_t vis, pfs_destroy_t destroy,
192 int flags)
188{
189 struct pfs_node *node;
190
193{
194 struct pfs_node *node;
195
191 node = pfs_create_file(parent, name, fill, attr, vis, flags);
196 node = pfs_create_file(parent, name, fill, attr, vis, destroy, flags);
192 if (node == NULL)
193 return (NULL);
194 node->pn_type = pfstype_symlink;
195 return (node);
196}
197
198/*
199 * Locate a node by name

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

244 break;
245 }
246 rover = rover->pn_next;
247 }
248 }
249 mtx_unlock(&node->pn_info->pi_mutex);
250 }
251
197 if (node == NULL)
198 return (NULL);
199 node->pn_type = pfstype_symlink;
200 return (node);
201}
202
203/*
204 * Locate a node by name

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

249 break;
250 }
251 rover = rover->pn_next;
252 }
253 }
254 mtx_unlock(&node->pn_info->pi_mutex);
255 }
256
257 /* callback to free any private resources */
258 if(node->pn_destroy != NULL)
259 (node->pn_destroy)(node);
260
252 /* revoke vnodes and release memory */
253 pfs_disable(node);
254 FREE(node, M_PFSNODES);
255
256 return (0);
257}
258
259/*

--- 162 unchanged lines hidden ---
261 /* revoke vnodes and release memory */
262 pfs_disable(node);
263 FREE(node, M_PFSNODES);
264
265 return (0);
266}
267
268/*

--- 162 unchanged lines hidden ---