diff options
Diffstat (limited to 'svc_dev.c')
-rw-r--r-- | svc_dev.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -4,6 +4,7 @@ */ #include "cmogstored.h" #include "compat_memstream.h" +static size_t ndev; /* * maps multiple "devXXX" directories to the device. @@ -135,7 +136,9 @@ static int svc_scandev(struct mog_svc *svc, size_t *nr, mog_scandev_cb cb) devlist = svc_devlist(svc, dev->st_dev); devhash = devlist->by_mogdevid; - if (cb) rc |= cb(dev, svc); /* mog_dev_mkusage */ + if (cb) + rc |= cb(dev, svc); /* mog_dev_mkusage */ + switch (hash_insert_if_absent(devhash, dev, NULL)) { case 0: free(dev); @@ -291,11 +294,15 @@ static bool svc_mkusage_each(void *svc, void *nr) return true; } -size_t mog_mkusage_all(void) +size_t mog_mkusage_all(struct mog_queue *q) { - size_t nr = 0; + size_t ndev_new = 0; + + mog_svc_each(svc_mkusage_each, &ndev_new); - mog_svc_each(svc_mkusage_each, &nr); + if (q && ndev_new != ndev) + mog_thrpool_update(q, ndev, ndev_new); + ndev = ndev_new; - return nr; + return ndev; } |