Re: [PATCH] squashfs: cache partial compressed blocks

From: kernel test robot
Date: Fri May 12 2023 - 04:54:56 EST


Hi Vincent,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 457391b0380335d5e9a5babdec90ac53928b23b4]

url: https://github.com/intel-lab-lkp/linux/commits/Vincent-Whitchurch/squashfs-cache-partial-compressed-blocks/20230512-143553
base: 457391b0380335d5e9a5babdec90ac53928b23b4
patch link: https://lore.kernel.org/r/20230510-squashfs-cache-v1-1-3b6bb0e7d952%40axis.com
patch subject: [PATCH] squashfs: cache partial compressed blocks
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20230512/202305121615.T6PJo2hI-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 12.1.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/intel-lab-lkp/linux/commit/3ca22c93f1faf376ecf133f84d0148497284366a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Vincent-Whitchurch/squashfs-cache-partial-compressed-blocks/20230512-143553
git checkout 3ca22c93f1faf376ecf133f84d0148497284366a
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash fs/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202305121615.T6PJo2hI-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> fs/squashfs/block.c:168:5: warning: no previous prototype for 'squashfs_bio_read' [-Wmissing-prototypes]
168 | int squashfs_bio_read(struct super_block *sb, u64 index, int length,
| ^~~~~~~~~~~~~~~~~


vim +/squashfs_bio_read +168 fs/squashfs/block.c

167
> 168 int squashfs_bio_read(struct super_block *sb, u64 index, int length,
169 struct bio **biop, int *block_offset)
170 {
171 struct squashfs_sb_info *msblk = sb->s_fs_info;
172 struct inode *cache_inode = msblk->cache_inode;
173 struct address_space *cache_mapping = cache_inode ? cache_inode->i_mapping : NULL;
174 const u64 read_start = round_down(index, msblk->devblksize);
175 const sector_t block = read_start >> msblk->devblksize_log2;
176 const u64 read_end = round_up(index + length, msblk->devblksize);
177 const sector_t block_end = read_end >> msblk->devblksize_log2;
178 int offset = read_start - round_down(index, PAGE_SIZE);
179 int total_len = (block_end - block) << msblk->devblksize_log2;
180 const int page_count = DIV_ROUND_UP(total_len + offset, PAGE_SIZE);
181 int error, i;
182 struct bio *bio;
183
184 bio = bio_kmalloc(page_count, GFP_NOIO);
185 if (!bio)
186 return -ENOMEM;
187 bio_init(bio, sb->s_bdev, bio->bi_inline_vecs, page_count, REQ_OP_READ);
188 bio->bi_iter.bi_sector = block * (msblk->devblksize >> SECTOR_SHIFT);
189
190 for (i = 0; i < page_count; ++i) {
191 unsigned int len =
192 min_t(unsigned int, PAGE_SIZE - offset, total_len);
193 struct page *page = NULL;
194
195 if (cache_mapping)
196 page = find_get_page(cache_mapping,
197 read_start + i * PAGE_SIZE);
198 if (!page)
199 page = alloc_page(GFP_NOIO);
200
201 if (!page) {
202 error = -ENOMEM;
203 goto out_free_bio;
204 }
205
206 if (cache_mapping) {
207 /*
208 * Use the __ version to avoid merging since we need
209 * each page to be separate when we check for and avoid
210 * cached pages.
211 */
212 __bio_add_page(bio, page, len, offset);
213 } else if (!bio_add_page(bio, page, len, offset)) {
214 error = -EIO;
215 goto out_free_bio;
216 }
217 offset = 0;
218 total_len -= len;
219 }
220
221 if (cache_mapping)
222 error = squashfs_bio_read_cached(bio, cache_mapping, index,
223 length, read_start, read_end,
224 page_count);
225 else
226 error = submit_bio_wait(bio);
227 if (error)
228 goto out_free_bio;
229
230 *biop = bio;
231 *block_offset = index & ((1 << msblk->devblksize_log2) - 1);
232 return 0;
233
234 out_free_bio:
235 bio_free_pages(bio);
236 bio_uninit(bio);
237 kfree(bio);
238 return error;
239 }
240

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests