diff options
author | Karel Zak | 2018-10-17 14:10:27 +0200 |
---|---|---|
committer | Karel Zak | 2018-12-07 12:32:58 +0100 |
commit | 8a2f175cbbd9850922fb5bbb96c5a58a4a2d73c0 (patch) | |
tree | 0f49a007d9e720c9a0ab0f8eac06f098fc08f9d3 /misc-utils/lsblk.c | |
parent | lsblk: reuse 'removable' flag from parent (diff) | |
download | kernel-qcow2-util-linux-8a2f175cbbd9850922fb5bbb96c5a58a4a2d73c0.tar.gz kernel-qcow2-util-linux-8a2f175cbbd9850922fb5bbb96c5a58a4a2d73c0.tar.xz kernel-qcow2-util-linux-8a2f175cbbd9850922fb5bbb96c5a58a4a2d73c0.zip |
lsblk: read queue/discard_granularity only when necessary
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r-- | misc-utils/lsblk.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index aacc0e560..46f8f3260 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -702,6 +702,17 @@ done: return dev->removable; } +static uint64_t device_get_discard_granularity(struct lsblk_device *dev) +{ + if (dev->discard_granularity == (uint64_t) -1 + && ul_path_read_u64(dev->sysfs, &dev->discard_granularity, + "queue/discard_granularity") != 0) + dev->discard_granularity = 0; + + return dev->discard_granularity; +} + + /* * Generates data (string) for column specified by column ID for specified device */ @@ -941,7 +952,7 @@ static void set_scols_data( str = get_subsystems(dev); break; case COL_DALIGN: - if (dev->discard) + if (device_get_discard_granularity(dev) > 0) ul_path_read_string(dev->sysfs, &str, "discard_alignment"); if (!str) str = xstrdup("0"); @@ -954,12 +965,10 @@ static void set_scols_data( if (sort) set_sortdata_u64_from_string(ln, col, str); } else { - uint64_t x; - if (ul_path_read_u64(dev->sysfs, &x, "queue/discard_granularity") == 0) { - str = size_to_human_string(SIZE_SUFFIX_1LETTER, x); - if (sort) - set_sortdata_u64(ln, col, x); - } + uint64_t x = device_get_discard_granularity(dev); + str = size_to_human_string(SIZE_SUFFIX_1LETTER, x); + if (sort) + set_sortdata_u64(ln, col, x); } break; case COL_DMAX: @@ -977,7 +986,7 @@ static void set_scols_data( } break; case COL_DZERO: - if (dev->discard) + if (device_get_discard_granularity(dev) > 0) ul_path_read_string(dev->sysfs, &str, "queue/discard_zeroes_data"); if (!str) str = xstrdup("0"); @@ -1095,10 +1104,6 @@ static int initialize_device(struct lsblk_device *dev, if (ul_path_read_u64(dev->sysfs, &dev->size, "size") == 0) /* in sectors */ dev->size <<= 9; /* in bytes */ - if (ul_path_read_s32(dev->sysfs, &dev->discard, - "queue/discard_granularity") != 0) - dev->discard = 0; - /* Ignore devices of zero size */ if (!lsblk->all_devices && dev->size == 0) { DBG(DEV, ul_debugobj(dev, "zero size device -- ignore")); |