diff options
author | Karel Zak | 2018-10-15 15:53:33 +0200 |
---|---|---|
committer | Karel Zak | 2018-12-07 12:32:57 +0100 |
commit | 583b6489f636f843b5ad784785d5ab2142e906aa (patch) | |
tree | 264054c836ed1bad6783340e62e573f6c7a4a52e /misc-utils/lsblk.c | |
parent | lsblk: keep functions names consistent (diff) | |
download | kernel-qcow2-util-linux-583b6489f636f843b5ad784785d5ab2142e906aa.tar.gz kernel-qcow2-util-linux-583b6489f636f843b5ad784785d5ab2142e906aa.tar.xz kernel-qcow2-util-linux-583b6489f636f843b5ad784785d5ab2142e906aa.zip |
lsblk: add devtree_get_device_or_new()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r-- | misc-utils/lsblk.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index c7219724b..bb16c23c1 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -1081,6 +1081,29 @@ static int set_device(struct lsblk_device *dev, return 0; } +struct lsblk_device *devtree_get_device_or_new(struct lsblk_devtree *tr, + struct lsblk_device *parent, + struct lsblk_device *disk, + const char *name) +{ + struct lsblk_device *dev = lsblk_devtree_get_device(tr, name); + + if (!dev) { + dev = lsblk_new_device(tr); + if (!dev) + err(EXIT_FAILURE, _("failed to allocate device")); + + if (set_device(dev, parent, disk, name) != 0) { + lsblk_unref_device(dev); + return NULL; + } + lsblk_devtree_add_device(tr, dev); + lsblk_unref_device(dev); /* keep it referenced by devtree only */ + } else + DBG(DEV, ul_debugobj(dev, "%s: already processed", name)); + + return dev; +} static int process_dependencies(struct lsblk_device *dev, struct lsblk_device *parent, int do_partitions, const char *part_name); @@ -1271,19 +1294,9 @@ static int process_all_devices(struct lsblk_devtree *tr) DBG(DEV, ul_debug(" %s dentry", d->d_name)); - dev = lsblk_devtree_get_device(tr, d->d_name); - if (!dev) { - dev = lsblk_new_device(tr); - if (!dev) - err(EXIT_FAILURE, _("failed to allocate device")); - if (set_device(dev, NULL, NULL, d->d_name) != 0) { - lsblk_unref_device(dev); - continue; - } - lsblk_devtree_add_device(tr, dev); - lsblk_unref_device(dev); /* keep it referenced by devtree only */ - } else - DBG(DEV, ul_debug(" %s: already processed", d->d_name)); + dev = devtree_get_device_or_new(tr, NULL, NULL, d->d_name); + if (!dev) + continue; /* remove unwanted devices */ if (is_maj_excluded(dev->maj) || !is_maj_included(dev->maj)) { |