[<prev] [next>] [day] [month] [year] [list]
Message-ID: <201805291210.n2uGmw69%fengguang.wu@intel.com>
Date: Tue, 29 May 2018 12:00:12 +0800
From: kbuild test robot <lkp@...el.com>
To: Theodore Ts'o <tytso@....edu>
Cc: kbuild-all@...org, linux-ext4@...r.kernel.org
Subject: [ext4:fsverity 2/2] fs/ext4/readpage.c:162:32: error: 'struct inode'
has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git fsverity
head: 24570b70c8a73bd22f28d2e50c45c737ba487a9c
commit: 24570b70c8a73bd22f28d2e50c45c737ba487a9c [2/2] ext4: add fsverity read support
config: i386-randconfig-x012-201821 (attached as .config)
compiler: gcc-8 (Debian 8.1.0-3) 8.1.0
reproduce:
git checkout 24570b70c8a73bd22f28d2e50c45c737ba487a9c
# save the attached .config to linux build tree
make ARCH=i386
All error/warnings (new ones prefixed by >>):
In file included from include/linux/compiler.h:245,
from include/linux/kernel.h:10,
from fs/ext4/readpage.c:31:
fs/ext4/readpage.c: In function 'get_bio_post_read_ctx':
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:76:10: note: in definition of macro '__smp_load_acquire'
typeof(*p) ___p1 = READ_ONCE(*p); \
^
>> fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
In file included from include/linux/kernel.h:10,
from fs/ext4/readpage.c:31:
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:250:17: note: in definition of macro '__READ_ONCE'
union { typeof(x) __val; char __c[1]; } __u; \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:252:22: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:252:42: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:254:30: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
>> fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:254:50: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
--
In file included from include/linux/compiler.h:245,
from include/linux/kernel.h:10,
from fs//ext4/readpage.c:31:
fs//ext4/readpage.c: In function 'get_bio_post_read_ctx':
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:76:10: note: in definition of macro '__smp_load_acquire'
typeof(*p) ___p1 = READ_ONCE(*p); \
^
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
In file included from include/linux/kernel.h:10,
from fs//ext4/readpage.c:31:
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:250:17: note: in definition of macro '__READ_ONCE'
union { typeof(x) __val; char __c[1]; } __u; \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:252:22: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:252:42: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:254:30: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:254:50: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/x86/include/asm/barrier.h:76:21: note: in expansion of macro 'READ_ONCE'
typeof(*p) ___p1 = READ_ONCE(*p); \
^~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
>> include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
>> include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
>> include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_crypt_info'?
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~
include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
bool __cond = !(condition); \
^~~~~~~~~
include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:342:2: note: in expansion of macro 'compiletime_assert'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~~~~~~
>> include/linux/compiler.h:342:21: note: in expansion of macro '__native_word'
compiletime_assert(__native_word(t), \
^~~~~~~~~~~~~
arch/x86/include/asm/barrier.h:77:2: note: in expansion of macro 'compiletime_assert_atomic_type'
compiletime_assert_atomic_type(*p); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/asm-generic/barrier.h:161:29: note: in expansion of macro '__smp_load_acquire'
#define smp_load_acquire(p) __smp_load_acquire(p)
^~~~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:7: note: in expansion of macro 'smp_load_acquire'
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~~~~~~~~~~~~~~~
fs//ext4/readpage.c:162:47: warning: comparison between pointer and integer
(smp_load_acquire(&inode->i_verity_info) != NULL) &&
^~
vim +162 fs/ext4/readpage.c
> 31 #include <linux/kernel.h>
32 #include <linux/export.h>
33 #include <linux/mm.h>
34 #include <linux/kdev_t.h>
35 #include <linux/gfp.h>
36 #include <linux/bio.h>
37 #include <linux/fs.h>
38 #include <linux/buffer_head.h>
39 #include <linux/blkdev.h>
40 #include <linux/highmem.h>
41 #include <linux/prefetch.h>
42 #include <linux/mpage.h>
43 #include <linux/writeback.h>
44 #include <linux/backing-dev.h>
45 #include <linux/pagevec.h>
46 #include <linux/cleancache.h>
47
48 #include "ext4.h"
49
50 #define NUM_PREALLOC_POST_READ_CTXS 128
51
52 static struct kmem_cache *bio_post_read_ctx_cache;
53 static mempool_t *bio_post_read_ctx_pool;
54
55 static inline bool ext4_bio_encrypted(struct bio *bio)
56 {
57 #ifdef CONFIG_EXT4_FS_ENCRYPTION
58 return unlikely(bio->bi_private != NULL);
59 #else
60 return false;
61 #endif
62 }
63
64 /* postprocessing steps for read bios */
65 enum bio_post_read_step {
66 STEP_INITIAL = 0,
67 STEP_DECRYPT,
68 STEP_VERITY,
69 };
70
71 struct bio_post_read_ctx {
72 struct bio *bio;
73 struct work_struct work;
74 unsigned int cur_step;
75 unsigned int enabled_steps;
76 };
77
78 static void __read_end_io(struct bio *bio)
79 {
80 struct page *page;
81 struct bio_vec *bv;
82 int i;
83
84 bio_for_each_segment_all(bv, bio, i) {
85 page = bv->bv_page;
86
87 /* PG_error was set if any post_read step failed */
88 if (bio->bi_status || PageError(page)) {
89 ClearPageUptodate(page);
90 SetPageError(page);
91 } else {
92 SetPageUptodate(page);
93 }
94 unlock_page(page);
95 }
96 if (bio->bi_private)
97 mempool_free(bio->bi_private, bio_post_read_ctx_pool);
98 bio_put(bio);
99 }
100
101 static void bio_post_read_processing(struct bio_post_read_ctx *ctx);
102
103 static void decrypt_work(struct work_struct *work)
104 {
105 struct bio_post_read_ctx *ctx =
106 container_of(work, struct bio_post_read_ctx, work);
107
108 fscrypt_decrypt_bio(ctx->bio);
109
110 bio_post_read_processing(ctx);
111 }
112
113 static void verity_work(struct work_struct *work)
114 {
115 struct bio_post_read_ctx *ctx =
116 container_of(work, struct bio_post_read_ctx, work);
117
118 fsverity_verify_bio(ctx->bio);
119
120 bio_post_read_processing(ctx);
121 }
122
123 static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
124 {
125 /*
126 * We use different work queues for decryption and for verity because
127 * verity may require reading metadata pages that need decryption, and
128 * we shouldn't recurse to the same workqueue.
129 */
130 switch (++ctx->cur_step) {
131 case STEP_DECRYPT:
132 if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
133 INIT_WORK(&ctx->work, decrypt_work);
134 fscrypt_enqueue_decrypt_work(&ctx->work);
135 return;
136 }
137 ctx->cur_step++;
138 /* fall-through */
139 case STEP_VERITY:
140 if (ctx->enabled_steps & (1 << STEP_VERITY)) {
141 INIT_WORK(&ctx->work, verity_work);
142 fsverity_enqueue_verify_work(&ctx->work);
143 return;
144 }
145 ctx->cur_step++;
146 /* fall-through */
147 default:
148 __read_end_io(ctx->bio);
149 }
150 }
151
152 static struct bio_post_read_ctx *get_bio_post_read_ctx(struct inode *inode,
153 struct bio *bio,
154 pgoff_t index)
155 {
156 unsigned int post_read_steps = 0;
157 struct bio_post_read_ctx *ctx = NULL;
158
159 if (ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode))
160 post_read_steps |= 1 << STEP_DECRYPT;
161 if (ext4_verity_inode(inode) &&
> 162 (smp_load_acquire(&inode->i_verity_info) != NULL) &&
163 (index <= ((i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT)))
164 post_read_steps |= 1 << STEP_VERITY;
165 if (post_read_steps) {
166 ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
167 if (!ctx)
168 return ERR_PTR(-ENOMEM);
169 ctx->bio = bio;
170 ctx->enabled_steps = post_read_steps;
171 bio->bi_private = ctx;
172 }
173 return ctx;
174 }
175
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Download attachment ".config.gz" of type "application/gzip" (27963 bytes)
Powered by blists - more mailing lists