1*42866dd2Sreinoud /* $NetBSD: udf_strat_bootstrap.c,v 1.5 2016/05/24 09:55:57 reinoud Exp $ */
2e979c658Sreinoud
3e979c658Sreinoud /*
4e979c658Sreinoud * Copyright (c) 2006, 2008 Reinoud Zandijk
5e979c658Sreinoud * All rights reserved.
6e979c658Sreinoud *
7e979c658Sreinoud * Redistribution and use in source and binary forms, with or without
8e979c658Sreinoud * modification, are permitted provided that the following conditions
9e979c658Sreinoud * are met:
10e979c658Sreinoud * 1. Redistributions of source code must retain the above copyright
11e979c658Sreinoud * notice, this list of conditions and the following disclaimer.
12e979c658Sreinoud * 2. Redistributions in binary form must reproduce the above copyright
13e979c658Sreinoud * notice, this list of conditions and the following disclaimer in the
14e979c658Sreinoud * documentation and/or other materials provided with the distribution.
15e979c658Sreinoud *
16e979c658Sreinoud * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17e979c658Sreinoud * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18e979c658Sreinoud * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19e979c658Sreinoud * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20e979c658Sreinoud * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21e979c658Sreinoud * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22e979c658Sreinoud * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23e979c658Sreinoud * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24e979c658Sreinoud * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25e979c658Sreinoud * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26e979c658Sreinoud *
27e979c658Sreinoud */
28e979c658Sreinoud
29e979c658Sreinoud #include <sys/cdefs.h>
30e979c658Sreinoud #ifndef lint
31*42866dd2Sreinoud __KERNEL_RCSID(0, "$NetBSD: udf_strat_bootstrap.c,v 1.5 2016/05/24 09:55:57 reinoud Exp $");
32e979c658Sreinoud #endif /* not lint */
33e979c658Sreinoud
34e979c658Sreinoud
35e979c658Sreinoud #if defined(_KERNEL_OPT)
36e979c658Sreinoud #include "opt_compat_netbsd.h"
37e979c658Sreinoud #endif
38e979c658Sreinoud
39e979c658Sreinoud #include <sys/param.h>
40e979c658Sreinoud #include <sys/systm.h>
41e979c658Sreinoud #include <sys/sysctl.h>
42e979c658Sreinoud #include <sys/namei.h>
43e979c658Sreinoud #include <sys/proc.h>
44e979c658Sreinoud #include <sys/kernel.h>
45e979c658Sreinoud #include <sys/vnode.h>
46e979c658Sreinoud #include <miscfs/genfs/genfs_node.h>
47e979c658Sreinoud #include <sys/mount.h>
48e979c658Sreinoud #include <sys/buf.h>
49e979c658Sreinoud #include <sys/file.h>
50e979c658Sreinoud #include <sys/device.h>
51e979c658Sreinoud #include <sys/disklabel.h>
52e979c658Sreinoud #include <sys/ioctl.h>
53e979c658Sreinoud #include <sys/dirent.h>
54e979c658Sreinoud #include <sys/stat.h>
55e979c658Sreinoud #include <sys/conf.h>
56e979c658Sreinoud #include <sys/kauth.h>
57e979c658Sreinoud #include <sys/kthread.h>
58e979c658Sreinoud #include <dev/clock_subr.h>
59e979c658Sreinoud
60e979c658Sreinoud #include <fs/udf/ecma167-udf.h>
61e979c658Sreinoud #include <fs/udf/udf_mount.h>
62e979c658Sreinoud
63e979c658Sreinoud #include "udf.h"
64e979c658Sreinoud #include "udf_subr.h"
65e979c658Sreinoud #include "udf_bswap.h"
66e979c658Sreinoud
67e979c658Sreinoud
68e979c658Sreinoud #define VTOI(vnode) ((struct udf_node *) vnode->v_data)
69e979c658Sreinoud #define PRIV(ump) ((struct strat_private *) ump->strategy_private)
70e979c658Sreinoud
71e979c658Sreinoud /* --------------------------------------------------------------------- */
72e979c658Sreinoud
73e979c658Sreinoud static int
udf_create_logvol_dscr_bootstrap(struct udf_strat_args * args)74e979c658Sreinoud udf_create_logvol_dscr_bootstrap(struct udf_strat_args *args)
75e979c658Sreinoud {
76e979c658Sreinoud panic("udf_create_logvol_dscr_bootstrap: not possible\n");
77e979c658Sreinoud return 0;
78e979c658Sreinoud }
79e979c658Sreinoud
80e979c658Sreinoud
81e979c658Sreinoud static void
udf_free_logvol_dscr_bootstrap(struct udf_strat_args * args)82e979c658Sreinoud udf_free_logvol_dscr_bootstrap(struct udf_strat_args *args)
83e979c658Sreinoud {
84e979c658Sreinoud panic("udf_free_logvol_dscr_bootstrap: no node descriptor reading\n");
85e979c658Sreinoud }
86e979c658Sreinoud
87e979c658Sreinoud
88e979c658Sreinoud static int
udf_read_logvol_dscr_bootstrap(struct udf_strat_args * args)89e979c658Sreinoud udf_read_logvol_dscr_bootstrap(struct udf_strat_args *args)
90e979c658Sreinoud {
91e979c658Sreinoud panic("udf_read_logvol_dscr_bootstrap: no node descriptor reading\n");
92e979c658Sreinoud return 0;
93e979c658Sreinoud }
94e979c658Sreinoud
95e979c658Sreinoud
96e979c658Sreinoud static int
udf_write_logvol_dscr_bootstrap(struct udf_strat_args * args)97e979c658Sreinoud udf_write_logvol_dscr_bootstrap(struct udf_strat_args *args)
98e979c658Sreinoud {
99e979c658Sreinoud panic("udf_write_logvol_dscr_bootstrap: no writing\n");
100e979c658Sreinoud }
101e979c658Sreinoud
102e979c658Sreinoud /* --------------------------------------------------------------------- */
103e979c658Sreinoud
104e979c658Sreinoud static void
udf_queuebuf_bootstrap(struct udf_strat_args * args)105e979c658Sreinoud udf_queuebuf_bootstrap(struct udf_strat_args *args)
106e979c658Sreinoud {
107e979c658Sreinoud struct udf_mount *ump = args->ump;
108e979c658Sreinoud struct buf *buf = args->nestbuf;
109e979c658Sreinoud
110e979c658Sreinoud KASSERT(ump);
111e979c658Sreinoud KASSERT(buf);
112e979c658Sreinoud KASSERT(buf->b_iodone == nestiobuf_iodone);
113e979c658Sreinoud
114e979c658Sreinoud KASSERT(buf->b_flags & B_READ);
115e979c658Sreinoud VOP_STRATEGY(ump->devvp, buf);
116e979c658Sreinoud }
117e979c658Sreinoud
118*42866dd2Sreinoud
119*42866dd2Sreinoud static void
udf_sync_caches_bootstrap(struct udf_strat_args * args)120*42866dd2Sreinoud udf_sync_caches_bootstrap(struct udf_strat_args *args)
121*42866dd2Sreinoud {
122*42866dd2Sreinoud /* empty */
123*42866dd2Sreinoud }
124*42866dd2Sreinoud
125*42866dd2Sreinoud
126e979c658Sreinoud static void
udf_discstrat_init_bootstrap(struct udf_strat_args * args)127e979c658Sreinoud udf_discstrat_init_bootstrap(struct udf_strat_args *args)
128e979c658Sreinoud {
129e979c658Sreinoud /* empty */
130e979c658Sreinoud }
131e979c658Sreinoud
132e979c658Sreinoud
133e979c658Sreinoud static void
udf_discstrat_finish_bootstrap(struct udf_strat_args * args)134e979c658Sreinoud udf_discstrat_finish_bootstrap(struct udf_strat_args *args)
135e979c658Sreinoud {
136e979c658Sreinoud /* empty */
137e979c658Sreinoud }
138e979c658Sreinoud
139e979c658Sreinoud /* --------------------------------------------------------------------- */
140e979c658Sreinoud
141e979c658Sreinoud struct udf_strategy udf_strat_bootstrap =
142e979c658Sreinoud {
143e979c658Sreinoud udf_create_logvol_dscr_bootstrap,
144e979c658Sreinoud udf_free_logvol_dscr_bootstrap,
145e979c658Sreinoud udf_read_logvol_dscr_bootstrap,
146e979c658Sreinoud udf_write_logvol_dscr_bootstrap,
147e979c658Sreinoud udf_queuebuf_bootstrap,
148*42866dd2Sreinoud udf_sync_caches_bootstrap,
149e979c658Sreinoud udf_discstrat_init_bootstrap,
150e979c658Sreinoud udf_discstrat_finish_bootstrap
151e979c658Sreinoud };
152e979c658Sreinoud
153e979c658Sreinoud
154