CC: [email protected]
BCC: [email protected]
CC: "GNU/Weeb Mailing List" <[email protected]>
CC: [email protected]
TO: David Howells <[email protected]>

tree:   https://github.com/ammarfaizi2/linux-block 
dhowells/linux-fs/netfs-linked-list
head:   22ecc2fcdab4616e624408911ec1d54644e82030
commit: ff509dc49891f934a7a774e277b87729018db753 [58/59] netfs: Use flush from 
afs_writeback
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-m001 
(https://download.01.org/0day-ci/archive/20220603/[email protected]/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
fs/netfs/buffered_flush.c:664 netfs_find_writeback_start() error: uninitialized 
symbol 'ret'.

vim +/ret +664 fs/netfs/buffered_flush.c

c403641768e0a37 David Howells 2021-06-29  547  
ff509dc49891f93 David Howells 2022-04-28  548  /*
ff509dc49891f93 David Howells 2022-04-28  549   * Pin the first folio of the 
region and lock it.  The folio is attached to the
ff509dc49891f93 David Howells 2022-04-28  550   * buffer xarray with markings 
indicating what we need to do to clean it up
ff509dc49891f93 David Howells 2022-04-28  551   * (redirty it, drop its 
refcount, etc.).
c403641768e0a37 David Howells 2021-06-29  552   */
ff509dc49891f93 David Howells 2022-04-28  553  static int 
netfs_find_writeback_start(struct netfs_io_request *wreq,
ff509dc49891f93 David Howells 2022-04-28  554                                 
struct writeback_control *wbc,
ff509dc49891f93 David Howells 2022-04-28  555                                 
struct netfs_dirty_region *region,
ff509dc49891f93 David Howells 2022-04-28  556                                 
pgoff_t *_first, pgoff_t last)
ff509dc49891f93 David Howells 2022-04-28  557  {
ff509dc49891f93 David Howells 2022-04-28  558   struct folio *folio;
ff509dc49891f93 David Howells 2022-04-28  559   ssize_t ret;
ff509dc49891f93 David Howells 2022-04-28  560   bool dirty;
ff509dc49891f93 David Howells 2022-04-28  561   int skips = 0;
c403641768e0a37 David Howells 2021-06-29  562  
ff509dc49891f93 David Howells 2022-04-28  563   _enter("%lx,%lx,", *_first, 
last);
c403641768e0a37 David Howells 2021-06-29  564  
ff509dc49891f93 David Howells 2022-04-28  565  retry:
ff509dc49891f93 David Howells 2022-04-28  566   folio = 
__filemap_get_folio(wreq->mapping, *_first, 0, 0);
ff509dc49891f93 David Howells 2022-04-28  567   if (!folio) {
ff509dc49891f93 David Howells 2022-04-28  568           pr_warn("Folio %lx in 
dirty region D=%x not present\n",
ff509dc49891f93 David Howells 2022-04-28  569                   *_first, 
region->debug_id);
ff509dc49891f93 David Howells 2022-04-28  570           return 0;
c403641768e0a37 David Howells 2021-06-29  571   }
c403641768e0a37 David Howells 2021-06-29  572  
ff509dc49891f93 David Howells 2022-04-28  573   /* At this point we hold 
neither the i_pages lock nor the folio lock:
ff509dc49891f93 David Howells 2022-04-28  574    * the folio may be truncated 
or invalidated (changing folio->mapping to
ff509dc49891f93 David Howells 2022-04-28  575    * NULL), or even swizzled back 
from swapper_space to tmpfs file
ff509dc49891f93 David Howells 2022-04-28  576    * mapping
ff509dc49891f93 David Howells 2022-04-28  577    */
ff509dc49891f93 David Howells 2022-04-28  578   if (wbc->sync_mode != 
WB_SYNC_NONE) {
ff509dc49891f93 David Howells 2022-04-28  579           ret = 
folio_lock_killable(folio);
ff509dc49891f93 David Howells 2022-04-28  580           if (ret < 0) {
ff509dc49891f93 David Howells 2022-04-28  581                   
folio_put(folio);
ff509dc49891f93 David Howells 2022-04-28  582                   _leave(" = %zd 
[lock]", ret);
ff509dc49891f93 David Howells 2022-04-28  583                   return ret;
ff509dc49891f93 David Howells 2022-04-28  584           }
ff509dc49891f93 David Howells 2022-04-28  585   } else {
ff509dc49891f93 David Howells 2022-04-28  586           if 
(!folio_trylock(folio)) {
ff509dc49891f93 David Howells 2022-04-28  587                   
folio_put(folio);
ff509dc49891f93 David Howells 2022-04-28  588                   _leave(" = 0 
[trylock]");
ff509dc49891f93 David Howells 2022-04-28  589                   return 0;
ff509dc49891f93 David Howells 2022-04-28  590           }
ff509dc49891f93 David Howells 2022-04-28  591   }
c403641768e0a37 David Howells 2021-06-29  592  
ff509dc49891f93 David Howells 2022-04-28  593   /* A dirty region must fit 
exactly over a span of folios - there should
ff509dc49891f93 David Howells 2022-04-28  594    * be no partial folio coverage.
ff509dc49891f93 David Howells 2022-04-28  595    */
ff509dc49891f93 David Howells 2022-04-28  596   if (*_first < folio->index) {
ff509dc49891f93 David Howells 2022-04-28  597           pr_warn("Folio %lx 
extends before dirty region D=%x\n",
ff509dc49891f93 David Howells 2022-04-28  598                   *_first, 
region->debug_id);
ff509dc49891f93 David Howells 2022-04-28  599           goto skip;
c403641768e0a37 David Howells 2021-06-29  600   }
c403641768e0a37 David Howells 2021-06-29  601  
ff509dc49891f93 David Howells 2022-04-28  602   if (folio_mapping(folio) != 
wreq->mapping) {
ff509dc49891f93 David Howells 2022-04-28  603           pr_warn("Folio %lx in 
dirty region D=%x has no mapping set\n",
ff509dc49891f93 David Howells 2022-04-28  604                   *_first, 
region->debug_id);
ff509dc49891f93 David Howells 2022-04-28  605           goto skip;
ff509dc49891f93 David Howells 2022-04-28  606   }
c403641768e0a37 David Howells 2021-06-29  607  
ff509dc49891f93 David Howells 2022-04-28  608   /* Any folio we have to include 
must not already have writeback in
ff509dc49891f93 David Howells 2022-04-28  609    * progress otherwise we may 
get a race against old data being written.
c403641768e0a37 David Howells 2021-06-29  610    */
ff509dc49891f93 David Howells 2022-04-28  611   if 
(folio_test_writeback(folio)) {
ff509dc49891f93 David Howells 2022-04-28  612           folio_unlock(folio);
ff509dc49891f93 David Howells 2022-04-28  613           if (wbc->sync_mode != 
WB_SYNC_NONE)
ff509dc49891f93 David Howells 2022-04-28  614                   
folio_wait_writeback(folio);
ff509dc49891f93 David Howells 2022-04-28  615           else
ff509dc49891f93 David Howells 2022-04-28  616                   *_first = 
folio_next_index(folio);
ff509dc49891f93 David Howells 2022-04-28  617           folio_put(folio);
ff509dc49891f93 David Howells 2022-04-28  618           if (wbc->sync_mode == 
WB_SYNC_NONE) {
ff509dc49891f93 David Howells 2022-04-28  619                   if (skips >= 5 
|| need_resched())
ff509dc49891f93 David Howells 2022-04-28  620                           return 
0;
ff509dc49891f93 David Howells 2022-04-28  621                   skips++;
ff509dc49891f93 David Howells 2022-04-28  622           }
ff509dc49891f93 David Howells 2022-04-28  623           goto retry;
ff509dc49891f93 David Howells 2022-04-28  624   }
ff509dc49891f93 David Howells 2022-04-28  625  
ff509dc49891f93 David Howells 2022-04-28  626   /* A dirty region may include a 
number of folios that are clean in order
ff509dc49891f93 David Howells 2022-04-28  627    * to make up a minimum-sized 
unit for writing, e.g. if we need to
ff509dc49891f93 David Howells 2022-04-28  628    * compress a large block or 
write a bigger unit to the cache, so we
ff509dc49891f93 David Howells 2022-04-28  629    * need to keep track of that 
in case the write op fails.
ff509dc49891f93 David Howells 2022-04-28  630    */
ff509dc49891f93 David Howells 2022-04-28  631   dirty = 
folio_clear_dirty_for_io(folio);
ff509dc49891f93 David Howells 2022-04-28  632   
trace_netfs_folio_dirty(wreq->mapping, folio, netfs_folio_trace_store);
ff509dc49891f93 David Howells 2022-04-28  633   trace_netfs_wb_page(wreq, 
folio);
ff509dc49891f93 David Howells 2022-04-28  634   if 
(folio_start_writeback(folio)) {
ff509dc49891f93 David Howells 2022-04-28  635           kdebug ("start wb 
failed");
ff509dc49891f93 David Howells 2022-04-28  636           goto out_unlock;
ff509dc49891f93 David Howells 2022-04-28  637   }
ff509dc49891f93 David Howells 2022-04-28  638  
ff509dc49891f93 David Howells 2022-04-28  639   ret = 
netfs_xa_store_and_mark(&wreq->buffer, folio->index, folio,
ff509dc49891f93 David Howells 2022-04-28  640                                 
true, true, dirty, GFP_NOFS);
ff509dc49891f93 David Howells 2022-04-28  641   if (ret < 0) {
ff509dc49891f93 David Howells 2022-04-28  642           kdebug("oom store");
ff509dc49891f93 David Howells 2022-04-28  643           goto nomem;
ff509dc49891f93 David Howells 2022-04-28  644   }
ff509dc49891f93 David Howells 2022-04-28  645  
ff509dc49891f93 David Howells 2022-04-28  646   wreq->first = folio->index;
ff509dc49891f93 David Howells 2022-04-28  647   wreq->last  = 
folio_next_index(folio) - 1;
ff509dc49891f93 David Howells 2022-04-28  648   wreq->len   = folio_size(folio);
ff509dc49891f93 David Howells 2022-04-28  649   wreq->start = folio_pos(folio);
ff509dc49891f93 David Howells 2022-04-28  650   if (wreq->start >= 
wreq->i_size) {
ff509dc49891f93 David Howells 2022-04-28  651           pr_err("wreq->start >= 
wreq->i_size\n");
ff509dc49891f93 David Howells 2022-04-28  652           wreq->len = 0;
ff509dc49891f93 David Howells 2022-04-28  653           ret = -EIO;
ff509dc49891f93 David Howells 2022-04-28  654           goto out_unlock;
ff509dc49891f93 David Howells 2022-04-28  655   }
ff509dc49891f93 David Howells 2022-04-28  656   _debug("START %zx @%llx 
[%llx]", wreq->len, wreq->start, wreq->i_size);
ff509dc49891f93 David Howells 2022-04-28  657   if (wreq->len > wreq->i_size - 
wreq->start)
ff509dc49891f93 David Howells 2022-04-28  658           wreq->len = 
wreq->i_size - wreq->start;
ff509dc49891f93 David Howells 2022-04-28  659   *_first = wreq->last + 1;
ff509dc49891f93 David Howells 2022-04-28  660   ret = 1;
ff509dc49891f93 David Howells 2022-04-28  661  out_unlock:
ff509dc49891f93 David Howells 2022-04-28  662   folio_unlock(folio);
ff509dc49891f93 David Howells 2022-04-28  663   _leave(" = %zd [%lx]", ret, 
*_first);
ff509dc49891f93 David Howells 2022-04-28 @664   return ret;
ff509dc49891f93 David Howells 2022-04-28  665  
ff509dc49891f93 David Howells 2022-04-28  666  nomem:
ff509dc49891f93 David Howells 2022-04-28  667   if (dirty)
ff509dc49891f93 David Howells 2022-04-28  668           
folio_redirty_for_writepage(wbc, folio);
ff509dc49891f93 David Howells 2022-04-28  669   folio_end_writeback(folio);
ff509dc49891f93 David Howells 2022-04-28  670   goto out_unlock;
ff509dc49891f93 David Howells 2022-04-28  671  
ff509dc49891f93 David Howells 2022-04-28  672  skip:
ff509dc49891f93 David Howells 2022-04-28  673   BUG();
ff509dc49891f93 David Howells 2022-04-28  674  }
c403641768e0a37 David Howells 2021-06-29  675  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to