MCPcopy Create free account
hub / github.com/F-Stack/f-stack / zvol_create_cb

Function zvol_create_cb

freebsd/contrib/openzfs/module/zfs/zvol.c:191–224  ·  view source on GitHub ↗

* ZFS_IOC_CREATE callback handles dmu zvol and zap object creation. */

Source from the content-addressed store, hash-verified

189 * ZFS_IOC_CREATE callback handles dmu zvol and zap object creation.
190 */
191void
192zvol_create_cb(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx)
193{
194 zfs_creat_t *zct = arg;
195 nvlist_t *nvprops = zct->zct_props;
196 int error;
197 uint64_t volblocksize, volsize;
198
199 VERIFY(nvlist_lookup_uint64(nvprops,
200 zfs_prop_to_name(ZFS_PROP_VOLSIZE), &volsize) == 0);
201 if (nvlist_lookup_uint64(nvprops,
202 zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), &volblocksize) != 0)
203 volblocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE);
204
205 /*
206 * These properties must be removed from the list so the generic
207 * property setting step won't apply to them.
208 */
209 VERIFY(nvlist_remove_all(nvprops,
210 zfs_prop_to_name(ZFS_PROP_VOLSIZE)) == 0);
211 (void) nvlist_remove_all(nvprops,
212 zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE));
213
214 error = dmu_object_claim(os, ZVOL_OBJ, DMU_OT_ZVOL, volblocksize,
215 DMU_OT_NONE, 0, tx);
216 ASSERT(error == 0);
217
218 error = zap_create_claim(os, ZVOL_ZAP_OBJ, DMU_OT_ZVOL_PROP,
219 DMU_OT_NONE, 0, tx);
220 ASSERT(error == 0);
221
222 error = zap_update(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize, tx);
223 ASSERT(error == 0);
224}
225
226/*
227 * ZFS_IOC_OBJSET_STATS entry point.

Callers

nothing calls this directly

Calls 7

nvlist_lookup_uint64Function · 0.85
zfs_prop_to_nameFunction · 0.85
zfs_prop_default_numericFunction · 0.85
nvlist_remove_allFunction · 0.85
dmu_object_claimFunction · 0.85
zap_create_claimFunction · 0.85
zap_updateFunction · 0.85

Tested by

no test coverage detected