summaryrefslogtreecommitdiffstats
path: root/misc-utils/lsblk.c
diff options
context:
space:
mode:
authorKarel Zak2018-10-15 15:53:33 +0200
committerKarel Zak2018-12-07 12:32:57 +0100
commit583b6489f636f843b5ad784785d5ab2142e906aa (patch)
tree264054c836ed1bad6783340e62e573f6c7a4a52e /misc-utils/lsblk.c
parentlsblk: keep functions names consistent (diff)
downloadkernel-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.c39
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)) {