From: kbuild test robot <lkp@intel.com>
To: Kent Overstreet <kent.overstreet@gmail.com>
Cc: kbuild-all@01.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk,
Kent Overstreet <kent.overstreet@gmail.com>
Subject: Re: [PATCH 2/2] fs: generic_file_buffered_read() now uses find_get_pages_contig
Date: Thu, 16 Aug 2018 22:56:59 +0800 [thread overview]
Message-ID: <201808162245.Bi71TOi2%fengguang.wu@intel.com> (raw)
In-Reply-To: <20180815232632.32548-3-kent.overstreet@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5099 bytes --]
Hi Kent,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v4.18 next-20180816]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Kent-Overstreet/generic_file_buffered_read-improvements/20180816-200515
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gnu-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
# save the attached .config to linux build tree
GCC_VERSION=7.2.0 make.cross ARCH=sparc64
All errors (new ones prefixed by >>):
mm/filemap.c: In function 'generic_file_buffered_read':
>> mm/filemap.c:2340:23: error: 'page' undeclared (first use in this function)
flush_dcache_page(page);
^~~~
mm/filemap.c:2340:23: note: each undeclared identifier is reported only once for each function it appears in
vim +/page +2340 mm/filemap.c
2253
2254 /**
2255 * generic_file_buffered_read - generic file read routine
2256 * @iocb: the iocb to read
2257 * @iter: data destination
2258 * @written: already copied
2259 *
2260 * This is a generic file read routine, and uses the
2261 * mapping->a_ops->readpage() function for the actual low-level stuff.
2262 *
2263 * This is really ugly. But the goto's actually try to clarify some
2264 * of the logic when it comes to error handling etc.
2265 */
2266 static ssize_t generic_file_buffered_read(struct kiocb *iocb,
2267 struct iov_iter *iter, ssize_t written)
2268 {
2269 struct file *filp = iocb->ki_filp;
2270 struct file_ra_state *ra = &filp->f_ra;
2271 struct address_space *mapping = filp->f_mapping;
2272 struct inode *inode = mapping->host;
2273 size_t orig_count = iov_iter_count(iter);
2274 struct page *pages[64];
2275 int i, pg_nr, error = 0;
2276 bool writably_mapped;
2277 loff_t isize, end_offset;
2278
2279 if (unlikely(iocb->ki_pos >= inode->i_sb->s_maxbytes))
2280 return 0;
2281 iov_iter_truncate(iter, inode->i_sb->s_maxbytes);
2282
2283 do {
2284 cond_resched();
2285
2286 i = 0;
2287 pg_nr = generic_file_buffered_read_get_pages(iocb, iter, pages,
2288 ARRAY_SIZE(pages));
2289 if (pg_nr < 0) {
2290 error = pg_nr;
2291 break;
2292 }
2293
2294 /*
2295 * i_size must be checked after we know the pages are Uptodate.
2296 *
2297 * Checking i_size after the check allows us to calculate
2298 * the correct value for "nr", which means the zero-filled
2299 * part of the page is not copied back to userspace (unless
2300 * another truncate extends the file - this is desired though).
2301 */
2302 isize = i_size_read(inode);
2303 if (unlikely(iocb->ki_pos >= isize))
2304 goto put_pages;
2305
2306 end_offset = min_t(loff_t, isize, iocb->ki_pos + iter->count);
2307
2308 while ((iocb->ki_pos >> PAGE_SHIFT) + pg_nr >
2309 (end_offset + PAGE_SIZE - 1) >> PAGE_SHIFT)
2310 put_page(pages[--pg_nr]);
2311
2312 /*
2313 * Once we start copying data, we don't want to be touching any
2314 * cachelines that might be contended:
2315 */
2316 writably_mapped = mapping_writably_mapped(mapping);
2317
2318 /*
2319 * When a sequential read accesses a page several times, only
2320 * mark it as accessed the first time.
2321 */
2322 if (iocb->ki_pos >> PAGE_SHIFT !=
2323 ra->prev_pos >> PAGE_SHIFT)
2324 mark_page_accessed(pages[0]);
2325 for (i = 1; i < pg_nr; i++)
2326 mark_page_accessed(pages[i]);
2327
2328 for (i = 0; i < pg_nr; i++) {
2329 unsigned offset = iocb->ki_pos & ~PAGE_MASK;
2330 unsigned bytes = min_t(loff_t, end_offset - iocb->ki_pos,
2331 PAGE_SIZE - offset);
2332 unsigned copied;
2333
2334 /*
2335 * If users can be writing to this page using arbitrary
2336 * virtual addresses, take care about potential aliasing
2337 * before reading the page on the kernel side.
2338 */
2339 if (writably_mapped)
> 2340 flush_dcache_page(page);
2341
2342 copied = copy_page_to_iter(pages[i], offset, bytes, iter);
2343
2344 iocb->ki_pos += copied;
2345 ra->prev_pos = iocb->ki_pos;
2346
2347 if (copied < bytes) {
2348 error = -EFAULT;
2349 break;
2350 }
2351 }
2352 put_pages:
2353 for (i = 0; i < pg_nr; i++)
2354 put_page(pages[i]);
2355 } while (iov_iter_count(iter) && iocb->ki_pos < isize && !error);
2356
2357 file_accessed(filp);
2358 written += orig_count - iov_iter_count(iter);
2359
2360 return written ? written : error;
2361 }
2362
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 54830 bytes --]
next prev parent reply other threads:[~2018-08-16 17:56 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-15 23:26 [PATCH 0/2] generic_file_buffered_read improvements Kent Overstreet
2018-08-15 23:26 ` [PATCH 1/2] fs: Break generic_file_buffered_read up into multiple functions Kent Overstreet
2018-08-15 23:26 ` [PATCH 2/2] fs: generic_file_buffered_read() now uses find_get_pages_contig Kent Overstreet
2018-08-16 14:56 ` kbuild test robot [this message]
2018-08-16 7:57 ` [PATCH 0/2] generic_file_buffered_read improvements Carlos Maiolino
2018-08-16 10:05 ` Kent Overstreet
2018-08-17 22:42 ` Dave Chinner
2020-06-10 0:10 [PATCH 0/2] generic_file_buffered_read() refactoring & optimization Kent Overstreet
2020-06-10 0:10 ` [PATCH 2/2] fs: generic_file_buffered_read() now uses find_get_pages_contig Kent Overstreet
2020-06-10 0:47 ` Matthew Wilcox
2020-06-10 1:08 ` Kent Overstreet
2020-06-10 1:38 ` Matthew Wilcox
2020-06-10 1:46 ` Kent Overstreet
2020-10-17 20:10 [PATCH 0/2] generic_file_buffered_read() refactoring, perf improvements Kent Overstreet
2020-10-17 20:10 ` [PATCH 2/2] fs: generic_file_buffered_read() now uses find_get_pages_contig Kent Overstreet
2020-10-20 14:47 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201808162245.Bi71TOi2%fengguang.wu@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@01.org \
--cc=kent.overstreet@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).