Index: sys/dev/ata/ld_ataraid.c =================================================================== RCS file: /cvsroot/src/sys/dev/ata/ld_ataraid.c,v retrieving revision 1.50 diff -u -p -r1.50 ld_ataraid.c --- sys/dev/ata/ld_ataraid.c 17 Jan 2020 19:31:31 -0000 1.50 +++ sys/dev/ata/ld_ataraid.c 11 Mar 2025 18:21:31 -0000 @@ -226,7 +226,11 @@ ld_ataraid_attach(device_t parent, devic */ for (i = 0; i < aai->aai_ndisks; i++) { adi = &aai->aai_disks[i]; - vp = ata_raid_disk_vnode_find(adi); + vp = NULL; + if (adi->adi_status & + (ADI_S_ONLINE | ADI_S_ASSIGNED | ADI_S_SPARE)) + vp = ata_raid_disk_vnode_find(adi); + if (vp == NULL) { /* * XXX This is bogus. We should just mark the Index: sys/dev/ata/ata_raid_subr.c =================================================================== RCS file: /cvsroot/src/sys/dev/ata/ata_raid_subr.c,v retrieving revision 1.4 diff -u -p -r1.4 ata_raid_subr.c --- sys/dev/ata/ata_raid_subr.c 19 Mar 2022 13:51:01 -0000 1.4 +++ sys/dev/ata/ata_raid_subr.c 11 Mar 2025 18:21:31 -0000 @@ -77,19 +77,11 @@ ata_raid_disk_vnode_find(struct ataraid_ bmajor = devsw_name2blk(device_xname(adi->adi_dev), NULL, 0); dev = MAKEDISKDEV(bmajor, device_unit(adi->adi_dev), RAW_PART); - error = bdevvp(dev, &vp); + error = vn_bdev_open(dev, &vp, curlwp); if (error) { kmem_free(adv, sizeof(struct ataraid_disk_vnode)); return NULL; } - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); - error = VOP_OPEN(vp, FREAD|FWRITE, NOCRED); - if (error) { - vput(vp); - kmem_free(adv, sizeof(struct ataraid_disk_vnode)); - return NULL; - } - VOP_UNLOCK(vp); adv->adv_adi = adi; adv->adv_vnode = vp;