tech-kern archive

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

Re: Finding an available fss device



Emmanuel Dreyfus <manu%netbsd.org@localhost> wrote:

> Perhaps the right way is to add a FSSIOBUSY ioctl that would
> use mutex_tryenter and return EBUSY if the device is in use?

I propose the change below, so that we can find an available /dev/fss*
device without hanging:

--- sys/dev/fss.c.orig
+++ sys/dev/fss.c
@@ -427,8 +427,17 @@
                mutex_exit(&sc->sc_slock);
                error = 0;
                break;
 
+       case FSSIOBUSY:
+               if (mutex_tryenter(&sc->sc_slock) == 0) {
+                       error = EBUSY;
+                       break;
+               }
+               error = (sc->sc_flags & FSS_ACTIVE) ? EBUSY : 0;
+               mutex_exit(&sc->sc_slock);
+               break;
+
        default:
                error = EINVAL;
                break;
        }
--- sys/dev/fssvar.h.orig
+++ sys/dev/fssvar.h
@@ -56,8 +56,10 @@
 #define FSSIOCGET      _IOR('F', 1, struct fss_get)    /* Status */
 #define FSSIOCCLR      _IO('F', 2)                     /* Unconfigure */
 #define FSSIOFSET      _IOW('F', 3, int)               /* Set flags */
 #define FSSIOFGET      _IOR('F', 4, int)               /* Get flags */
+#define FSSIOBUSY      _IO('F', 6)                     /* Is busy? */
+
 #ifdef _KERNEL
 #include <compat/sys/time_types.h>
 
 struct fss_set50 {


-- 
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
manu%netbsd.org@localhost


Home | Main Index | Thread Index | Old Index