1234 static int
1235 lo_shrlock(
1236 vnode_t *vp,
1237 int cmd,
1238 struct shrlock *shr,
1239 int flag,
1240 cred_t *cr,
1241 caller_context_t *ct)
1242 {
1243 vp = realvp(vp);
1244 return (VOP_SHRLOCK(vp, cmd, shr, flag, cr, ct));
1245 }
1246
1247 /*
1248 * Loopback vnode operations vector.
1249 */
1250
1251 struct vnodeops *lo_vnodeops;
1252
1253 const fs_operation_def_t lo_vnodeops_template[] = {
1254 VOPNAME_OPEN, { .vop_open = lo_open },
1255 VOPNAME_CLOSE, { .vop_close = lo_close },
1256 VOPNAME_READ, { .vop_read = lo_read },
1257 VOPNAME_WRITE, { .vop_write = lo_write },
1258 VOPNAME_IOCTL, { .vop_ioctl = lo_ioctl },
1259 VOPNAME_SETFL, { .vop_setfl = lo_setfl },
1260 VOPNAME_GETATTR, { .vop_getattr = lo_getattr },
1261 VOPNAME_SETATTR, { .vop_setattr = lo_setattr },
1262 VOPNAME_ACCESS, { .vop_access = lo_access },
1263 VOPNAME_LOOKUP, { .vop_lookup = lo_lookup },
1264 VOPNAME_CREATE, { .vop_create = lo_create },
1265 VOPNAME_REMOVE, { .vop_remove = lo_remove },
1266 VOPNAME_LINK, { .vop_link = lo_link },
1267 VOPNAME_RENAME, { .vop_rename = lo_rename },
1268 VOPNAME_MKDIR, { .vop_mkdir = lo_mkdir },
1269 VOPNAME_RMDIR, { .vop_rmdir = lo_rmdir },
1270 VOPNAME_READDIR, { .vop_readdir = lo_readdir },
1271 VOPNAME_SYMLINK, { .vop_symlink = lo_symlink },
1272 VOPNAME_READLINK, { .vop_readlink = lo_readlink },
1273 VOPNAME_FSYNC, { .vop_fsync = lo_fsync },
1274 VOPNAME_INACTIVE, { .vop_inactive = lo_inactive },
1275 VOPNAME_FID, { .vop_fid = lo_fid },
1276 VOPNAME_RWLOCK, { .vop_rwlock = lo_rwlock },
1277 VOPNAME_RWUNLOCK, { .vop_rwunlock = lo_rwunlock },
1278 VOPNAME_SEEK, { .vop_seek = lo_seek },
1279 VOPNAME_CMP, { .vop_cmp = lo_cmp },
1280 VOPNAME_FRLOCK, { .vop_frlock = lo_frlock },
1281 VOPNAME_SPACE, { .vop_space = lo_space },
1282 VOPNAME_REALVP, { .vop_realvp = lo_realvp },
1283 VOPNAME_GETPAGE, { .vop_getpage = lo_getpage },
1284 VOPNAME_PUTPAGE, { .vop_putpage = lo_putpage },
1285 VOPNAME_MAP, { .vop_map = lo_map },
1286 VOPNAME_ADDMAP, { .vop_addmap = lo_addmap },
1287 VOPNAME_DELMAP, { .vop_delmap = lo_delmap },
1288 VOPNAME_POLL, { .vop_poll = lo_poll },
1289 VOPNAME_DUMP, { .vop_dump = lo_dump },
1290 VOPNAME_DUMPCTL, { .error = fs_error }, /* XXX - why? */
1291 VOPNAME_PATHCONF, { .vop_pathconf = lo_pathconf },
1292 VOPNAME_PAGEIO, { .vop_pageio = lo_pageio },
1293 VOPNAME_DISPOSE, { .vop_dispose = lo_dispose },
1294 VOPNAME_SETSECATTR, { .vop_setsecattr = lo_setsecattr },
1295 VOPNAME_GETSECATTR, { .vop_getsecattr = lo_getsecattr },
1296 VOPNAME_SHRLOCK, { .vop_shrlock = lo_shrlock },
1297 NULL, NULL
1298 };
|
1234 static int
1235 lo_shrlock(
1236 vnode_t *vp,
1237 int cmd,
1238 struct shrlock *shr,
1239 int flag,
1240 cred_t *cr,
1241 caller_context_t *ct)
1242 {
1243 vp = realvp(vp);
1244 return (VOP_SHRLOCK(vp, cmd, shr, flag, cr, ct));
1245 }
1246
1247 /*
1248 * Loopback vnode operations vector.
1249 */
1250
1251 struct vnodeops *lo_vnodeops;
1252
1253 const fs_operation_def_t lo_vnodeops_template[] = {
1254 { VOPNAME_OPEN, { .vop_open = lo_open } },
1255 { VOPNAME_CLOSE, { .vop_close = lo_close } },
1256 { VOPNAME_READ, { .vop_read = lo_read } },
1257 { VOPNAME_WRITE, { .vop_write = lo_write } },
1258 { VOPNAME_IOCTL, { .vop_ioctl = lo_ioctl } },
1259 { VOPNAME_SETFL, { .vop_setfl = lo_setfl } },
1260 { VOPNAME_GETATTR, { .vop_getattr = lo_getattr } },
1261 { VOPNAME_SETATTR, { .vop_setattr = lo_setattr } },
1262 { VOPNAME_ACCESS, { .vop_access = lo_access } },
1263 { VOPNAME_LOOKUP, { .vop_lookup = lo_lookup } },
1264 { VOPNAME_CREATE, { .vop_create = lo_create } },
1265 { VOPNAME_REMOVE, { .vop_remove = lo_remove } },
1266 { VOPNAME_LINK, { .vop_link = lo_link } },
1267 { VOPNAME_RENAME, { .vop_rename = lo_rename } },
1268 { VOPNAME_MKDIR, { .vop_mkdir = lo_mkdir } },
1269 { VOPNAME_RMDIR, { .vop_rmdir = lo_rmdir } },
1270 { VOPNAME_READDIR, { .vop_readdir = lo_readdir } },
1271 { VOPNAME_SYMLINK, { .vop_symlink = lo_symlink } },
1272 { VOPNAME_READLINK, { .vop_readlink = lo_readlink } },
1273 { VOPNAME_FSYNC, { .vop_fsync = lo_fsync } },
1274 { VOPNAME_INACTIVE, { .vop_inactive = lo_inactive } },
1275 { VOPNAME_FID, { .vop_fid = lo_fid } },
1276 { VOPNAME_RWLOCK, { .vop_rwlock = lo_rwlock } },
1277 { VOPNAME_RWUNLOCK, { .vop_rwunlock = lo_rwunlock } },
1278 { VOPNAME_SEEK, { .vop_seek = lo_seek } },
1279 { VOPNAME_CMP, { .vop_cmp = lo_cmp } },
1280 { VOPNAME_FRLOCK, { .vop_frlock = lo_frlock } },
1281 { VOPNAME_SPACE, { .vop_space = lo_space } },
1282 { VOPNAME_REALVP, { .vop_realvp = lo_realvp } },
1283 { VOPNAME_GETPAGE, { .vop_getpage = lo_getpage } },
1284 { VOPNAME_PUTPAGE, { .vop_putpage = lo_putpage } },
1285 { VOPNAME_MAP, { .vop_map = lo_map } },
1286 { VOPNAME_ADDMAP, { .vop_addmap = lo_addmap } },
1287 { VOPNAME_DELMAP, { .vop_delmap = lo_delmap } },
1288 { VOPNAME_POLL, { .vop_poll = lo_poll } },
1289 { VOPNAME_DUMP, { .vop_dump = lo_dump } },
1290 { VOPNAME_DUMPCTL, { .error = fs_error } }, /* XXX - why? */
1291 { VOPNAME_PATHCONF, { .vop_pathconf = lo_pathconf } },
1292 { VOPNAME_PAGEIO, { .vop_pageio = lo_pageio } },
1293 { VOPNAME_DISPOSE, { .vop_dispose = lo_dispose } },
1294 { VOPNAME_SETSECATTR, { .vop_setsecattr = lo_setsecattr } },
1295 { VOPNAME_GETSECATTR, { .vop_getsecattr = lo_getsecattr } },
1296 { VOPNAME_SHRLOCK, { .vop_shrlock = lo_shrlock } },
1297 { NULL, { NULL } }
1298 };
|