| From 28ea06c46fbcab63fd9a55531387b7928a18a590 Mon Sep 17 00:00:00 2001 |
| From: Andreas Gruenbacher <agruenba@redhat.com> |
| Date: Mon, 6 Mar 2017 12:58:42 -0500 |
| Subject: gfs2: Avoid alignment hole in struct lm_lockname |
| |
| From: Andreas Gruenbacher <agruenba@redhat.com> |
| |
| commit 28ea06c46fbcab63fd9a55531387b7928a18a590 upstream. |
| |
| Commit 88ffbf3e03 switches to using rhashtables for glocks, hashing over |
| the entire struct lm_lockname instead of its individual fields. On some |
| architectures, struct lm_lockname contains a hole of uninitialized |
| memory due to alignment rules, which now leads to incorrect hash values. |
| Get rid of that hole. |
| |
| Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> |
| Signed-off-by: Bob Peterson <rpeterso@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/gfs2/incore.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/gfs2/incore.h |
| +++ b/fs/gfs2/incore.h |
| @@ -207,7 +207,7 @@ struct lm_lockname { |
| struct gfs2_sbd *ln_sbd; |
| u64 ln_number; |
| unsigned int ln_type; |
| -}; |
| +} __packed __aligned(sizeof(int)); |
| |
| #define lm_name_equal(name1, name2) \ |
| (((name1)->ln_number == (name2)->ln_number) && \ |