Minor formatting changes
[akaros.git] / kern / drivers / dev / srv.c
index efb41ee..b88f821 100644 (file)
@@ -81,7 +81,7 @@ static void srv_release(struct kref *kref)
        if (srv->chan)
                cclose(srv->chan);
        kfree(srv);
-       atomic_dec(nr_srvs);
+       atomic_dec(&nr_srvs);
 }
 
 static int srvgen(struct chan *c, char *name, struct dirtab *tab,
@@ -156,6 +156,26 @@ static int srvstat(struct chan *c, uint8_t * db, int n)
        return devstat(c, db, n, 0, 0, srvgen);
 }
 
+char*
+srvname(struct chan *c)
+{
+       struct srvfile *srv_i;
+       char *s;
+
+       spin_lock(&srvlock);
+       TAILQ_FOREACH(srv_i, &srvfiles, link) {
+               if(srv_i->chan == c){
+                       int len = 3 + strlen(srv_i->name) + 1;
+                       s = kzmalloc(len, 0);
+                       snprintf(s, len, "#s/%s", srv_i->name);
+                       spin_unlock(&srvlock);
+                       return s;
+               }
+       }
+       spin_unlock(&srvlock);
+       return NULL;
+}
+
 static struct chan *srvopen(struct chan *c, int omode)
 {
        ERRSTACK(1);
@@ -197,7 +217,7 @@ static struct chan *srvopen(struct chan *c, int omode)
        /* the magic of srv: open c, get c->srv->chan back */
        cclose(c);
        c = srv->chan;
-       kref_get(&c->ref, 1);
+       chan_incref(c);
        poperror();
        kref_put(&srv->ref);
        return c;
@@ -213,6 +233,7 @@ static void srvcreate(struct chan *c, char *name, int omode, uint32_t perm)
        atomic_set(&srv->opens, 1);     /* we return it opened */
        mkqid(&c->qid, Qsrvfile, 0, QTFILE);
        c->aux = srv;
+       c->mode = openmode(omode);
        /* one ref for being on the list */
        kref_init(&srv->ref, srv_release, 1);
        spin_lock(&srvlock);