* [PATCH 0/4] btrfs-progs: GCC9 fixes
@ 2019-06-17 7:59 Qu Wenruo
2019-06-17 7:59 ` [PATCH 1/4] btrfs-progs: constify extent buffer reader Qu Wenruo
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Qu Wenruo @ 2019-06-17 7:59 UTC (permalink / raw)
To: linux-btrfs
This patchset will address the remaining warning when compiling
btrfs-progs devel branch with GCC9.
It's based on the following commit:
commit 9a1d86a9ac7384b332db498822585a2255f7d3e6 (david/devel)
Author: David Sterba <dsterba@suse.com>
Date: Thu Jun 13 20:45:49 2019 +0200
btrfs-progs: build: disable -Waddress-of-packed-member by default
Please note that the 2nd patch mostly replace commit 691656abdc9a
("btrfs-progs: fix gcc9 warning and potentially unaligned access to dev stats") by
backporing kernel btrfs_dev_stats_value() to btrfs-progs.
Thus the original fix can be removed.
The remaining warning is -Warray-boundary, but that one looks pretty
strange. The code looks good, and I backported an easy version:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
struct test_struct {
long long off_0_7;
int offset_8_11;
unsigned char offset_12_12;
} __attribute__ ((packed));
void reset_values(struct test_struct *ptr)
{
memset(&ptr->offset_8_11, 0, sizeof(struct test_struct) - offsetof(struct test_struct, offset_8_11));
}
int main()
{
struct test_struct my_struct = { 0xffff, 0xff, 0xff};
printf("struct=0x%llx start=0x%llx len=0x%x\n",
&my_struct, &my_struct.offset_8_11, sizeof(struct test_struct) - offsetof(struct test_struct, offset_8_11));
reset_values(&my_struct);
printf("0x%lx 0x%x 0x%x\n", my_struct.off_0_7, my_struct.offset_8_11, my_struct.offset_12_12);
return 0;
}
Which doesn't reproduce the warning.
Thus looks like a false warning and a bug in gcc.
Qu Wenruo (4):
btrfs-progs: constify extent buffer reader
btrfs-progs: Fix -Waddress-of-packed-member warning in
btrfs_dev_stats_values callers
btrfs-progs: Remove unnecessary fallthrough attribute in
test_num_disk_vs_raid()
btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c
cmds-receive.c | 4 ++--
ctree.h | 13 +++++++++++++
extent_io.c | 4 ++--
extent_io.h | 4 ++--
print-tree.c | 21 ++++++---------------
utils.c | 1 -
6 files changed, 25 insertions(+), 22 deletions(-)
--
2.22.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/4] btrfs-progs: constify extent buffer reader
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
@ 2019-06-17 7:59 ` Qu Wenruo
2019-06-17 7:59 ` [PATCH 2/4] btrfs-progs: Fix -Waddress-of-packed-member warning in btrfs_dev_stats_values callers Qu Wenruo
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Qu Wenruo @ 2019-06-17 7:59 UTC (permalink / raw)
To: linux-btrfs
Add const prefix for the following parameters:
- @eb of memcmp_extent_buffer()
- @eb of read_extent_buffer()
This backports kernel commit 1cbb1f454e53 ("btrfs: struct-funcs,
constify readers") to btrfs-progs.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
extent_io.c | 4 ++--
extent_io.h | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/extent_io.c b/extent_io.c
index c57f62829bf7..a9ceff5111fb 100644
--- a/extent_io.c
+++ b/extent_io.c
@@ -963,13 +963,13 @@ int clear_extent_buffer_dirty(struct extent_buffer *eb)
return 0;
}
-int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
+int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv,
unsigned long start, unsigned long len)
{
return memcmp(eb->data + start, ptrv, len);
}
-void read_extent_buffer(struct extent_buffer *eb, void *dst,
+void read_extent_buffer(const struct extent_buffer *eb, void *dst,
unsigned long start, unsigned long len)
{
memcpy(dst, eb->data + start, len);
diff --git a/extent_io.h b/extent_io.h
index 9587528bbefb..874cbca1d436 100644
--- a/extent_io.h
+++ b/extent_io.h
@@ -154,9 +154,9 @@ void free_extent_buffer_nocache(struct extent_buffer *eb);
int read_extent_from_disk(struct extent_buffer *eb,
unsigned long offset, unsigned long len);
int write_extent_to_disk(struct extent_buffer *eb);
-int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
+int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv,
unsigned long start, unsigned long len);
-void read_extent_buffer(struct extent_buffer *eb, void *dst,
+void read_extent_buffer(const struct extent_buffer *eb, void *dst,
unsigned long start, unsigned long len);
void write_extent_buffer(struct extent_buffer *eb, const void *src,
unsigned long start, unsigned long len);
--
2.22.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4] btrfs-progs: Fix -Waddress-of-packed-member warning in btrfs_dev_stats_values callers
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
2019-06-17 7:59 ` [PATCH 1/4] btrfs-progs: constify extent buffer reader Qu Wenruo
@ 2019-06-17 7:59 ` Qu Wenruo
2019-06-17 7:59 ` [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid() Qu Wenruo
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Qu Wenruo @ 2019-06-17 7:59 UTC (permalink / raw)
To: linux-btrfs
[BUG]
GCC 9.1.0 will report the following error when compiling btrfs-progs:
In file included from print-tree.c:24:
ctree.h: In function 'btrfs_dev_stats_values':
ctree.h:2408:9: warning: taking address of packed member of 'struct btrfs_dev_stats_item' may result in an unaligned pointer value [-Waddress-of-packed-member]
2408 | return p->values;
| ^
[FIX]
Follow the kernel way of accessing dev stats by using
btrfs_dev_stats_value(eb, ptr, index).
So that we don't need to bother accessing the packed member.
This also unifies the helper function in kernel and btrfs-progs.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
ctree.h | 13 +++++++++++++
print-tree.c | 21 ++++++---------------
2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/ctree.h b/ctree.h
index 8d710fcb5f72..d5ef1064a45a 100644
--- a/ctree.h
+++ b/ctree.h
@@ -2395,6 +2395,19 @@ static inline struct btrfs_disk_balance_args* btrfs_balance_item_sys(
return &p->sys;
}
+static inline u64 btrfs_dev_stats_value(const struct extent_buffer *eb,
+ const struct btrfs_dev_stats_item *ptr,
+ int index)
+{
+ u64 val;
+
+ read_extent_buffer(eb, &val,
+ offsetof(struct btrfs_dev_stats_item, values) +
+ ((unsigned long)ptr) + (index * sizeof(u64)),
+ sizeof(val));
+ return val;
+}
+
/*
* this returns the number of bytes used by the item on disk, minus the
* size of any extent headers. If a file is compressed on disk, this is
diff --git a/print-tree.c b/print-tree.c
index b5e0587d0b96..1ca683a61c35 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -953,32 +953,23 @@ static void print_balance_item(struct extent_buffer *eb,
static void print_dev_stats(struct extent_buffer *eb,
struct btrfs_dev_stats_item *stats, u32 size)
{
- struct btrfs_dev_stats_item *item;
- const unsigned long offset = (unsigned long)stats;
u32 known = BTRFS_DEV_STAT_VALUES_MAX * sizeof(__le64);
int i;
- item = (struct btrfs_dev_stats_item *)(eb->data + offset);
-
printf("\t\tdevice stats\n");
printf("\t\twrite_errs %llu read_errs %llu flush_errs %llu corruption_errs %llu generation %llu\n",
- (unsigned long long)get_unaligned_le64(
- &item->values[BTRFS_DEV_STAT_WRITE_ERRS]),
- (unsigned long long)get_unaligned_le64(
- &item->values[BTRFS_DEV_STAT_READ_ERRS]),
- (unsigned long long)get_unaligned_le64(
- &item->values[BTRFS_DEV_STAT_FLUSH_ERRS]),
- (unsigned long long)get_unaligned_le64(
- &item->values[BTRFS_DEV_STAT_CORRUPTION_ERRS]),
- (unsigned long long)get_unaligned_le64(
- &item->values[BTRFS_DEV_STAT_GENERATION_ERRS]));
+ btrfs_dev_stats_value(eb, stats, BTRFS_DEV_STAT_WRITE_ERRS),
+ btrfs_dev_stats_value(eb, stats, BTRFS_DEV_STAT_READ_ERRS),
+ btrfs_dev_stats_value(eb, stats, BTRFS_DEV_STAT_FLUSH_ERRS),
+ btrfs_dev_stats_value(eb, stats, BTRFS_DEV_STAT_CORRUPTION_ERRS),
+ btrfs_dev_stats_value(eb, stats, BTRFS_DEV_STAT_GENERATION_ERRS));
if (known < size) {
printf("\t\tunknown stats item bytes %u", size - known);
for (i = BTRFS_DEV_STAT_VALUES_MAX; i * sizeof(__le64) < size; i++) {
printf("\t\tunknown item %u offset %zu value %llu\n",
i, i * sizeof(__le64),
- (unsigned long long)le64_to_cpu(&item->values[i]));
+ btrfs_dev_stats_value(eb, stats, i));
}
}
}
--
2.22.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid()
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
2019-06-17 7:59 ` [PATCH 1/4] btrfs-progs: constify extent buffer reader Qu Wenruo
2019-06-17 7:59 ` [PATCH 2/4] btrfs-progs: Fix -Waddress-of-packed-member warning in btrfs_dev_stats_values callers Qu Wenruo
@ 2019-06-17 7:59 ` Qu Wenruo
2019-06-18 13:14 ` David Sterba
2019-06-17 7:59 ` [PATCH 4/4] btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c Qu Wenruo
2019-06-18 13:20 ` [PATCH 0/4] btrfs-progs: GCC9 fixes David Sterba
4 siblings, 1 reply; 7+ messages in thread
From: Qu Wenruo @ 2019-06-17 7:59 UTC (permalink / raw)
To: linux-btrfs
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
utils.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/utils.c b/utils.c
index 0b271517551b..2709ced97f97 100644
--- a/utils.c
+++ b/utils.c
@@ -1928,7 +1928,6 @@ int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile,
__attribute__ ((fallthrough));
case 1:
allowed |= BTRFS_BLOCK_GROUP_DUP;
- __attribute__ ((fallthrough));
}
if (dev_cnt > 1 && profile & BTRFS_BLOCK_GROUP_DUP) {
--
2.22.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/4] btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
` (2 preceding siblings ...)
2019-06-17 7:59 ` [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid() Qu Wenruo
@ 2019-06-17 7:59 ` Qu Wenruo
2019-06-18 13:20 ` [PATCH 0/4] btrfs-progs: GCC9 fixes David Sterba
4 siblings, 0 replies; 7+ messages in thread
From: Qu Wenruo @ 2019-06-17 7:59 UTC (permalink / raw)
To: linux-btrfs
[BUG]
When compiling btrfs-progs with GCC 9 (9.1.0), we got the following
warnings:
In file included from utils.h:30,
from cmds-receive.c:45:
cmds-receive.c: In function 'process_subvol':
messages.h:42:3: warning: '%s' directive argument is null [-Wformat-overflow=]
42 | __btrfs_error((fmt), ##__VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cmds-receive.c:178:3: note: in expansion of macro 'error'
178 | error("subvol: another one already started, path buf: %s",
| ^~~~~
[CC] cmds-inspect-tree-stats.o
cmds-receive.c: In function 'process_snapshot':
messages.h:42:3: warning: '%s' directive argument is null [-Wformat-overflow=]
42 | __btrfs_error((fmt), ##__VA_ARGS__); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cmds-receive.c:248:3: note: in expansion of macro 'error'
248 | error("snapshot: another one already started, path buf: %s",
| ^~~~~
[FIX]
We're using wrong member for the error output.
Fix the member to output.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
cmds-receive.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cmds-receive.c b/cmds-receive.c
index fe5c3a5b05c5..07f05101f921 100644
--- a/cmds-receive.c
+++ b/cmds-receive.c
@@ -176,7 +176,7 @@ static int process_subvol(const char *path, const u8 *uuid, u64 ctransid,
}
if (rctx->cur_subvol_path[0]) {
error("subvol: another one already started, path buf: %s",
- rctx->cur_subvol.path);
+ rctx->cur_subvol_path);
ret = -EINVAL;
goto out;
}
@@ -246,7 +246,7 @@ static int process_snapshot(const char *path, const u8 *uuid, u64 ctransid,
}
if (rctx->cur_subvol_path[0]) {
error("snapshot: another one already started, path buf: %s",
- rctx->cur_subvol.path);
+ rctx->cur_subvol_path);
ret = -EINVAL;
goto out;
}
--
2.22.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid()
2019-06-17 7:59 ` [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid() Qu Wenruo
@ 2019-06-18 13:14 ` David Sterba
0 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2019-06-18 13:14 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
Even though this is a simple fix, the warning should be here and the
versio that triggered it.
On Mon, Jun 17, 2019 at 03:59:35PM +0800, Qu Wenruo wrote:
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> utils.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/utils.c b/utils.c
> index 0b271517551b..2709ced97f97 100644
> --- a/utils.c
> +++ b/utils.c
> @@ -1928,7 +1928,6 @@ int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile,
> __attribute__ ((fallthrough));
> case 1:
> allowed |= BTRFS_BLOCK_GROUP_DUP;
> - __attribute__ ((fallthrough));
> }
>
> if (dev_cnt > 1 && profile & BTRFS_BLOCK_GROUP_DUP) {
> --
> 2.22.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/4] btrfs-progs: GCC9 fixes
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
` (3 preceding siblings ...)
2019-06-17 7:59 ` [PATCH 4/4] btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c Qu Wenruo
@ 2019-06-18 13:20 ` David Sterba
4 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2019-06-18 13:20 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Mon, Jun 17, 2019 at 03:59:32PM +0800, Qu Wenruo wrote:
> This patchset will address the remaining warning when compiling
> btrfs-progs devel branch with GCC9.
>
> It's based on the following commit:
> commit 9a1d86a9ac7384b332db498822585a2255f7d3e6 (david/devel)
> Author: David Sterba <dsterba@suse.com>
> Date: Thu Jun 13 20:45:49 2019 +0200
>
> btrfs-progs: build: disable -Waddress-of-packed-member by default
>
>
> Please note that the 2nd patch mostly replace commit 691656abdc9a
> ("btrfs-progs: fix gcc9 warning and potentially unaligned access to dev stats") by
> backporing kernel btrfs_dev_stats_value() to btrfs-progs.
> Thus the original fix can be removed.
Yeah, the backport is better, patch replaced.
> The remaining warning is -Warray-boundary, but that one looks pretty
> strange. The code looks good, and I backported an easy version:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <stddef.h>
>
> struct test_struct {
> long long off_0_7;
> int offset_8_11;
> unsigned char offset_12_12;
> } __attribute__ ((packed));
>
> void reset_values(struct test_struct *ptr)
> {
> memset(&ptr->offset_8_11, 0, sizeof(struct test_struct) - offsetof(struct test_struct, offset_8_11));
> }
>
> int main()
> {
> struct test_struct my_struct = { 0xffff, 0xff, 0xff};
>
> printf("struct=0x%llx start=0x%llx len=0x%x\n",
> &my_struct, &my_struct.offset_8_11, sizeof(struct test_struct) - offsetof(struct test_struct, offset_8_11));
> reset_values(&my_struct);
> printf("0x%lx 0x%x 0x%x\n", my_struct.off_0_7, my_struct.offset_8_11, my_struct.offset_12_12);
> return 0;
> }
>
> Which doesn't reproduce the warning.
> Thus looks like a false warning and a bug in gcc.
>
> Qu Wenruo (4):
> btrfs-progs: constify extent buffer reader
> btrfs-progs: Fix -Waddress-of-packed-member warning in
> btrfs_dev_stats_values callers
> btrfs-progs: Remove unnecessary fallthrough attribute in
> test_num_disk_vs_raid()
> btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c
1-4 applied, thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-06-18 13:19 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-17 7:59 [PATCH 0/4] btrfs-progs: GCC9 fixes Qu Wenruo
2019-06-17 7:59 ` [PATCH 1/4] btrfs-progs: constify extent buffer reader Qu Wenruo
2019-06-17 7:59 ` [PATCH 2/4] btrfs-progs: Fix -Waddress-of-packed-member warning in btrfs_dev_stats_values callers Qu Wenruo
2019-06-17 7:59 ` [PATCH 3/4] btrfs-progs: Remove unnecessary fallthrough attribute in test_num_disk_vs_raid() Qu Wenruo
2019-06-18 13:14 ` David Sterba
2019-06-17 7:59 ` [PATCH 4/4] btrfs-progs: Fix Wformat-overflow warning in cmds-receive.c Qu Wenruo
2019-06-18 13:20 ` [PATCH 0/4] btrfs-progs: GCC9 fixes David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).