ZFS crash -- zvol_geom_bio_getattr called when volmode=dev

From: Eric van Gyzen <eric_at_vangyzen.net>
Date: Fri, 9 Oct 2020 16:39:45 -0500
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.

Thanks in advance,

Eric


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
}
Received on Fri Oct 09 2020 - 19:39:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:25 UTC