[ext4:fsverity 2/2] fs/ext4/readpage.c:162:32: error: 'struct inode' has no member named 'i_verity_info'; did you mean 'i_write_hint'?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git fsverity
head:   1a96f6eee4094764886183b852c8789e28e1c212
commit: 1a96f6eee4094764886183b852c8789e28e1c212 [2/2] ext4: add fsverity read support
config: arm-omap2plus_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 1a96f6eee4094764886183b852c8789e28e1c212
        # save the attached .config to linux build tree
        make.cross ARCH=arm 

All errors (new ones prefixed by >>):

   In file included from arch/arm/include/asm/barrier.h:66:0,
                    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_write_hint'?
         (smp_load_acquire(&inode->i_verity_info) != NULL) &&
                                   ^
   include/asm-generic/barrier.h:135: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:0,
                    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_write_hint'?
         (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;   \
                    ^
   include/asm-generic/barrier.h:135: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_write_hint'?
         (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));  \
                         ^
   include/asm-generic/barrier.h:135: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_write_hint'?
         (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));  \
                                             ^
   include/asm-generic/barrier.h:135: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_write_hint'?
         (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)); \
                                 ^
   include/asm-generic/barrier.h:135: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_write_hint'?
         (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)); \
                                                     ^
   include/asm-generic/barrier.h:135: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_write_hint'?
         (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),    \
                        ^~~~~~~~~~~~~
   include/asm-generic/barrier.h:136: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_write_hint'?
         (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),    \
                        ^~~~~~~~~~~~~
   include/asm-generic/barrier.h:136: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_write_hint'?
         (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),    \
                        ^~~~~~~~~~~~~
   include/asm-generic/barrier.h:136: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_write_hint'?
         (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),    \
                        ^~~~~~~~~~~~~
   include/asm-generic/barrier.h:136: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

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux