Message ID | 20220214174403.4147994-6-shr@fb.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support sync buffered writes for io-uring | expand |
Hi Stefan, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on f1baf68e1383f6ed93eb9cff2866d46562607a43] url: https://github.com/0day-ci/linux/commits/Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908 base: f1baf68e1383f6ed93eb9cff2866d46562607a43 config: i386-randconfig-a016-20220214 (https://download.01.org/0day-ci/archive/20220215/202202150646.hLANces3-lkp@intel.com/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/e8b24c1ab111c127cbe1daaac3b607c626fb03a8 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908 git checkout e8b24c1ab111c127cbe1daaac3b607c626fb03a8 # save the config file to linux build tree mkdir build_dir make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> fs/buffer.c:805:21: warning: no previous prototype for '__alloc_page_buffers' [-Wmissing-prototypes] 805 | struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, | ^~~~~~~~~~~~~~~~~~~~ vim +/__alloc_page_buffers +805 fs/buffer.c 804 > 805 struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, 806 gfp_t gfp) 807 { 808 struct buffer_head *bh, *head; 809 long offset; 810 struct mem_cgroup *memcg, *old_memcg; 811 812 /* The page lock pins the memcg */ 813 memcg = page_memcg(page); 814 old_memcg = set_active_memcg(memcg); 815 816 head = NULL; 817 offset = PAGE_SIZE; 818 while ((offset -= size) >= 0) { 819 bh = alloc_buffer_head(gfp); 820 if (!bh) 821 goto no_grow; 822 823 bh->b_this_page = head; 824 bh->b_blocknr = -1; 825 head = bh; 826 827 bh->b_size = size; 828 829 /* Link the buffer to its page */ 830 set_bh_page(bh, page, offset); 831 } 832 out: 833 set_active_memcg(old_memcg); 834 return head; 835 /* 836 * In case anything failed, we just free everything we got. 837 */ 838 no_grow: 839 if (head) { 840 do { 841 bh = head; 842 head = head->b_this_page; 843 free_buffer_head(bh); 844 } while (head); 845 } 846 847 goto out; 848 } 849 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Stefan, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on f1baf68e1383f6ed93eb9cff2866d46562607a43] url: https://github.com/0day-ci/linux/commits/Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908 base: f1baf68e1383f6ed93eb9cff2866d46562607a43 config: arm-s5pv210_defconfig (https://download.01.org/0day-ci/archive/20220215/202202150743.R5ymlf5z-lkp@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project ea071884b0cc7210b3cc5fe858f0e892a779a23b) 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 # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/0day-ci/linux/commit/e8b24c1ab111c127cbe1daaac3b607c626fb03a8 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908 git checkout e8b24c1ab111c127cbe1daaac3b607c626fb03a8 # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> fs/buffer.c:805:21: warning: no previous prototype for function '__alloc_page_buffers' [-Wmissing-prototypes] struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, ^ fs/buffer.c:805:1: note: declare 'static' if the function is not intended to be used outside of this translation unit struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, ^ static 1 warning generated. vim +/__alloc_page_buffers +805 fs/buffer.c 804 > 805 struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, 806 gfp_t gfp) 807 { 808 struct buffer_head *bh, *head; 809 long offset; 810 struct mem_cgroup *memcg, *old_memcg; 811 812 /* The page lock pins the memcg */ 813 memcg = page_memcg(page); 814 old_memcg = set_active_memcg(memcg); 815 816 head = NULL; 817 offset = PAGE_SIZE; 818 while ((offset -= size) >= 0) { 819 bh = alloc_buffer_head(gfp); 820 if (!bh) 821 goto no_grow; 822 823 bh->b_this_page = head; 824 bh->b_blocknr = -1; 825 head = bh; 826 827 bh->b_size = size; 828 829 /* Link the buffer to its page */ 830 set_bh_page(bh, page, offset); 831 } 832 out: 833 set_active_memcg(old_memcg); 834 return head; 835 /* 836 * In case anything failed, we just free everything we got. 837 */ 838 no_grow: 839 if (head) { 840 do { 841 bh = head; 842 head = head->b_this_page; 843 free_buffer_head(bh); 844 } while (head); 845 } 846 847 goto out; 848 } 849 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Stefan,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on f1baf68e1383f6ed93eb9cff2866d46562607a43]
url: https://github.com/0day-ci/linux/commits/Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908
base: f1baf68e1383f6ed93eb9cff2866d46562607a43
config: i386-randconfig-s002-20220214 (https://download.01.org/0day-ci/archive/20220215/202202151030.Z3rVrN17-lkp@intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://github.com/0day-ci/linux/commit/e8b24c1ab111c127cbe1daaac3b607c626fb03a8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Stefan-Roesch/Support-sync-buffered-writes-for-io-uring/20220215-014908
git checkout e8b24c1ab111c127cbe1daaac3b607c626fb03a8
# save the config file to linux build tree
mkdir build_dir
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> fs/buffer.c:805:20: sparse: sparse: symbol '__alloc_page_buffers' was not declared. Should it be static?
Please review and possibly fold the followup patch.
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/fs/buffer.c b/fs/buffer.c index 6e6a69a12eed..a1986f95a39a 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -802,26 +802,13 @@ int remove_inode_buffers(struct inode *inode) return ret; } -/* - * Create the appropriate buffers when given a page for data area and - * the size of each buffer.. Use the bh->b_this_page linked list to - * follow the buffers created. Return NULL if unable to create more - * buffers. - * - * The retry flag is used to differentiate async IO (paging, swapping) - * which may not fail from ordinary buffer allocations. - */ -struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size, - bool retry) +struct buffer_head *__alloc_page_buffers(struct page *page, unsigned long size, + gfp_t gfp) { struct buffer_head *bh, *head; - gfp_t gfp = GFP_NOFS | __GFP_ACCOUNT; long offset; struct mem_cgroup *memcg, *old_memcg; - if (retry) - gfp |= __GFP_NOFAIL; - /* The page lock pins the memcg */ memcg = page_memcg(page); old_memcg = set_active_memcg(memcg); @@ -859,6 +846,26 @@ struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size, goto out; } + +/* + * Create the appropriate buffers when given a page for data area and + * the size of each buffer.. Use the bh->b_this_page linked list to + * follow the buffers created. Return NULL if unable to create more + * buffers. + * + * The retry flag is used to differentiate async IO (paging, swapping) + * which may not fail from ordinary buffer allocations. + */ +struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size, + bool retry) +{ + gfp_t gfp = GFP_NOFS | __GFP_ACCOUNT; + + if (retry) + gfp |= __GFP_NOFAIL; + + return __alloc_page_buffers(page, size, gfp); +} EXPORT_SYMBOL_GPL(alloc_page_buffers); static inline void
This splits off the __alloc_page_buffers() function from the alloc_page_buffers_function(). In addition it adds a gfp_t parameter, so the caller can specify the allocation flags. Signed-off-by: Stefan Roesch <shr@fb.com> --- fs/buffer.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-)