All of lore.kernel.org
 help / color / mirror / Atom feed
* [ammarfaizi2-block:dhowells/linux-fs/netfs-maple 35/44] fs/netfs/buffered_write.c:618:58: error: 'struct netfs_i_context' has no member named 'cache'
@ 2022-04-22 22:30 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-04-22 22:30 UTC (permalink / raw)
  To: David Howells; +Cc: kbuild-all, GNU/Weeb Mailing List, linux-kernel

tree:   https://github.com/ammarfaizi2/linux-block dhowells/linux-fs/netfs-maple
head:   931e50676c6598d0eda1954ead465519ff91874d
commit: f343507aeda88b2f1a528a659b8fadaa9b6b0f79 [35/44] netfs: Implement buffered writes through netfs_file_write_iter()
config: openrisc-randconfig-r014-20220422 (https://download.01.org/0day-ci/archive/20220423/202204230648.v4eUOGe3-lkp@intel.com/config)
compiler: or1k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/ammarfaizi2/linux-block/commit/f343507aeda88b2f1a528a659b8fadaa9b6b0f79
        git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
        git fetch --no-tags ammarfaizi2-block dhowells/linux-fs/netfs-maple
        git checkout f343507aeda88b2f1a528a659b8fadaa9b6b0f79
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross W=1 O=build_dir ARCH=openrisc SHELL=/bin/bash fs/netfs/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/kernel.h:26,
                    from include/linux/cpumask.h:10,
                    from include/linux/smp.h:13,
                    from include/linux/lockdep.h:14,
                    from include/linux/spinlock.h:62,
                    from include/linux/wait.h:9,
                    from include/linux/wait_bit.h:8,
                    from include/linux/fs.h:6,
                    from fs/netfs/buffered_write.c:9:
   fs/netfs/buffered_write.c: In function 'copy_folio_from_iter_atomic':
   include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                                   ^~
   include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
      26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
         |                  ^~~~~~~~~~~
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/netfs/buffered_write.c:28:40: note: in expansion of macro 'min'
      28 |                 unsigned int psize   = min(PAGE_SIZE - offset, size);
         |                                        ^~~
   fs/netfs/buffered_write.c: In function 'netfs_subsume_into_existing':
   include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                                   ^~
   include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
      26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
         |                  ^~~~~~~~~~~
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/netfs/buffered_write.c:94:25: note: in expansion of macro 'min'
      94 |         target->from  = min(target->from, folio_pos(folio) + offset);
         |                         ^~~
   include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                                   ^~
   include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
      26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
         |                  ^~~~~~~~~~~
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:52:25: note: in expansion of macro '__careful_cmp'
      52 | #define max(x, y)       __careful_cmp(x, y, >)
         |                         ^~~~~~~~~~~~~
   fs/netfs/buffered_write.c:95:25: note: in expansion of macro 'max'
      95 |         target->to    = max(target->to,   folio_pos(folio) + offset + len);
         |                         ^~~
   In file included from include/asm-generic/bug.h:22,
                    from ./arch/openrisc/include/generated/asm/bug.h:1,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:13,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/openrisc/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:78,
                    from include/linux/spinlock.h:55,
                    from include/linux/wait.h:9,
                    from include/linux/wait_bit.h:8,
                    from include/linux/fs.h:6,
                    from fs/netfs/buffered_write.c:9:
   fs/netfs/buffered_write.c: In function 'netfs_commit_folio':
   fs/netfs/internal.h:270:36: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'size_t' {aka 'unsigned int'} [-Wformat=]
     270 | #define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
         |                                    ^~~~~~~~~
   include/linux/printk.h:418:25: note: in definition of macro 'printk_index_wrap'
     418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
         |                         ^~~~
   include/linux/printk.h:132:17: note: in expansion of macro 'printk'
     132 |                 printk(fmt, ##__VA_ARGS__);             \
         |                 ^~~~~~
   fs/netfs/internal.h:270:26: note: in expansion of macro 'no_printk'
     270 | #define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
         |                          ^~~~~~~~~
   fs/netfs/buffered_write.c:254:9: note: in expansion of macro '_enter'
     254 |         _enter("e=%llx o=%lx l=%lx", end, offset, len);
         |         ^~~~~~
   fs/netfs/internal.h:270:36: warning: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'size_t' {aka 'unsigned int'} [-Wformat=]
     270 | #define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
         |                                    ^~~~~~~~~
   include/linux/printk.h:418:25: note: in definition of macro 'printk_index_wrap'
     418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
         |                         ^~~~
   include/linux/printk.h:132:17: note: in expansion of macro 'printk'
     132 |                 printk(fmt, ##__VA_ARGS__);             \
         |                 ^~~~~~
   fs/netfs/internal.h:270:26: note: in expansion of macro 'no_printk'
     270 | #define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
         |                          ^~~~~~~~~
   fs/netfs/buffered_write.c:254:9: note: in expansion of macro '_enter'
     254 |         _enter("e=%llx o=%lx l=%lx", end, offset, len);
         |         ^~~~~~
   fs/netfs/buffered_write.c: In function 'netfs_perform_write':
>> fs/netfs/buffered_write.c:618:58: error: 'struct netfs_i_context' has no member named 'cache'
     618 |                                 fscache_update_cookie(ctx->cache, NULL, &pos);
         |                                                          ^~


vim +618 fs/netfs/buffered_write.c

   460	
   461	/*
   462	 * Write data into a prereserved region of the pagecache attached to a netfs
   463	 * inode.
   464	 */
   465	static ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter)
   466	{
   467		struct netfs_dirty_region *spare_region = NULL;
   468		struct file *file = iocb->ki_filp;
   469		struct inode *inode = file_inode(file);
   470		struct netfs_i_context *ctx = netfs_i_context(inode);
   471		struct folio *folio;
   472		enum netfs_handle_nonuptodate nupt;
   473		ssize_t written = 0, ret;
   474		loff_t i_size, pos = iocb->ki_pos;
   475		bool always_fill = false;
   476		bool locked = false;
   477	
   478		MA_STATE(mas, &ctx->dirty_regions, pos / PAGE_SIZE,
   479			 (pos + iov_iter_count(iter) - 1) / PAGE_SIZE);
   480	
   481		ret = ctx->ops->validate_for_write(inode, file);
   482		if (ret < 0)
   483			return ret;
   484	
   485		do {
   486			size_t plen;
   487			size_t offset;	/* Offset into pagecache folio */
   488			size_t bytes;	/* Bytes to write to folio */
   489			size_t copied;	/* Bytes copied from user */
   490	
   491			folio = netfs_grab_folio_for_write(file->f_mapping,
   492							   pos / PAGE_SIZE,
   493							   iov_iter_count(iter));
   494			if (!folio) {
   495				ret = -ENOMEM;
   496				goto out;
   497			}
   498	
   499			plen = folio_size(folio);
   500			offset = pos - folio_file_pos(folio);
   501			bytes = min_t(size_t, plen - offset, iov_iter_count(iter));
   502			locked = true;
   503	
   504			if (!folio_test_uptodate(folio)) {
   505				folio_unlock(folio); /* Avoid deadlocking fault-in */
   506				locked = false;
   507			}
   508	
   509			/* Bring in the user page that we will copy from _first_.
   510			 * Otherwise there's a nasty deadlock on copying from the same
   511			 * page as we're writing to, without it being marked
   512			 * up-to-date.
   513			 *
   514			 * Not only is this an optimisation, but it is also required to
   515			 * check that the address is actually valid, when atomic
   516			 * usercopies are used, below.
   517			 */
   518			if (unlikely(fault_in_iov_iter_readable(iter, bytes))) {
   519				ret = -EFAULT;
   520				goto error_folio;
   521			}
   522	
   523			if (fatal_signal_pending(current)) {
   524				ret = -EINTR;
   525				goto error_folio;
   526			}
   527	
   528			if (!locked) {
   529				ret = folio_lock_killable(folio);
   530				if (ret < 0)
   531					goto error_folio;
   532			}
   533	
   534	redo_prefetch:
   535			/* See if we need to prefetch the area we're going to modify.
   536			 * We need to do this before we get a lock on the folio in case
   537			 * there's more than one writer competing for the same cache
   538			 * block.
   539			 */
   540			nupt = netfs_handle_nonuptodate_folio(ctx, file, folio,
   541							      offset, bytes, always_fill);
   542			_debug("nupt %u", nupt);
   543			switch (nupt) {
   544			case NETFS_JUST_PREFETCH:
   545				ret = netfs_prefetch_for_write(file, folio, bytes);
   546				if (ret < 0) {
   547					_debug("prefetch = %zd", ret);
   548					goto error_folio;
   549				}
   550				nupt = NETFS_FOLIO_IS_UPTODATE;
   551				fallthrough;
   552			case NETFS_FOLIO_IS_UPTODATE:
   553				break;
   554			case NETFS_MODIFY_AND_CLEAR:
   555				zero_user_segment(&folio->page, 0, offset);
   556				break;
   557			case NETFS_WHOLE_FOLIO_MODIFY:
   558				break;
   559			}
   560	
   561			/* Preallocate the space we need in the dirty region list. */
   562			ret = mas_expected_entries(&mas, 1);
   563			if (ret < 0)
   564				goto error_folio;
   565	
   566			if (!spare_region) {
   567				spare_region = netfs_alloc_dirty_region();
   568				if (IS_ERR(spare_region)) {
   569					ret = PTR_ERR(spare_region);
   570					spare_region = NULL;
   571					goto error_folio;
   572				}
   573			}
   574	
   575			if (mapping_writably_mapped(folio_file_mapping(folio)))
   576				flush_dcache_folio(folio);
   577			copied = copy_folio_from_iter_atomic(folio, offset, bytes, iter);
   578			flush_dcache_folio(folio);
   579	
   580			/*  Deal with a (partially) failed copy */
   581			if (!folio_test_uptodate(folio)) {
   582				if (copied == 0) {
   583					ret = -EFAULT;
   584					goto error_folio;
   585				}
   586				if (copied < bytes) {
   587					iov_iter_revert(iter, copied);
   588					always_fill = true;
   589					goto redo_prefetch;
   590				}
   591				switch (nupt) {
   592				case NETFS_JUST_PREFETCH:
   593				case NETFS_FOLIO_IS_UPTODATE:
   594					/* We have the folio locked, so it really ought
   595					 * to be uptodate.
   596					 */
   597					WARN(true, "Locked folio %lx became non-uptodate\n",
   598					     folio_index(folio));
   599					ret = -EIO;
   600					goto error_folio;
   601				case NETFS_MODIFY_AND_CLEAR:
   602					zero_user_segment(&folio->page, offset + copied, plen);
   603					fallthrough;
   604				case NETFS_WHOLE_FOLIO_MODIFY:
   605					folio_mark_uptodate(folio);
   606					break;
   607				}
   608			}
   609	
   610			/* Update the inode size if we moved the EOF marker */
   611			pos += copied;
   612			i_size = i_size_read(inode);
   613			if (pos > i_size) {
   614				if (ctx->ops->update_i_size) {
   615					ctx->ops->update_i_size(inode, pos);
   616				} else {
   617					i_size_write(inode, pos);
 > 618					fscache_update_cookie(ctx->cache, NULL, &pos);
   619				}
   620			}
   621	
   622			netfs_commit_folio(ctx, file, &spare_region, &mas,
   623					   folio, offset, copied);
   624	
   625			folio_mark_dirty(folio);
   626			folio_unlock(folio);
   627			folio_put(folio);
   628			folio = NULL;
   629	
   630			cond_resched();
   631	
   632			written += copied;
   633	
   634			balance_dirty_pages_ratelimited(file->f_mapping);
   635		} while (iov_iter_count(iter));
   636	
   637	out:
   638		if (likely(written)) {
   639			netfs_commit_region(ctx, &mas, iocb->ki_pos, written);
   640	
   641			iocb->ki_pos += written;
   642	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-22 22:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-22 22:30 [ammarfaizi2-block:dhowells/linux-fs/netfs-maple 35/44] fs/netfs/buffered_write.c:618:58: error: 'struct netfs_i_context' has no member named 'cache' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.