182 * IO op has completed.
183 */
184 uint32_t master_index = 0;
185 typedef struct mio_master {
186 kmutex_t mm_mutex; /* protect the fields below */
187 int32_t mm_size;
188 buf_t *mm_bp; /* original bp */
189 int32_t mm_resid; /* bytes remaining to transfer */
190 int32_t mm_error; /* accumulated error from slaves */
191 int32_t mm_index; /* XXX debugging */
192 } mio_master_t;
193
194 typedef struct mio_slave {
195 buf_t ms_buf; /* working buffer for this IO chunk */
196 mio_master_t *ms_ptr; /* pointer to master */
197 } mio_slave_t;
198
199 struct vnodeops *udf_vnodeops;
200
201 const fs_operation_def_t udf_vnodeops_template[] = {
202 VOPNAME_OPEN, { .vop_open = udf_open },
203 VOPNAME_CLOSE, { .vop_close = udf_close },
204 VOPNAME_READ, { .vop_read = udf_read },
205 VOPNAME_WRITE, { .vop_write = udf_write },
206 VOPNAME_IOCTL, { .vop_ioctl = udf_ioctl },
207 VOPNAME_GETATTR, { .vop_getattr = udf_getattr },
208 VOPNAME_SETATTR, { .vop_setattr = udf_setattr },
209 VOPNAME_ACCESS, { .vop_access = udf_access },
210 VOPNAME_LOOKUP, { .vop_lookup = udf_lookup },
211 VOPNAME_CREATE, { .vop_create = udf_create },
212 VOPNAME_REMOVE, { .vop_remove = udf_remove },
213 VOPNAME_LINK, { .vop_link = udf_link },
214 VOPNAME_RENAME, { .vop_rename = udf_rename },
215 VOPNAME_MKDIR, { .vop_mkdir = udf_mkdir },
216 VOPNAME_RMDIR, { .vop_rmdir = udf_rmdir },
217 VOPNAME_READDIR, { .vop_readdir = udf_readdir },
218 VOPNAME_SYMLINK, { .vop_symlink = udf_symlink },
219 VOPNAME_READLINK, { .vop_readlink = udf_readlink },
220 VOPNAME_FSYNC, { .vop_fsync = udf_fsync },
221 VOPNAME_INACTIVE, { .vop_inactive = udf_inactive },
222 VOPNAME_FID, { .vop_fid = udf_fid },
223 VOPNAME_RWLOCK, { .vop_rwlock = udf_rwlock },
224 VOPNAME_RWUNLOCK, { .vop_rwunlock = udf_rwunlock },
225 VOPNAME_SEEK, { .vop_seek = udf_seek },
226 VOPNAME_FRLOCK, { .vop_frlock = udf_frlock },
227 VOPNAME_SPACE, { .vop_space = udf_space },
228 VOPNAME_GETPAGE, { .vop_getpage = udf_getpage },
229 VOPNAME_PUTPAGE, { .vop_putpage = udf_putpage },
230 VOPNAME_MAP, { .vop_map = udf_map },
231 VOPNAME_ADDMAP, { .vop_addmap = udf_addmap },
232 VOPNAME_DELMAP, { .vop_delmap = udf_delmap },
233 VOPNAME_PATHCONF, { .vop_pathconf = udf_l_pathconf },
234 VOPNAME_PAGEIO, { .vop_pageio = udf_pageio },
235 VOPNAME_VNEVENT, { .vop_vnevent = fs_vnevent_support },
236 NULL, NULL
237 };
238
239 /* ARGSUSED */
240 static int32_t
241 udf_open(
242 struct vnode **vpp,
243 int32_t flag,
244 struct cred *cr,
245 caller_context_t *ct)
246 {
247 ud_printf("udf_open\n");
248
249 return (0);
250 }
251
252 /* ARGSUSED */
253 static int32_t
254 udf_close(
255 struct vnode *vp,
256 int32_t flag,
|
182 * IO op has completed.
183 */
184 uint32_t master_index = 0;
185 typedef struct mio_master {
186 kmutex_t mm_mutex; /* protect the fields below */
187 int32_t mm_size;
188 buf_t *mm_bp; /* original bp */
189 int32_t mm_resid; /* bytes remaining to transfer */
190 int32_t mm_error; /* accumulated error from slaves */
191 int32_t mm_index; /* XXX debugging */
192 } mio_master_t;
193
194 typedef struct mio_slave {
195 buf_t ms_buf; /* working buffer for this IO chunk */
196 mio_master_t *ms_ptr; /* pointer to master */
197 } mio_slave_t;
198
199 struct vnodeops *udf_vnodeops;
200
201 const fs_operation_def_t udf_vnodeops_template[] = {
202 { VOPNAME_OPEN, { .vop_open = udf_open } },
203 { VOPNAME_CLOSE, { .vop_close = udf_close } },
204 { VOPNAME_READ, { .vop_read = udf_read } },
205 { VOPNAME_WRITE, { .vop_write = udf_write } },
206 { VOPNAME_IOCTL, { .vop_ioctl = udf_ioctl } },
207 { VOPNAME_GETATTR, { .vop_getattr = udf_getattr } },
208 { VOPNAME_SETATTR, { .vop_setattr = udf_setattr } },
209 { VOPNAME_ACCESS, { .vop_access = udf_access } },
210 { VOPNAME_LOOKUP, { .vop_lookup = udf_lookup } },
211 { VOPNAME_CREATE, { .vop_create = udf_create } },
212 { VOPNAME_REMOVE, { .vop_remove = udf_remove } },
213 { VOPNAME_LINK, { .vop_link = udf_link } },
214 { VOPNAME_RENAME, { .vop_rename = udf_rename } },
215 { VOPNAME_MKDIR, { .vop_mkdir = udf_mkdir } },
216 { VOPNAME_RMDIR, { .vop_rmdir = udf_rmdir } },
217 { VOPNAME_READDIR, { .vop_readdir = udf_readdir } },
218 { VOPNAME_SYMLINK, { .vop_symlink = udf_symlink } },
219 { VOPNAME_READLINK, { .vop_readlink = udf_readlink } },
220 { VOPNAME_FSYNC, { .vop_fsync = udf_fsync } },
221 { VOPNAME_INACTIVE, { .vop_inactive = udf_inactive } },
222 { VOPNAME_FID, { .vop_fid = udf_fid } },
223 { VOPNAME_RWLOCK, { .vop_rwlock = udf_rwlock } },
224 { VOPNAME_RWUNLOCK, { .vop_rwunlock = udf_rwunlock } },
225 { VOPNAME_SEEK, { .vop_seek = udf_seek } },
226 { VOPNAME_FRLOCK, { .vop_frlock = udf_frlock } },
227 { VOPNAME_SPACE, { .vop_space = udf_space } },
228 { VOPNAME_GETPAGE, { .vop_getpage = udf_getpage } },
229 { VOPNAME_PUTPAGE, { .vop_putpage = udf_putpage } },
230 { VOPNAME_MAP, { .vop_map = udf_map } },
231 { VOPNAME_ADDMAP, { .vop_addmap = udf_addmap } },
232 { VOPNAME_DELMAP, { .vop_delmap = udf_delmap } },
233 { VOPNAME_PATHCONF, { .vop_pathconf = udf_l_pathconf } },
234 { VOPNAME_PAGEIO, { .vop_pageio = udf_pageio } },
235 { VOPNAME_VNEVENT, { .vop_vnevent = fs_vnevent_support } },
236 { NULL, { NULL } }
237 };
238
239 /* ARGSUSED */
240 static int32_t
241 udf_open(
242 struct vnode **vpp,
243 int32_t flag,
244 struct cred *cr,
245 caller_context_t *ct)
246 {
247 ud_printf("udf_open\n");
248
249 return (0);
250 }
251
252 /* ARGSUSED */
253 static int32_t
254 udf_close(
255 struct vnode *vp,
256 int32_t flag,
|