Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/dev



>>> Robert Swindells <rjs%fdy2.co.uk@localhost> wrote

> 
> "Michael van Elst" <mlelstv%netbsd.org@localhost> wrote:
> >Module Name:    src
> >Committed By:   mlelstv
> >Date:           Wed Nov  1 19:34:46 UTC 2017
> >
> >Modified Files:
> >        src/sys/dev: files.dev
> >        src/sys/dev/ata: ata_raid_adaptec.c ata_raid_intel.c ata_raid_jmicron.c
> >            ata_raid_nvidia.c ata_raid_promise.c ata_raid_via.c wd.c wdvar.h
> >
> >Log Message:
> >refactor wd and ataraid drivers to use common disk subroutines.
> 
> Should this work if wedges are not being used ?
> 
> Without any DKWEDGE_* options I now get:
> 
> ...
> opendisk: can't open dev wd0 (5)
> opendisk: can't open dev wd0 (5)
> opendisk: can't open dev wd0 (5)
> boot device: <unknown>
> root on wd0a dumps on wd0b
> vfs_mountroot: can't open root device
> cannot mount root, error = 5

errno 5 is EIO.

This is why we check WDF_LOADED is not set and !RAW_PART or !S_IFCHR
in wdopen().  WDF_LOADED is set only in wd_fistopen(), so we cannot
open disks unless open with RAW_PART and S_IFCHR in the first time.

Possible fix is remove useless check as follows or introduce
WDF_OPEN if we want to mimic the sd(4).

Index: wd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ata/wd.c,v
retrieving revision 1.434
diff -u -d -r1.434 wd.c
--- wd.c	1 Nov 2017 19:34:46 -0000	1.434
+++ wd.c	3 Nov 2017 00:10:33 -0000
@@ -964,7 +964,7 @@
 {
 	struct wd_softc *wd;
 	struct dk_softc *dksc;
-	int unit, part, error;
+	int unit, error;
 
 	ATADEBUG_PRINT(("wdopen\n"), DEBUG_FUNCS);
 	unit = WDUNIT(dev);
@@ -976,20 +976,9 @@
 	if (! device_is_active(dksc->sc_dev))
 		return (ENODEV);
 
-	part = WDPART(dev);
-
 	if (wd->sc_capacity == 0)
 		return (ENODEV);
 
-	/*
-	 * If any partition is open, but the disk has been invalidated,
-	 * disallow further opens.
-	 */
-	if ((wd->sc_flags & WDF_LOADED) == 0) {
-		if (part != RAW_PART || fmt != S_IFCHR)
-			return EIO;
-	}
-
 	error = dk_open(dksc, dev, flag, fmt, l);
 
 	return error;

-- Takeshi Nakayama


Home | Main Index | Thread Index | Old Index