Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1258906 > unrolled thread
| Started by | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| First post | 2015-10-29 17:40 +0100 |
| Last post | 2015-10-31 01:10 +0100 |
| Articles | 17 — 4 participants |
Back to article view | Back to linux.kernel
[PATCH v3 0/4] lib/string_helpers: fix precision issues and introduce tests Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-29 17:40 +0100
[PATCH v3 4/4] lib/test-string_helpers.c: add string_get_size() tests Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-29 17:40 +0100
Re: [PATCH v3 4/4] lib/test-string_helpers.c: add string_get_size() tests Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-10-29 22:40 +0100
[PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-29 17:40 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface James Bottomley <jbottomley@odin.com> - 2015-10-29 23:30 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface Rasmus Villemoes <linux@rasmusvillemoes.dk> - 2015-10-30 00:20 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface Rasmus Villemoes <linux@rasmusvillemoes.dk> - 2015-10-30 00:30 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface James Bottomley <jbottomley@odin.com> - 2015-10-30 04:40 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-30 11:50 +0100
Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface James Bottomley <jbottomley@odin.com> - 2015-10-31 01:30 +0100
[PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-29 17:40 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-10-29 22:30 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 James Bottomley <jbottomley@odin.com> - 2015-10-30 00:10 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-10-30 00:40 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 James Bottomley <jbottomley@odin.com> - 2015-10-30 04:40 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 Vitaly Kuznetsov <vkuznets@redhat.com> - 2015-10-30 11:50 +0100
Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 James Bottomley <jbottomley@odin.com> - 2015-10-31 01:10 +0100
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-29 17:40 +0100 |
| Subject | [PATCH v3 0/4] lib/string_helpers: fix precision issues and introduce tests |
| Message-ID | <qoYp3-2B4-3@gated-at.bofh.it> |
Linux always lies about your storage size when it has 4k sectors and its
size is big enough. E.g. a device with 8192 4k sectors will be reported as
"32.7 MB/32 MiB" while "33.5 MB/32 MiB" is expected. This series is
supposed to fix the issue by fixing calculation precision in
string_get_size() for all possible inputs.
PATCH 1/4 is a preparatory change, PATCH 2/4 adds additional protection
against blk_size=0 (nobody is supposed to call string_get_size() with
with blk_size=0, but better safe than sorry), PATCH 3/4 re-factors
string_get_size() fixing the issue, PATCH 4/4 introduces tests for
string_get_size().
PATCH 4/4 was previously sent as part of "lib/string_helpers.c: fix
infinite loop in string_get_size()" series but it is still not merged
upstream. In this submission I improve it and add additional tests to it.
Changes since v2:
- Separate blk_size check from Patch 3/4 to new Patch 2/4 [Andy Shevchenko]
- Slightly change the algorithm in Patch 3/4 [Rasmus Villemoes]
Vitaly Kuznetsov (4):
lib/string_helpers: change blk_size to u32 for string_get_size()
interface
lib/string_helpers.c: protect string_get_size() against blk_size=0
lib/string_helpers.c: don't lose precision in string_get_size()
lib/test-string_helpers.c: add string_get_size() tests
include/linux/string_helpers.h | 2 +-
lib/string_helpers.c | 38 ++++++++++++++-------------
lib/test-string_helpers.c | 58 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 79 insertions(+), 19 deletions(-)
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-29 17:40 +0100 |
| Subject | [PATCH v3 4/4] lib/test-string_helpers.c: add string_get_size() tests |
| Message-ID | <qoYp3-2B4-5@gated-at.bofh.it> |
| In reply to | #1258906 |
Add a couple of simple tests for string_get_size().
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
lib/test-string_helpers.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c
index 8e376ef..4c77b54 100644
--- a/lib/test-string_helpers.c
+++ b/lib/test-string_helpers.c
@@ -326,6 +326,61 @@ out:
kfree(out_test);
}
+#define string_get_size_maxbuf 16
+#define test_string_get_size_one(size, blk_size, exp_result10, exp_result2) \
+ do { \
+ BUILD_BUG_ON(sizeof(exp_result10) >= string_get_size_maxbuf); \
+ BUILD_BUG_ON(sizeof(exp_result2) >= string_get_size_maxbuf); \
+ __test_string_get_size((size), (blk_size), (exp_result10), \
+ (exp_result2)); \
+ } while (0)
+
+
+static __init void __test_string_get_size(const u64 size, const u32 blk_size,
+ const char *exp_result10,
+ const char *exp_result2)
+{
+ char buf10[string_get_size_maxbuf];
+ char buf2[string_get_size_maxbuf];
+
+ string_get_size(size, blk_size, STRING_UNITS_10, buf10, sizeof(buf10));
+ string_get_size(size, blk_size, STRING_UNITS_2, buf2, sizeof(buf2));
+
+ if (!memcmp(buf10, exp_result10, strlen(exp_result10) + 1))
+ goto check_stringunits_2;
+
+ buf10[sizeof(buf10) - 1] = '\0';
+
+ pr_warn("Test 'test_string_get_size' failed!\n");
+ pr_warn("string_get_size(size = %llu, blk_size = %u, units = %s)\n",
+ size, blk_size, "STRING_UNITS_10");
+ pr_warn("expected: '%s', got '%s'\n", exp_result10, buf10);
+
+check_stringunits_2:
+ if (!memcmp(buf2, exp_result2, strlen(exp_result2) + 1))
+ return;
+
+ buf2[sizeof(buf2) - 1] = '\0';
+
+ pr_warn("Test 'test_string_get_size' failed!\n");
+ pr_warn("string_get_size(size = %llu, blk_size = %u, units = %s)\n",
+ size, blk_size, "STRING_UNITS_2");
+ pr_warn("expected: '%s', got '%s'\n", exp_result2, buf2);
+}
+
+static __init void test_string_get_size(void)
+{
+ test_string_get_size_one(16384, 512, "8.38 MB", "8.00 MiB");
+ test_string_get_size_one(500118192, 512, "256 GB", "238 GiB");
+ test_string_get_size_one(8192, 4096, "33.5 MB", "32.0 MiB");
+ test_string_get_size_one(1100, 1, "1.10 kB", "1.07 KiB");
+ test_string_get_size_one(3000, 1900, "5.70 MB", "5.43 MiB");
+ test_string_get_size_one(U64_MAX, 4096, "75.5 ZB", "63.9 ZiB");
+ test_string_get_size_one(1999, U32_MAX, "8.58 TB", "7.80 TiB");
+ test_string_get_size_one(1, 512, "512 B", "512 B");
+ test_string_get_size_one(0, 512, "0 B", "0 B");
+}
+
static int __init test_string_helpers_init(void)
{
unsigned int i;
@@ -344,6 +399,9 @@ static int __init test_string_helpers_init(void)
for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1);
+ /* Test string_get_size() */
+ test_string_get_size();
+
return -EINVAL;
}
module_init(test_string_helpers_init);
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2015-10-29 22:40 +0100 |
| Subject | Re: [PATCH v3 4/4] lib/test-string_helpers.c: add string_get_size() tests |
| Message-ID | <qp35q-5yq-51@gated-at.bofh.it> |
| In reply to | #1258907 |
On Thu, Oct 29, 2015 at 6:30 PM, Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
> Add a couple of simple tests for string_get_size().
>
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
> ---
> lib/test-string_helpers.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c
> index 8e376ef..4c77b54 100644
> --- a/lib/test-string_helpers.c
> +++ b/lib/test-string_helpers.c
> @@ -326,6 +326,61 @@ out:
> kfree(out_test);
> }
>
> +#define string_get_size_maxbuf 16
> +#define test_string_get_size_one(size, blk_size, exp_result10, exp_result2) \
> + do { \
> + BUILD_BUG_ON(sizeof(exp_result10) >= string_get_size_maxbuf); \
> + BUILD_BUG_ON(sizeof(exp_result2) >= string_get_size_maxbuf); \
> + __test_string_get_size((size), (blk_size), (exp_result10), \
> + (exp_result2)); \
> + } while (0)
> +
> +
> +static __init void __test_string_get_size(const u64 size, const u32 blk_size,
> + const char *exp_result10,
> + const char *exp_result2)
> +{
> + char buf10[string_get_size_maxbuf];
> + char buf2[string_get_size_maxbuf];
> +
> + string_get_size(size, blk_size, STRING_UNITS_10, buf10, sizeof(buf10));
> + string_get_size(size, blk_size, STRING_UNITS_2, buf2, sizeof(buf2));
> +
> + if (!memcmp(buf10, exp_result10, strlen(exp_result10) + 1))
> + goto check_stringunits_2;
> +
> + buf10[sizeof(buf10) - 1] = '\0';
> +
> + pr_warn("Test 'test_string_get_size' failed!\n");
> + pr_warn("string_get_size(size = %llu, blk_size = %u, units = %s)\n",
> + size, blk_size, "STRING_UNITS_10");
> + pr_warn("expected: '%s', got '%s'\n", exp_result10, buf10);
Looks to me as a helper function
test_string_get_size_pr_err(size, blk_size, units, exp_result, buf, buflen) {}
if (memcmp(buf10, exp_result10, strlen(exp_result10) + 1))
_pr_err(...);
> +
> +check_stringunits_2:
> + if (!memcmp(buf2, exp_result2, strlen(exp_result2) + 1))
> + return;
> +
> + buf2[sizeof(buf2) - 1] = '\0';
> +
> + pr_warn("Test 'test_string_get_size' failed!\n");
> + pr_warn("string_get_size(size = %llu, blk_size = %u, units = %s)\n",
> + size, blk_size, "STRING_UNITS_2");
> + pr_warn("expected: '%s', got '%s'\n", exp_result2, buf2);
> +}
> +
> +static __init void test_string_get_size(void)
> +{
> + test_string_get_size_one(16384, 512, "8.38 MB", "8.00 MiB");
> + test_string_get_size_one(500118192, 512, "256 GB", "238 GiB");
> + test_string_get_size_one(8192, 4096, "33.5 MB", "32.0 MiB");
> + test_string_get_size_one(1100, 1, "1.10 kB", "1.07 KiB");
> + test_string_get_size_one(3000, 1900, "5.70 MB", "5.43 MiB");
> + test_string_get_size_one(U64_MAX, 4096, "75.5 ZB", "63.9 ZiB");
> + test_string_get_size_one(1999, U32_MAX, "8.58 TB", "7.80 TiB");
> + test_string_get_size_one(1, 512, "512 B", "512 B");
> + test_string_get_size_one(0, 512, "0 B", "0 B");
> +}
> +
> static int __init test_string_helpers_init(void)
> {
> unsigned int i;
> @@ -344,6 +399,9 @@ static int __init test_string_helpers_init(void)
> for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
> test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1);
>
> + /* Test string_get_size() */
> + test_string_get_size();
> +
> return -EINVAL;
> }
> module_init(test_string_helpers_init);
> --
> 2.4.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-29 17:40 +0100 |
| Subject | [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qoYp4-2B4-17@gated-at.bofh.it> |
| In reply to | #1258906 |
string_get_size() can't really handle huge block sizes, especially
blk_size > U32_MAX but string_get_size() interface states the opposite.
Change blk_size from u64 to u32 to reflect the reality.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
include/linux/string_helpers.h | 2 +-
lib/string_helpers.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
index dabe643..1223e80 100644
--- a/include/linux/string_helpers.h
+++ b/include/linux/string_helpers.h
@@ -10,7 +10,7 @@ enum string_size_units {
STRING_UNITS_2, /* use binary powers of 2^10 */
};
-void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
+void string_get_size(u64 size, u32 blk_size, enum string_size_units units,
char *buf, int len);
#define UNESCAPE_SPACE 0x01
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 5939f63..f6c27dc 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -26,7 +26,7 @@
* at least 9 bytes and will always be zero terminated.
*
*/
-void string_get_size(u64 size, u64 blk_size, const enum string_size_units units,
+void string_get_size(u64 size, u32 blk_size, const enum string_size_units units,
char *buf, int len)
{
static const char *const units_10[] = {
@@ -58,7 +58,7 @@ void string_get_size(u64 size, u64 blk_size, const enum string_size_units units,
i++;
}
- exp = divisor[units] / (u32)blk_size;
+ exp = divisor[units] / blk_size;
/*
* size must be strictly greater than exp here to ensure that remainder
* is greater than divisor[units] coming out of the if below.
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-29 23:30 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qp3RN-64M-57@gated-at.bofh.it> |
| In reply to | #1258910 |
T24gVGh1LCAyMDE1LTEwLTI5IGF0IDE3OjMwICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3Rl Og0KPiBzdHJpbmdfZ2V0X3NpemUoKSBjYW4ndCByZWFsbHkgaGFuZGxlIGh1Z2UgYmxvY2sgc2l6 ZXMsIGVzcGVjaWFsbHkNCj4gYmxrX3NpemUgPiBVMzJfTUFYIGJ1dCBzdHJpbmdfZ2V0X3NpemUo KSBpbnRlcmZhY2Ugc3RhdGVzIHRoZSBvcHBvc2l0ZS4NCj4gQ2hhbmdlIGJsa19zaXplIGZyb20g dTY0IHRvIHUzMiB0byByZWZsZWN0IHRoZSByZWFsaXR5Lg0KDQpXaGF0IGlzIHRoZSBhY3R1YWwg ZXZpZGVuY2UgZm9yIHRoaXM/ICBUaGUgY2FsY3VsYXRpb24gaXMgZGVzaWduZWQgdG8gYmUNCmEg c3ltbWV0cmljIDEyOCBiaXQgbXVsdGlwbHkuICBXaGVuIEkgd3JvdGUgYW5kIHRlc3RlZCBpdCwg aXQgd29ya2VkDQpmaW5lIGZvciBodWdlIGJsb2NrIHNpemVzLg0KDQpKYW1lcw0KDQo+IFNpZ25l ZC1vZmYtYnk6IFZpdGFseSBLdXpuZXRzb3YgPHZrdXpuZXRzQHJlZGhhdC5jb20+DQo+IC0tLQ0K PiAgaW5jbHVkZS9saW51eC9zdHJpbmdfaGVscGVycy5oIHwgMiArLQ0KPiAgbGliL3N0cmluZ19o ZWxwZXJzLmMgICAgICAgICAgIHwgNCArKy0tDQo+ICAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L3N0cmluZ19oZWxwZXJzLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZ19oZWxwZXJzLmgNCj4gaW5k ZXggZGFiZTY0My4uMTIyM2U4MCAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmdf aGVscGVycy5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nX2hlbHBlcnMuaA0KPiBAQCAt MTAsNyArMTAsNyBAQCBlbnVtIHN0cmluZ19zaXplX3VuaXRzIHsNCj4gIAlTVFJJTkdfVU5JVFNf MiwJCS8qIHVzZSBiaW5hcnkgcG93ZXJzIG9mIDJeMTAgKi8NCj4gIH07DQo+ICANCj4gLXZvaWQg c3RyaW5nX2dldF9zaXplKHU2NCBzaXplLCB1NjQgYmxrX3NpemUsIGVudW0gc3RyaW5nX3NpemVf dW5pdHMgdW5pdHMsDQo+ICt2b2lkIHN0cmluZ19nZXRfc2l6ZSh1NjQgc2l6ZSwgdTMyIGJsa19z aXplLCBlbnVtIHN0cmluZ19zaXplX3VuaXRzIHVuaXRzLA0KPiAgCQkgICAgIGNoYXIgKmJ1Ziwg aW50IGxlbik7DQo+ICANCj4gICNkZWZpbmUgVU5FU0NBUEVfU1BBQ0UJCTB4MDENCj4gZGlmZiAt LWdpdCBhL2xpYi9zdHJpbmdfaGVscGVycy5jIGIvbGliL3N0cmluZ19oZWxwZXJzLmMNCj4gaW5k ZXggNTkzOWY2My4uZjZjMjdkYyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0cmluZ19oZWxwZXJzLmMN Cj4gKysrIGIvbGliL3N0cmluZ19oZWxwZXJzLmMNCj4gQEAgLTI2LDcgKzI2LDcgQEANCj4gICAq IGF0IGxlYXN0IDkgYnl0ZXMgYW5kIHdpbGwgYWx3YXlzIGJlIHplcm8gdGVybWluYXRlZC4NCj4g ICAqDQo+ICAgKi8NCj4gLXZvaWQgc3RyaW5nX2dldF9zaXplKHU2NCBzaXplLCB1NjQgYmxrX3Np emUsIGNvbnN0IGVudW0gc3RyaW5nX3NpemVfdW5pdHMgdW5pdHMsDQo+ICt2b2lkIHN0cmluZ19n ZXRfc2l6ZSh1NjQgc2l6ZSwgdTMyIGJsa19zaXplLCBjb25zdCBlbnVtIHN0cmluZ19zaXplX3Vu aXRzIHVuaXRzLA0KPiAgCQkgICAgIGNoYXIgKmJ1ZiwgaW50IGxlbikNCj4gIHsNCj4gIAlzdGF0 aWMgY29uc3QgY2hhciAqY29uc3QgdW5pdHNfMTBbXSA9IHsNCj4gQEAgLTU4LDcgKzU4LDcgQEAg dm9pZCBzdHJpbmdfZ2V0X3NpemUodTY0IHNpemUsIHU2NCBibGtfc2l6ZSwgY29uc3QgZW51bSBz dHJpbmdfc2l6ZV91bml0cyB1bml0cywNCj4gIAkJaSsrOw0KPiAgCX0NCj4gIA0KPiAtCWV4cCA9 IGRpdmlzb3JbdW5pdHNdIC8gKHUzMilibGtfc2l6ZTsNCj4gKwlleHAgPSBkaXZpc29yW3VuaXRz XSAvIGJsa19zaXplOw0KPiAgCS8qDQo+ICAJICogc2l6ZSBtdXN0IGJlIHN0cmljdGx5IGdyZWF0 ZXIgdGhhbiBleHAgaGVyZSB0byBlbnN1cmUgdGhhdCByZW1haW5kZXINCj4gIAkgKiBpcyBncmVh dGVyIHRoYW4gZGl2aXNvclt1bml0c10gY29taW5nIG91dCBvZiB0aGUgaWYgYmVsb3cuDQoNCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Rasmus Villemoes <linux@rasmusvillemoes.dk> |
|---|---|
| Date | 2015-10-30 00:20 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qp4Ea-6CA-5@gated-at.bofh.it> |
| In reply to | #1259054 |
On Thu, Oct 29 2015, James Bottomley <jbottomley@odin.com> wrote: > On Thu, 2015-10-29 at 17:30 +0100, Vitaly Kuznetsov wrote: >> string_get_size() can't really handle huge block sizes, especially >> blk_size > U32_MAX but string_get_size() interface states the opposite. >> Change blk_size from u64 to u32 to reflect the reality. > > What is the actual evidence for this? The calculation is designed to be > a symmetric 128 bit multiply. When I wrote and tested it, it worked > fine for huge block sizes. > May I politely ask how you tested it, and what you mean by "worked"? The bug I reported last week was particularly concerning block sizes >= 1024 (e.g. the 32768, 1024 pair giving 32.7 MB where the correct output would be 33.5 MB). Now it turns out that it was actually broken for smaller block sizes as well. For ~13000 semirandom size,blk_size pairs, the current code produces the wrong result in ~2100 cases. The new code reduces that to 122 cases, all of which are off by one in the last digit. And I don't buy the symmetry argument either. Mathematically, it should give the same, but your algorithm produces 2.04 MB for 512,4096 and 2.09 MB for 4096,512. Maybe the commit message could be better, but I think it makes a lot of sense to make blk_size u32. Breaking the symmetry between size and blk_size is good (less likely that the arguments get swapped). It allows a simpler implementation. It makes the generated code smaller. Rasmus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Rasmus Villemoes <linux@rasmusvillemoes.dk> |
|---|---|
| Date | 2015-10-30 00:30 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qp4NQ-6FS-17@gated-at.bofh.it> |
| In reply to | #1259092 |
On Fri, Oct 30 2015, Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote: > block sizes as well. For ~13000 semirandom size,blk_size pairs, Sorry, that should have been ~20000. Rasmus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-30 04:40 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qp8HL-DT-5@gated-at.bofh.it> |
| In reply to | #1259092 |
T24gRnJpLCAyMDE1LTEwLTMwIGF0IDAwOjE5ICswMTAwLCBSYXNtdXMgVmlsbGVtb2VzIHdyb3Rl Og0KPiBPbiBUaHUsIE9jdCAyOSAyMDE1LCBKYW1lcyBCb3R0b21sZXkgPGpib3R0b21sZXlAb2Rp bi5jb20+IHdyb3RlOg0KPiANCj4gPiBPbiBUaHUsIDIwMTUtMTAtMjkgYXQgMTc6MzAgKzAxMDAs IFZpdGFseSBLdXpuZXRzb3Ygd3JvdGU6DQo+ID4+IHN0cmluZ19nZXRfc2l6ZSgpIGNhbid0IHJl YWxseSBoYW5kbGUgaHVnZSBibG9jayBzaXplcywgZXNwZWNpYWxseQ0KPiA+PiBibGtfc2l6ZSA+ IFUzMl9NQVggYnV0IHN0cmluZ19nZXRfc2l6ZSgpIGludGVyZmFjZSBzdGF0ZXMgdGhlIG9wcG9z aXRlLg0KPiA+PiBDaGFuZ2UgYmxrX3NpemUgZnJvbSB1NjQgdG8gdTMyIHRvIHJlZmxlY3QgdGhl IHJlYWxpdHkuDQo+ID4NCj4gPiBXaGF0IGlzIHRoZSBhY3R1YWwgZXZpZGVuY2UgZm9yIHRoaXM/ ICBUaGUgY2FsY3VsYXRpb24gaXMgZGVzaWduZWQgdG8gYmUNCj4gPiBhIHN5bW1ldHJpYyAxMjgg Yml0IG11bHRpcGx5LiAgV2hlbiBJIHdyb3RlIGFuZCB0ZXN0ZWQgaXQsIGl0IHdvcmtlZA0KPiA+ IGZpbmUgZm9yIGh1Z2UgYmxvY2sgc2l6ZXMuDQo+ID4NCj4gDQo+IE1heSBJIHBvbGl0ZWx5IGFz ayBob3cgeW91IHRlc3RlZCBpdCwgYW5kIHdoYXQgeW91IG1lYW4gYnkgIndvcmtlZCI/IFRoZQ0K PiBidWcgSSByZXBvcnRlZCBsYXN0IHdlZWsgd2FzIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGJs b2NrIHNpemVzID49IDEwMjQNCj4gKGUuZy4gdGhlIDMyNzY4LCAxMDI0IHBhaXIgZ2l2aW5nIDMy LjcgTUIgd2hlcmUgdGhlIGNvcnJlY3Qgb3V0cHV0IHdvdWxkDQo+IGJlIDMzLjUgTUIpLg0KDQpU aGUgdGVzdCB3YXMgYmFzaWNhbGx5IGEgdXNlcnNwYWNlIHZlcnNpb24gcmV2ZXJzaW5nIHRoZSBs YXJnZSBzaXplDQpzbWFsbGVyIGJsb2NrIHNpemUgbnVtYmVycyBhbmQgdmVyaWZ5aW5nIHRoZXkg cHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQuDQoNCj4gIE5vdyBpdCB0dXJucyBvdXQgdGhhdCBpdCB3 YXMgYWN0dWFsbHkgYnJva2VuIGZvciBzbWFsbGVyDQo+IGJsb2NrIHNpemVzIGFzIHdlbGwuIEZv ciB+MTMwMDAgc2VtaXJhbmRvbSBzaXplLGJsa19zaXplIHBhaXJzLCB0aGUNCj4gY3VycmVudCBj b2RlIHByb2R1Y2VzIHRoZSB3cm9uZyByZXN1bHQgaW4gfjIxMDAgY2FzZXMuIFRoZSBuZXcgY29k ZQ0KPiByZWR1Y2VzIHRoYXQgdG8gMTIyIGNhc2VzLCBhbGwgb2Ygd2hpY2ggYXJlIG9mZiBieSBv bmUgaW4gdGhlIGxhc3QNCj4gZGlnaXQuDQoNCkkgd2Fzbid0IG1ha2luZyB0aGUgcG9pbnQgdGhh dCB0aGVyZSBpc24ndCBhIHBvdGVudGlhbCBvZmYgYnkgYSBjb3VwbGUNCm9mIHBlcmNlbnQgcHJv YmxlbSBpbiB0aGUgYWxnb3JpdGhtIEkgd2FzIG1ha2luZyB0aGUgcG9pbnQgdGhhdCBpdA0Kc2hv dWxkIHdvcmsgYXMgYSBtdWx0aXBsaWVyIG9mIHR3byB1NjQgbnVtYmVycywgc28gSSBjYW4ndCB1 bmRlcnN0YW5kDQp0aGUgcmF0aW9uYWwgYmFzaXMgZm9yIHJlZHVjaW5nIHRoZSBibG9jayBzaXpl IHRvIHUzMi4NCg0KPiBBbmQgSSBkb24ndCBidXkgdGhlIHN5bW1ldHJ5IGFyZ3VtZW50IGVpdGhl ci4gTWF0aGVtYXRpY2FsbHksIGl0IHNob3VsZA0KPiBnaXZlIHRoZSBzYW1lLCBidXQgeW91ciBh bGdvcml0aG0gcHJvZHVjZXMgMi4wNCBNQiBmb3IgNTEyLDQwOTYgYW5kIDIuMDkNCj4gTUIgZm9y IDQwOTYsNTEyLg0KDQpUaGF0J3MgYW4gb2ZmIGJ5IDIuNSU7IGl0IG1lYW5zIHRoZXJlJ3MgYSBz bGlnaHQgZXJyb3IgaW4gb25lIG9mIHRoZQ0KY2FycmllcyBpdCBkb2Vzbid0IG1lYW4gdGhlcmUn cyBhIGZ1bmRhbWVudGFsIHByb2JsZW0gaW4gdGhlIGFsZ29yaXRobS4NCg0KPiBNYXliZSB0aGUg Y29tbWl0IG1lc3NhZ2UgY291bGQgYmUgYmV0dGVyLCBidXQgSSB0aGluayBpdCBtYWtlcyBhIGxv dCBvZg0KPiBzZW5zZSB0byBtYWtlIGJsa19zaXplIHUzMi4gQnJlYWtpbmcgdGhlIHN5bW1ldHJ5 IGJldHdlZW4gc2l6ZSBhbmQNCj4gYmxrX3NpemUgaXMgZ29vZCAobGVzcyBsaWtlbHkgdGhhdCB0 aGUgYXJndW1lbnRzIGdldCBzd2FwcGVkKS4gSXQNCj4gYWxsb3dzIGEgc2ltcGxlciBpbXBsZW1l bnRhdGlvbi4gSXQgbWFrZXMgdGhlIGdlbmVyYXRlZCBjb2RlDQo+IHNtYWxsZXIuDQoNClRoZSBk cml2ZSB2ZW5kb3JzIGFyZSBhbHJlYWR5IHB1c2hpbmcgaHVnZSBibG9jayBzaXplIHN5c3RlbXMg Zm9yIFpCQy4NClRoZXkncmUgYWxyZWFkeSB0YWxraW5nIGFib3V0IDJHQiBzZWN0b3JzLCB3aGlj aCBpcyAzMSBiaXRzIC4uLiB0aGV5J2xsDQpiZSBvdmVyIHRoZSAzMiBiaXQgbGltaXQgZmFpcmx5 IHNob3J0bHksIEkgcHJlZGljdCwgc28gaXQgbWFrZXMgbm8gc2Vuc2UNCnRvIGhhdmUgdG8gaGF2 ZSB0aGUgc3RvcmFnZSBsYXllciBkbyBzaWxseSBiaXQgc2hpZnRpbmcgYmVjYXVzZSB3ZSB3ZXJl DQpzaG9ydCBzaWdodGVkIGVub3VnaCB0byBjYXAgYmxvY2sgc2l6ZSB0byBhIHUzMi4NCg0KSmFt ZXMNCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-30 11:50 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qpfpU-4J3-25@gated-at.bofh.it> |
| In reply to | #1259054 |
James Bottomley <jbottomley@odin.com> writes:
> On Thu, 2015-10-29 at 17:30 +0100, Vitaly Kuznetsov wrote:
>> string_get_size() can't really handle huge block sizes, especially
>> blk_size > U32_MAX but string_get_size() interface states the opposite.
>> Change blk_size from u64 to u32 to reflect the reality.
>
> What is the actual evidence for this? The calculation is designed to be
> a symmetric 128 bit multiply. When I wrote and tested it, it worked
> fine for huge block sizes.
We have 'u32 remainder' and then we do:
exp = divisor[units] / (u32)blk_size;
...
remainder = do_div(size, divisor[units]);
remainder *= blk_size;
I'm pretty sure it will overflow for some inputs.
>
> James
>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>> include/linux/string_helpers.h | 2 +-
>> lib/string_helpers.c | 4 ++--
>> 2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
>> index dabe643..1223e80 100644
>> --- a/include/linux/string_helpers.h
>> +++ b/include/linux/string_helpers.h
>> @@ -10,7 +10,7 @@ enum string_size_units {
>> STRING_UNITS_2, /* use binary powers of 2^10 */
>> };
>>
>> -void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
>> +void string_get_size(u64 size, u32 blk_size, enum string_size_units units,
>> char *buf, int len);
>>
>> #define UNESCAPE_SPACE 0x01
>> diff --git a/lib/string_helpers.c b/lib/string_helpers.c
>> index 5939f63..f6c27dc 100644
>> --- a/lib/string_helpers.c
>> +++ b/lib/string_helpers.c
>> @@ -26,7 +26,7 @@
>> * at least 9 bytes and will always be zero terminated.
>> *
>> */
>> -void string_get_size(u64 size, u64 blk_size, const enum string_size_units units,
>> +void string_get_size(u64 size, u32 blk_size, const enum string_size_units units,
>> char *buf, int len)
>> {
>> static const char *const units_10[] = {
>> @@ -58,7 +58,7 @@ void string_get_size(u64 size, u64 blk_size, const enum string_size_units units,
>> i++;
>> }
>>
>> - exp = divisor[units] / (u32)blk_size;
>> + exp = divisor[units] / blk_size;
>> /*
>> * size must be strictly greater than exp here to ensure that remainder
>> * is greater than divisor[units] coming out of the if below.
--
Vitaly
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-31 01:30 +0100 |
| Subject | Re: [PATCH v3 1/4] lib/string_helpers: change blk_size to u32 for string_get_size() interface |
| Message-ID | <qpsds-4eY-9@gated-at.bofh.it> |
| In reply to | #1259390 |
T24gRnJpLCAyMDE1LTEwLTMwIGF0IDExOjQ2ICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3Rl Og0KPiBKYW1lcyBCb3R0b21sZXkgPGpib3R0b21sZXlAb2Rpbi5jb20+IHdyaXRlczoNCj4gDQo+ ID4gT24gVGh1LCAyMDE1LTEwLTI5IGF0IDE3OjMwICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdy b3RlOg0KPiA+PiBzdHJpbmdfZ2V0X3NpemUoKSBjYW4ndCByZWFsbHkgaGFuZGxlIGh1Z2UgYmxv Y2sgc2l6ZXMsIGVzcGVjaWFsbHkNCj4gPj4gYmxrX3NpemUgPiBVMzJfTUFYIGJ1dCBzdHJpbmdf Z2V0X3NpemUoKSBpbnRlcmZhY2Ugc3RhdGVzIHRoZSBvcHBvc2l0ZS4NCj4gPj4gQ2hhbmdlIGJs a19zaXplIGZyb20gdTY0IHRvIHUzMiB0byByZWZsZWN0IHRoZSByZWFsaXR5Lg0KPiA+DQo+ID4g V2hhdCBpcyB0aGUgYWN0dWFsIGV2aWRlbmNlIGZvciB0aGlzPyAgVGhlIGNhbGN1bGF0aW9uIGlz IGRlc2lnbmVkIHRvIGJlDQo+ID4gYSBzeW1tZXRyaWMgMTI4IGJpdCBtdWx0aXBseS4gIFdoZW4g SSB3cm90ZSBhbmQgdGVzdGVkIGl0LCBpdCB3b3JrZWQNCj4gPiBmaW5lIGZvciBodWdlIGJsb2Nr IHNpemVzLg0KPiANCj4gV2UgaGF2ZSAndTMyIHJlbWFpbmRlcicgYW5kIHRoZW4gd2UgZG86DQo+ IA0KPiBleHAgPSBkaXZpc29yW3VuaXRzXSAvICh1MzIpYmxrX3NpemU7DQo+IC4uLg0KPiByZW1h aW5kZXIgPSBkb19kaXYoc2l6ZSwgZGl2aXNvclt1bml0c10pOw0KPiByZW1haW5kZXIgKj0gYmxr X3NpemU7DQo+IA0KPiBJJ20gcHJldHR5IHN1cmUgaXQgd2lsbCBvdmVyZmxvdyBmb3Igc29tZSBp bnB1dHMuDQoNCkl0IHNob3VsZG4ndDsgdGhlIGZ1bGwgY29kZSBzbmlwcGV0IGRvZXMgdGhpczoN Cg0KICAgICAgICAJd2hpbGUgKGJsa19zaXplID49IGRpdmlzb3JbdW5pdHNdKSB7DQogICAgICAg IAkJcmVtYWluZGVyID0gZG9fZGl2KGJsa19zaXplLCBkaXZpc29yW3VuaXRzXSk7DQogICAgICAg IAkJaSsrOw0KICAgICAgICAJfQ0KICAgICAgICANCiAgICAgICAgCWV4cCA9IGRpdmlzb3JbdW5p dHNdIC8gKHUzMilibGtfc2l6ZTsNCg0KU28gYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGUgc3Rh dGVtZW50IHlvdSBjb21wbGFpbiBhYm91dCwgYmxrX3NpemUgaXMNCmFscmVhZHkgbGVzcyB0aGFu IG9yIGVxdWFsIHRvIHRoZSBkaXZpc29yICh3aGljaCBpcyAxMDAwIG9yIDEwMjQpIHNvDQp0cnVu Y2F0aW5nIHRvIDMyIGJpdHMgaXMgYWx3YXlzIGNvcnJlY3QuDQoNCkknbSBzb3J0IG9mIGdldHRp bmcgdGhlIGltcHJlc3Npb24geW91IGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgdGhlDQptYXRoZW1h dGljczogIGkgaXMgdGhlIGxvZ2FyaXRobSB0byB0aGUgYmFzZSBkaXZpc29yW3VuaXRzXS4gIFdl IHJlZHVjZQ0KYm90aCBvcGVyYW5kcyB0byBleHBvbmVudHMgb2YgdGhlIGxvZ2FyaXRobSBiYXNl IChhZGRpbmcgdGhlIHR3byBiYXNlcw0KdG9nZXRoZXIgaW4gaSksIHdoaWNoIG1lYW5zIHRoZXkg YXJlIGJ5IGRlZmluaXRpb24gaW4gYSByYW5nZSBiZXR3ZWVuDQp6ZXJvIGFuZCB0aGUgYmFzZSBh bmQgdGhlbiBtdWx0aXBseSB0aGUgcmVtYWluaW5nIGV4cG9uZW50cyBjb3JyZWN0aW5nDQp0aGUg cmVzdWx0IGZvciBhIGJhc2Ugb3ZlcmZsb3cgKHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGEgY29y cmVjdA0KZXhwb25lbnQgYW5kIGkgaXMgdGhlIGxvZ2FyaXRobSB0byB0aGUgYmFzZSkuICBJdCdz IGFjdHVhbGx5IHNpbXBseQ0KTmFwaWVyJ3MgYWxnb3JpdGhtLg0KDQpUaGUgcmVhc29uIHdlJ3Jl IGdldHRpbmcgdGhlIHVwIHRvIDIuNSUgcm91bmRpbmcgZXJyb3JzIHlvdSBjb21wbGFpbg0KYWJv dXQgaXMgYmVjYXVzZSBhdCBlYWNoIGxvZ2FyaXRobSB1bnRpbCB0aGUgbGFzdCBvbmUsIHdlIHRo cm93IGF3YXkgdGhlDQpyZW1haW5kZXIgKGl0J3MgbGVnaXRpbWF0ZSBiZWNhdXNlIGl0J3MgYWx3 YXlzIDEwMDB4IHNtYWxsZXIgdGhhbiB0aGUNCmV4cG9uZW50KSwgYnV0IGluIHRoZSBjYXNlIG9m IGEgbGFyZ2UgcmVtYWluZGVyIGl0IHByb3ZpZGVzIGEgc21hbGwNCmNvcnJlY3Rpb24gdG8gdGhl IGZpbmFsIG9wZXJhdGlvbiB3aGljaCB3ZSBkb24ndCBhY2NvdW50IGZvci4gIElmIHlvdQ0Kd2Fu dCB0byBtYWtlIGEgdHJ1ZSBjb3JyZWN0aW9uLCB5b3Ugc2F2ZSB0aGUgcGVudWx0aW1hdGUgcmVz aWR1ZSBpbiBlYWNoDQpjYXNlLCBtdWx0aXBseSBlYWNoIGJ5IHRoZSAqb3RoZXIqIGV4cG9uZW50 IGFkZCB0aGVtIHRvZ2V0aGVyLCBkaXZpZGUgYnkNCnRoZSBiYXNlIGFuZCBpbmNyZW1lbnQgdGhl IGZpbmFsIHJlc3VsdCBieSB0aGUgcmVtYWluZGVyLg0KDQpIb3dldmVyLCBmb3IgMi41JSB0aGUg cGh5c2ljaXN0IGluIG1lIHNheXMgdGhlIGFib3ZlIGlzIHdheSBvdmVya2lsbC4NCg0KSmFtZXMN Cg0KPiA+DQo+ID4gSmFtZXMNCj4gPg0KPiA+PiBTaWduZWQtb2ZmLWJ5OiBWaXRhbHkgS3V6bmV0 c292IDx2a3V6bmV0c0ByZWRoYXQuY29tPg0KPiA+PiAtLS0NCj4gPj4gIGluY2x1ZGUvbGludXgv c3RyaW5nX2hlbHBlcnMuaCB8IDIgKy0NCj4gPj4gIGxpYi9zdHJpbmdfaGVscGVycy5jICAgICAg ICAgICB8IDQgKystLQ0KPiA+PiAgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pDQo+ID4+IA0KPiA+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJp bmdfaGVscGVycy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmdfaGVscGVycy5oDQo+ID4+IGluZGV4 IGRhYmU2NDMuLjEyMjNlODAgMTAwNjQ0DQo+ID4+IC0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5n X2hlbHBlcnMuaA0KPiA+PiArKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZ19oZWxwZXJzLmgNCj4g Pj4gQEAgLTEwLDcgKzEwLDcgQEAgZW51bSBzdHJpbmdfc2l6ZV91bml0cyB7DQo+ID4+ICAJU1RS SU5HX1VOSVRTXzIsCQkvKiB1c2UgYmluYXJ5IHBvd2VycyBvZiAyXjEwICovDQo+ID4+ICB9Ow0K PiA+PiAgDQo+ID4+IC12b2lkIHN0cmluZ19nZXRfc2l6ZSh1NjQgc2l6ZSwgdTY0IGJsa19zaXpl LCBlbnVtIHN0cmluZ19zaXplX3VuaXRzIHVuaXRzLA0KPiA+PiArdm9pZCBzdHJpbmdfZ2V0X3Np emUodTY0IHNpemUsIHUzMiBibGtfc2l6ZSwgZW51bSBzdHJpbmdfc2l6ZV91bml0cyB1bml0cywN Cj4gPj4gIAkJICAgICBjaGFyICpidWYsIGludCBsZW4pOw0KPiA+PiAgDQo+ID4+ICAjZGVmaW5l IFVORVNDQVBFX1NQQUNFCQkweDAxDQo+ID4+IGRpZmYgLS1naXQgYS9saWIvc3RyaW5nX2hlbHBl cnMuYyBiL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+IGluZGV4IDU5MzlmNjMuLmY2YzI3ZGMg MTAwNjQ0DQo+ID4+IC0tLSBhL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+ICsrKyBiL2xpYi9z dHJpbmdfaGVscGVycy5jDQo+ID4+IEBAIC0yNiw3ICsyNiw3IEBADQo+ID4+ICAgKiBhdCBsZWFz dCA5IGJ5dGVzIGFuZCB3aWxsIGFsd2F5cyBiZSB6ZXJvIHRlcm1pbmF0ZWQuDQo+ID4+ICAgKg0K PiA+PiAgICovDQo+ID4+IC12b2lkIHN0cmluZ19nZXRfc2l6ZSh1NjQgc2l6ZSwgdTY0IGJsa19z aXplLCBjb25zdCBlbnVtIHN0cmluZ19zaXplX3VuaXRzIHVuaXRzLA0KPiA+PiArdm9pZCBzdHJp bmdfZ2V0X3NpemUodTY0IHNpemUsIHUzMiBibGtfc2l6ZSwgY29uc3QgZW51bSBzdHJpbmdfc2l6 ZV91bml0cyB1bml0cywNCj4gPj4gIAkJICAgICBjaGFyICpidWYsIGludCBsZW4pDQo+ID4+ICB7 DQo+ID4+ICAJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVuaXRzXzEwW10gPSB7DQo+ID4+IEBA IC01OCw3ICs1OCw3IEBAIHZvaWQgc3RyaW5nX2dldF9zaXplKHU2NCBzaXplLCB1NjQgYmxrX3Np emUsIGNvbnN0IGVudW0gc3RyaW5nX3NpemVfdW5pdHMgdW5pdHMsDQo+ID4+ICAJCWkrKzsNCj4g Pj4gIAl9DQo+ID4+ICANCj4gPj4gLQlleHAgPSBkaXZpc29yW3VuaXRzXSAvICh1MzIpYmxrX3Np emU7DQo+ID4+ICsJZXhwID0gZGl2aXNvclt1bml0c10gLyBibGtfc2l6ZTsNCj4gPj4gIAkvKg0K PiA+PiAgCSAqIHNpemUgbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gZXhwIGhlcmUgdG8g ZW5zdXJlIHRoYXQgcmVtYWluZGVyDQo+ID4+ICAJICogaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3Jb dW5pdHNdIGNvbWluZyBvdXQgb2YgdGhlIGlmIGJlbG93Lg0KPiANCg0KDQo= -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-29 17:40 +0100 |
| Subject | [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qoYp4-2B4-21@gated-at.bofh.it> |
| In reply to | #1258906 |
Division by zero happens if blk_size=0 is supplied to string_get_size(). Add WARN_ON() and set size to 0 to report '0 B'. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- lib/string_helpers.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/string_helpers.c b/lib/string_helpers.c index f6c27dc..ff3575b 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c @@ -50,6 +50,11 @@ void string_get_size(u64 size, u32 blk_size, const enum string_size_units units, tmp[0] = '\0'; i = 0; + + /* Calling string_get_size() with blk_size=0 is wrong! */ + if (WARN_ON(!blk_size)) + size = 0; + if (!size) goto out; -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2015-10-29 22:30 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qp2VI-5uW-17@gated-at.bofh.it> |
| In reply to | #1258911 |
On Thu, Oct 29, 2015 at 6:30 PM, Vitaly Kuznetsov <vkuznets@redhat.com> wrote: > Division by zero happens if blk_size=0 is supplied to string_get_size(). > Add WARN_ON() and set size to 0 to report '0 B'. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> > --- > lib/string_helpers.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/lib/string_helpers.c b/lib/string_helpers.c > index f6c27dc..ff3575b 100644 > --- a/lib/string_helpers.c > +++ b/lib/string_helpers.c > @@ -50,6 +50,11 @@ void string_get_size(u64 size, u32 blk_size, const enum string_size_units units, > > tmp[0] = '\0'; > i = 0; > + > + /* Calling string_get_size() with blk_size=0 is wrong! */ > + if (WARN_ON(!blk_size)) > + size = 0; > + > if (!size) > goto out; > > -- > 2.4.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-30 00:10 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qp4uu-6yv-29@gated-at.bofh.it> |
| In reply to | #1258911 |
T24gVGh1LCAyMDE1LTEwLTI5IGF0IDE3OjMwICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3Rl Og0KPiBEaXZpc2lvbiBieSB6ZXJvIGhhcHBlbnMgaWYgYmxrX3NpemU9MCBpcyBzdXBwbGllZCB0 byBzdHJpbmdfZ2V0X3NpemUoKS4NCj4gQWRkIFdBUk5fT04oKSBhbmQgc2V0IHNpemUgdG8gMCB0 byByZXBvcnQgJzAgQicuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBWaXRhbHkgS3V6bmV0c292IDx2 a3V6bmV0c0ByZWRoYXQuY29tPg0KPiAtLS0NCj4gIGxpYi9zdHJpbmdfaGVscGVycy5jIHwgNSAr KysrKw0KPiAgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdp dCBhL2xpYi9zdHJpbmdfaGVscGVycy5jIGIvbGliL3N0cmluZ19oZWxwZXJzLmMNCj4gaW5kZXgg ZjZjMjdkYy4uZmYzNTc1YiAxMDA2NDQNCj4gLS0tIGEvbGliL3N0cmluZ19oZWxwZXJzLmMNCj4g KysrIGIvbGliL3N0cmluZ19oZWxwZXJzLmMNCj4gQEAgLTUwLDYgKzUwLDExIEBAIHZvaWQgc3Ry aW5nX2dldF9zaXplKHU2NCBzaXplLCB1MzIgYmxrX3NpemUsIGNvbnN0IGVudW0gc3RyaW5nX3Np emVfdW5pdHMgdW5pdHMsDQo+ICANCj4gIAl0bXBbMF0gPSAnXDAnOw0KPiAgCWkgPSAwOw0KPiAr DQo+ICsJLyogQ2FsbGluZyBzdHJpbmdfZ2V0X3NpemUoKSB3aXRoIGJsa19zaXplPTAgaXMgd3Jv bmchICovDQo+ICsJaWYgKFdBUk5fT04oIWJsa19zaXplKSkNCg0KR2V0IHJpZCBvZiB0aGUgV0FS Tl9PTjsgaXQncyB0aGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gZm9yIGEgcGFydGlhbGx5DQpjb25u ZWN0ZWQgZGV2aWNlLiAgU2VlaW5nIHplcm8gaXMgc3RhbmRhcmQgaW4gYSB3aG9sZSB2YXJpZXR5 IG9mDQpzaXR1YXRpb25zLiAgU0NTSSBzaGltcyB0aGUgemVybyBidXQgbW9zdCBvdGhlciBkcml2 ZXJzIGRvbid0Lg0KDQpKYW1lcw0KDQo= -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2015-10-30 00:40 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qp4Xv-6IO-11@gated-at.bofh.it> |
| In reply to | #1259091 |
On Fri, Oct 30, 2015 at 1:00 AM, James Bottomley <jbottomley@odin.com> wrote: > On Thu, 2015-10-29 at 17:30 +0100, Vitaly Kuznetsov wrote: >> Division by zero happens if blk_size=0 is supplied to string_get_size(). >> Add WARN_ON() and set size to 0 to report '0 B'. >> >> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> >> --- >> lib/string_helpers.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/lib/string_helpers.c b/lib/string_helpers.c >> index f6c27dc..ff3575b 100644 >> --- a/lib/string_helpers.c >> +++ b/lib/string_helpers.c >> @@ -50,6 +50,11 @@ void string_get_size(u64 size, u32 blk_size, const enum string_size_units units, >> >> tmp[0] = '\0'; >> i = 0; >> + >> + /* Calling string_get_size() with blk_size=0 is wrong! */ >> + if (WARN_ON(!blk_size)) > > Get rid of the WARN_ON; it's the standard thing to do for a partially > connected device. Seeing zero is standard in a whole variety of > situations. SCSI shims the zero but most other drivers don't. For *block* size? It will crash the kernel. I've checked, it wasn't changed from the beginning (b9f28d863594). + exp = divisor[units] / (u32)blk_size; -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-30 04:40 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qp8HL-DT-1@gated-at.bofh.it> |
| In reply to | #1259104 |
T24gRnJpLCAyMDE1LTEwLTMwIGF0IDAxOjMyICswMjAwLCBBbmR5IFNoZXZjaGVua28gd3JvdGU6 DQo+IE9uIEZyaSwgT2N0IDMwLCAyMDE1IGF0IDE6MDAgQU0sIEphbWVzIEJvdHRvbWxleSA8amJv dHRvbWxleUBvZGluLmNvbT4gd3JvdGU6DQo+ID4gT24gVGh1LCAyMDE1LTEwLTI5IGF0IDE3OjMw ICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3RlOg0KPiA+PiBEaXZpc2lvbiBieSB6ZXJvIGhh cHBlbnMgaWYgYmxrX3NpemU9MCBpcyBzdXBwbGllZCB0byBzdHJpbmdfZ2V0X3NpemUoKS4NCj4g Pj4gQWRkIFdBUk5fT04oKSBhbmQgc2V0IHNpemUgdG8gMCB0byByZXBvcnQgJzAgQicuDQo+ID4+ DQo+ID4+IFNpZ25lZC1vZmYtYnk6IFZpdGFseSBLdXpuZXRzb3YgPHZrdXpuZXRzQHJlZGhhdC5j b20+DQo+ID4+IC0tLQ0KPiA+PiAgbGliL3N0cmluZ19oZWxwZXJzLmMgfCA1ICsrKysrDQo+ID4+ ICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQg YS9saWIvc3RyaW5nX2hlbHBlcnMuYyBiL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+IGluZGV4 IGY2YzI3ZGMuLmZmMzU3NWIgMTAwNjQ0DQo+ID4+IC0tLSBhL2xpYi9zdHJpbmdfaGVscGVycy5j DQo+ID4+ICsrKyBiL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+IEBAIC01MCw2ICs1MCwxMSBA QCB2b2lkIHN0cmluZ19nZXRfc2l6ZSh1NjQgc2l6ZSwgdTMyIGJsa19zaXplLCBjb25zdCBlbnVt IHN0cmluZ19zaXplX3VuaXRzIHVuaXRzLA0KPiA+Pg0KPiA+PiAgICAgICB0bXBbMF0gPSAnXDAn Ow0KPiA+PiAgICAgICBpID0gMDsNCj4gPj4gKw0KPiA+PiArICAgICAvKiBDYWxsaW5nIHN0cmlu Z19nZXRfc2l6ZSgpIHdpdGggYmxrX3NpemU9MCBpcyB3cm9uZyEgKi8NCj4gPj4gKyAgICAgaWYg KFdBUk5fT04oIWJsa19zaXplKSkNCj4gPg0KPiA+IEdldCByaWQgb2YgdGhlIFdBUk5fT047IGl0 J3MgdGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGZvciBhIHBhcnRpYWxseQ0KPiA+IGNvbm5lY3Rl ZCBkZXZpY2UuICBTZWVpbmcgemVybyBpcyBzdGFuZGFyZCBpbiBhIHdob2xlIHZhcmlldHkgb2YN Cj4gPiBzaXR1YXRpb25zLiAgU0NTSSBzaGltcyB0aGUgemVybyBidXQgbW9zdCBvdGhlciBkcml2 ZXJzIGRvbid0Lg0KPiANCj4gRm9yICpibG9jayogc2l6ZT8gSXQgd2lsbCBjcmFzaCB0aGUga2Vy bmVsLiBJJ3ZlIGNoZWNrZWQsIGl0IHdhc24ndA0KPiBjaGFuZ2VkIGZyb20gdGhlIGJlZ2lubmlu ZyAoYjlmMjhkODYzNTk0KS4NCg0KVGhlIHN0YW5kYXJkIHNpZ25hbCBmb3IgYSBkcml2ZSBlcnJv ciBpbiBjYXBhY2l0eSBpcyB6ZXJvIHNpemUgYW5kIHplcm8NCmJsb2NrIHNpemUuICBXZSBoYXZl IHRvIHRha2UgdGhhdCBjYXNlIGFzIHN0YW5kYXJkIHdpdGhvdXQgZW1pdHRpbmcNCnNjYXJ5IHdh cm5pbmdzLg0KDQpKYW1lcw0KDQo= -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2015-10-30 11:50 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qpfpU-4J3-31@gated-at.bofh.it> |
| In reply to | #1259188 |
James Bottomley <jbottomley@odin.com> writes: > On Fri, 2015-10-30 at 01:32 +0200, Andy Shevchenko wrote: >> On Fri, Oct 30, 2015 at 1:00 AM, James Bottomley <jbottomley@odin.com> wrote: >> > On Thu, 2015-10-29 at 17:30 +0100, Vitaly Kuznetsov wrote: >> >> Division by zero happens if blk_size=0 is supplied to string_get_size(). >> >> Add WARN_ON() and set size to 0 to report '0 B'. >> >> >> >> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> >> >> --- >> >> lib/string_helpers.c | 5 +++++ >> >> 1 file changed, 5 insertions(+) >> >> >> >> diff --git a/lib/string_helpers.c b/lib/string_helpers.c >> >> index f6c27dc..ff3575b 100644 >> >> --- a/lib/string_helpers.c >> >> +++ b/lib/string_helpers.c >> >> @@ -50,6 +50,11 @@ void string_get_size(u64 size, u32 blk_size, const enum string_size_units units, >> >> >> >> tmp[0] = '\0'; >> >> i = 0; >> >> + >> >> + /* Calling string_get_size() with blk_size=0 is wrong! */ >> >> + if (WARN_ON(!blk_size)) >> > >> > Get rid of the WARN_ON; it's the standard thing to do for a partially >> > connected device. Seeing zero is standard in a whole variety of >> > situations. SCSI shims the zero but most other drivers don't. >> >> For *block* size? It will crash the kernel. I've checked, it wasn't >> changed from the beginning (b9f28d863594). > > The standard signal for a drive error in capacity is zero size and zero > block size. We have to take that case as standard without emitting > scary warnings. Ok, but what if size != 0? Is WARN_ON() justified in this case? -- Vitaly -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | James Bottomley <jbottomley@odin.com> |
|---|---|
| Date | 2015-10-31 01:10 +0100 |
| Subject | Re: [PATCH v3 2/4] lib/string_helpers.c: protect string_get_size() against blk_size=0 |
| Message-ID | <qprU5-482-7@gated-at.bofh.it> |
| In reply to | #1259392 |
T24gRnJpLCAyMDE1LTEwLTMwIGF0IDExOjQxICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3Rl Og0KPiBKYW1lcyBCb3R0b21sZXkgPGpib3R0b21sZXlAb2Rpbi5jb20+IHdyaXRlczoNCj4gDQo+ ID4gT24gRnJpLCAyMDE1LTEwLTMwIGF0IDAxOjMyICswMjAwLCBBbmR5IFNoZXZjaGVua28gd3Jv dGU6DQo+ID4+IE9uIEZyaSwgT2N0IDMwLCAyMDE1IGF0IDE6MDAgQU0sIEphbWVzIEJvdHRvbWxl eSA8amJvdHRvbWxleUBvZGluLmNvbT4gd3JvdGU6DQo+ID4+ID4gT24gVGh1LCAyMDE1LTEwLTI5 IGF0IDE3OjMwICswMTAwLCBWaXRhbHkgS3V6bmV0c292IHdyb3RlOg0KPiA+PiA+PiBEaXZpc2lv biBieSB6ZXJvIGhhcHBlbnMgaWYgYmxrX3NpemU9MCBpcyBzdXBwbGllZCB0byBzdHJpbmdfZ2V0 X3NpemUoKS4NCj4gPj4gPj4gQWRkIFdBUk5fT04oKSBhbmQgc2V0IHNpemUgdG8gMCB0byByZXBv cnQgJzAgQicuDQo+ID4+ID4+DQo+ID4+ID4+IFNpZ25lZC1vZmYtYnk6IFZpdGFseSBLdXpuZXRz b3YgPHZrdXpuZXRzQHJlZGhhdC5jb20+DQo+ID4+ID4+IC0tLQ0KPiA+PiA+PiAgbGliL3N0cmlu Z19oZWxwZXJzLmMgfCA1ICsrKysrDQo+ID4+ID4+ICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRp b25zKCspDQo+ID4+ID4+DQo+ID4+ID4+IGRpZmYgLS1naXQgYS9saWIvc3RyaW5nX2hlbHBlcnMu YyBiL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+ID4+IGluZGV4IGY2YzI3ZGMuLmZmMzU3NWIg MTAwNjQ0DQo+ID4+ID4+IC0tLSBhL2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+ID4+ICsrKyBi L2xpYi9zdHJpbmdfaGVscGVycy5jDQo+ID4+ID4+IEBAIC01MCw2ICs1MCwxMSBAQCB2b2lkIHN0 cmluZ19nZXRfc2l6ZSh1NjQgc2l6ZSwgdTMyIGJsa19zaXplLCBjb25zdCBlbnVtIHN0cmluZ19z aXplX3VuaXRzIHVuaXRzLA0KPiA+PiA+Pg0KPiA+PiA+PiAgICAgICB0bXBbMF0gPSAnXDAnOw0K PiA+PiA+PiAgICAgICBpID0gMDsNCj4gPj4gPj4gKw0KPiA+PiA+PiArICAgICAvKiBDYWxsaW5n IHN0cmluZ19nZXRfc2l6ZSgpIHdpdGggYmxrX3NpemU9MCBpcyB3cm9uZyEgKi8NCj4gPj4gPj4g KyAgICAgaWYgKFdBUk5fT04oIWJsa19zaXplKSkNCj4gPj4gPg0KPiA+PiA+IEdldCByaWQgb2Yg dGhlIFdBUk5fT047IGl0J3MgdGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGZvciBhIHBhcnRpYWxs eQ0KPiA+PiA+IGNvbm5lY3RlZCBkZXZpY2UuICBTZWVpbmcgemVybyBpcyBzdGFuZGFyZCBpbiBh IHdob2xlIHZhcmlldHkgb2YNCj4gPj4gPiBzaXR1YXRpb25zLiAgU0NTSSBzaGltcyB0aGUgemVy byBidXQgbW9zdCBvdGhlciBkcml2ZXJzIGRvbid0Lg0KPiA+PiANCj4gPj4gRm9yICpibG9jayog c2l6ZT8gSXQgd2lsbCBjcmFzaCB0aGUga2VybmVsLiBJJ3ZlIGNoZWNrZWQsIGl0IHdhc24ndA0K PiA+PiBjaGFuZ2VkIGZyb20gdGhlIGJlZ2lubmluZyAoYjlmMjhkODYzNTk0KS4NCj4gPg0KPiA+ IFRoZSBzdGFuZGFyZCBzaWduYWwgZm9yIGEgZHJpdmUgZXJyb3IgaW4gY2FwYWNpdHkgaXMgemVy byBzaXplIGFuZCB6ZXJvDQo+ID4gYmxvY2sgc2l6ZS4gIFdlIGhhdmUgdG8gdGFrZSB0aGF0IGNh c2UgYXMgc3RhbmRhcmQgd2l0aG91dCBlbWl0dGluZw0KPiA+IHNjYXJ5IHdhcm5pbmdzLg0KPiAN Cj4gT2ssIGJ1dCB3aGF0IGlmIHNpemUgIT0gMD8gSXMgV0FSTl9PTigpIGp1c3RpZmllZCBpbiB0 aGlzIGNhc2U/DQoNCkl0J3MgYW4gYXJpdGhtZW50aWMgcm91dGluZSB3aG9zZSBqb2IgaXMgdG8g bXVsdGlwbHkgdHdvIG51bWJlcnMsIG5vdA0Kc2Vjb25kIGd1ZXNzIHRoZSBzdWJzeXN0ZW0gdGhh dCBnYXZlIGl0IHRoZSBudW1iZXJzLiAgSnVzdCBvbiBnZW5lcmFsDQphcmNoaXRlY3R1cmFsIHBy aW5jaXBsZXMgdGhlIG9ubHkgdGltZSBpdCdzIGFsbG93ZWQgdG8gZHVtcCBhIHN0YWNrDQp0cmFj ZSB3aXRob3V0IGNvbmZ1c2luZyBwZW9wbGUgaXMgd2hlbiB0aGUgYXJpdGhtZXRpYyBvcGVyYXRp b24gaXQgaGFzDQpiZWVuIGFza2VkIHRvIGRvIHdvdWxkIHByb2R1Y2UgYW4gaWxsZWdhbCByZXN1 bHQgKHdoaWNoIGZvciB0d28gc2l4dHkNCmZvdXIgYml0IG51bWJlcnMgbXVsdGlwbHlpbmcgdG8g YSAxMjggYml0IG9uZSBpcyBuZXZlcikuDQoNCkphbWVzDQoNCg== -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web