diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-06-21 03:34:16 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-06-25 21:25:46 +0000 |
commit | 1fab1e7a7f03f3bc0abb1b5181117f2d4605ce3b (patch) | |
tree | d02fccc0d85a9b61a19256f4a189823b7a6fb514 /svc_dev.c | |
parent | 6357381200266f4c3e5d8f93403de987db95143c (diff) | |
download | cmogstored-1fab1e7a7f03f3bc0abb1b5181117f2d4605ce3b.tar.gz |
This will allow us to lookup devices for per-(mog)device I/O queues.
Diffstat (limited to 'svc_dev.c')
-rw-r--r-- | svc_dev.c | 25 |
1 files changed, 8 insertions, 17 deletions
@@ -38,28 +38,19 @@ static void devlist_free(void *x) free(devlist); } -static size_t devid_hash(const void *x, size_t tablesize) -{ - const struct mog_dev *dev = x; - - return dev->devid % tablesize; -} - -static bool devid_cmp(const void *a, const void *b) -{ - const struct mog_dev *dev_a = a; - const struct mog_dev *dev_b = b; - - return dev_a->devid == dev_b->devid; -} - static struct mog_devlist * mog_devlist_new(dev_t st_dev) { struct mog_devlist *devlist = xmalloc(sizeof(struct mog_devlist)); devlist->st_dev = st_dev; devlist->by_mogdevid = hash_initialize(7, NULL, - devid_hash, devid_cmp, free); + mog_dev_hash, mog_dev_cmp, + + /* + * elements are freed when + * svc->by_mog_devid is freed + */ + NULL); return devlist; } @@ -126,7 +117,7 @@ static int svc_scandev(struct mog_svc *svc, size_t *nr, mog_scandev_cb cb) if (*end != 0) continue; if (mog_devid > 0xffffff) continue; /* MEDIUMINT in DB */ - dev = mog_dev_new(svc, (uint32_t)mog_devid); + dev = mog_dev_for(svc, (uint32_t)mog_devid); if (!dev) continue; devlist = svc_devlist(svc, dev->st_dev); |