ZFS crash -- zvol_geom_bio_getattr called when volmode=dev
Eric van Gyzen
eric at vangyzen.net
Fri Oct 9 21:47:56 UTC 2020
On 10/9/20 4:39 PM, Eric van Gyzen wrote:
> Does this look familiar? I'm creating a zvol with volmode=dev, but some
> geom code paths were taken. If this looks new, I'll provide more details.
primarycache=none also seems to be a factor. I can easily repro with:
zfs create -s -V 10G -o primarycache=none -o volmode=dev .../testvol
> 13.0-CURRENT r366500+84ccaf49083c-c272054 GENERIC
>
> #8 <signal handler called>
> #9 zvol_geom_bio_getattr (bp=0xfffff80376132900)
> at /usr/src/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c:545
> #10 zvol_geom_bio_start (bp=0xfffff80376132900)
> at /usr/src/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c:519
> #11 0xffffffff80b1c684 in g_io_schedule_down (tp=<optimized out>)
> at /usr/src/sys/geom/geom_io.c:848
> #12 0xffffffff80b1cfcc in g_down_procbody (arg=<optimized out>)
> at /usr/src/sys/geom/geom_kern.c:111
>
> (kgdb) f 9
> #9 zvol_geom_bio_getattr (bp=0xfffff80376132900)
> at /usr/src/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c:545
> 545 spa_t *spa = dmu_objset_spa(zv->zv_objset);
>
> (kgdb) l
> 540 zvol_state_t *zv;
> 541
> 542 zv = bp->bio_to->private;
> 543 ASSERT(zv != NULL);
> 544
> 545 spa_t *spa = dmu_objset_spa(zv->zv_objset);
> 546 uint64_t refd, avail, usedobjs, availobjs;
> 547
> 548 if (g_handleattr_int(bp, "GEOM::candelete", 1))
> 549 return (0);
>
> (kgdb) p zv
> $1 = (zvol_state_t *) 0x0
>
> (kgdb) p *bp
> $3 = {
> bio_cmd = 4,
> bio_flags = 0,
> bio_cflags = 0,
> bio_pflags = 0,
> bio_dev = 0x0,
> bio_disk = 0x0,
> bio_offset = 0,
> bio_bcount = 0,
> bio_data = 0xfffff801fa687c00 "",
> bio_ma = 0x0,
> bio_ma_offset = 0,
> bio_ma_n = 0,
> bio_error = 0,
> bio_resid = 0,
> bio_done = 0x0,
> bio_driver1 = 0x0,
> bio_driver2 = 0x0,
> bio_caller1 = 0x0,
> bio_caller2 = 0x0,
> bio_queue = {
> tqe_next = 0xffffffffffffffff,
> tqe_prev = 0xffffffffffffffff
> },
> bio_attribute = 0xffffffff81223c03 "GEOM::physpath",
> bio_zone = {
> zone_cmd = 0 '\000',
> zone_params = {
> disk_params = {
> zone_mode = 0,
> flags = 0,
> optimal_seq_zones = 0,
> optimal_nonseq_zones = 0,
> max_seq_zones = 0
> },
> rwp = {
> id = 0,
> flags = 0 '\000'
> },
> report = {
> starting_id = 0,
> rep_options = 0 '\000',
> header = {
> same = 0 '\000',
> maximum_lba = 0,
> reserved = '\000' <repeats 63 times>
> },
> entries_allocated = 0,
> entries_filled = 0,
> entries_available = 0,
> entries = 0x0
> }
> }
> },
> bio_from = 0xfffff80006b92880,
> bio_to = 0xfffff80006972500,
> bio_length = 1024,
> bio_completed = 0,
> bio_children = 0,
> bio_inbed = 0,
> bio_parent = 0x0,
> bio_t0 = {
> sec = 50,
> frac = 10248368299661698441
> },
> bio_task = 0x0,
> bio_task_arg = 0x0,
> bio_spare1 = 0x0,
> bio_spare2 = 0x0,
> bio_track_bp = 0x0,
> bio_pblkno = 0
> }
>
> (kgdb) p *bp->bio_to
> $4 = {
> name = 0xfffff80006972598 "zvol/disco_fast/vm/onefs1-1/disk7",
> provider = {
> le_next = 0x0,
> le_prev = 0xfffff80006972428
> },
> geom = 0xfffff80006972400,
> consumers = {
> lh_first = 0xfffff80006b92880
> },
> acr = 1,
> acw = 0,
> ace = 0,
> error = 0,
> orphan = {
> tqe_next = 0x0,
> tqe_prev = 0x0
> },
> mediasize = 5368709120,
> sectorsize = 512,
> stripesize = 8192,
> stripeoffset = 0,
> stat = 0xfffff80006d3d120,
> spare1 = 0,
> spare2 = 0,
> flags = 48,
> aliases = {
> lh_first = 0x0
> },
> private = 0x0,
> index = 0
> }
More information about the freebsd-current
mailing list