Hi Hans, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v4.16 next-20180329] [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/Hans-de-Goede/fs-Add-VirtualBox-guest-shared-folder-vboxsf-support/20180331-001843 config: x86_64-randconfig-g0-04030108 (attached as .config) compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): fs//vboxsf/file.c: In function 'sf_readpage': >> fs//vboxsf/file.c:236:2: error: implicit declaration of function 'page_offset' [-Werror=implicit-function-declaration] loff_t off = page_offset(page); ^ >> fs//vboxsf/file.c:241:2: error: implicit declaration of function 'kmap' [-Werror=implicit-function-declaration] buf = kmap(page); ^ >> fs//vboxsf/file.c:241:6: warning: assignment makes pointer from integer without a cast buf = kmap(page); ^ >> fs//vboxsf/file.c:246:3: error: implicit declaration of function 'flush_dcache_page' [-Werror=implicit-function-declaration] flush_dcache_page(page); ^ >> fs//vboxsf/file.c:247:3: error: implicit declaration of function 'SetPageUptodate' [-Werror=implicit-function-declaration] SetPageUptodate(page); ^ >> fs//vboxsf/file.c:249:3: error: implicit declaration of function 'SetPageError' [-Werror=implicit-function-declaration] SetPageError(page); ^ >> fs//vboxsf/file.c:252:2: error: implicit declaration of function 'kunmap' [-Werror=implicit-function-declaration] kunmap(page); ^ >> fs//vboxsf/file.c:253:2: error: implicit declaration of function 'unlock_page' [-Werror=implicit-function-declaration] unlock_page(page); ^ fs//vboxsf/file.c: In function 'sf_writepage': fs//vboxsf/file.c:272:6: warning: assignment makes pointer from integer without a cast buf = kmap(page); ^ >> fs//vboxsf/file.c:277:3: error: implicit declaration of function 'ClearPageError' [-Werror=implicit-function-declaration] ClearPageError(page); ^ >> fs//vboxsf/file.c:281:3: error: implicit declaration of function 'ClearPageUptodate' [-Werror=implicit-function-declaration] ClearPageUptodate(page); ^ fs//vboxsf/file.c: In function 'sf_write_end': fs//vboxsf/file.c:300:6: warning: assignment makes pointer from integer without a cast buf = kmap(page); ^ >> fs//vboxsf/file.c:311:2: error: implicit declaration of function 'PageUptodate' [-Werror=implicit-function-declaration] if (!PageUptodate(page) && nwritten == PAGE_SIZE) ^ >> fs//vboxsf/file.c:320:2: error: implicit declaration of function 'put_page' [-Werror=implicit-function-declaration] put_page(page); ^ fs//vboxsf/file.c: At top level: >> fs//vboxsf/file.c:328:20: error: '__set_page_dirty_nobuffers' undeclared here (not in a function) .set_page_dirty = __set_page_dirty_nobuffers, ^ cc1: some warnings being treated as errors vim +/page_offset +236 fs//vboxsf/file.c 231 232 static int sf_readpage(struct file *file, struct page *page) 233 { 234 struct sf_glob_info *sf_g = GET_GLOB_INFO(file_inode(file)->i_sb); 235 struct sf_reg_info *sf_r = file->private_data; > 236 loff_t off = page_offset(page); 237 u32 nread = PAGE_SIZE; 238 u8 *buf; 239 int err; 240 > 241 buf = kmap(page); 242 243 err = vboxsf_read(sf_g->root, sf_r->handle, off, &nread, buf, false); 244 if (err == 0) { 245 memset(&buf[nread], 0, PAGE_SIZE - nread); > 246 flush_dcache_page(page); > 247 SetPageUptodate(page); 248 } else { > 249 SetPageError(page); 250 } 251 > 252 kunmap(page); > 253 unlock_page(page); 254 return err; 255 } 256 257 static int sf_writepage(struct page *page, struct writeback_control *wbc) 258 { 259 struct inode *inode = page->mapping->host; 260 struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); 261 struct sf_inode_info *sf_i = GET_INODE_INFO(inode); 262 struct sf_reg_info *sf_r = sf_i->file->private_data; 263 loff_t off = page_offset(page); 264 loff_t size = i_size_read(inode); 265 u32 nwrite = PAGE_SIZE; 266 u8 *buf; 267 int err; 268 269 if (off + PAGE_SIZE > size) 270 nwrite = size & ~PAGE_MASK; 271 > 272 buf = kmap(page); 273 err = vboxsf_write(sf_g->root, sf_r->handle, off, &nwrite, buf, false); 274 kunmap(page); 275 276 if (err == 0) { > 277 ClearPageError(page); 278 /* mtime changed */ 279 sf_i->force_restat = 1; 280 } else { > 281 ClearPageUptodate(page); 282 } 283 284 unlock_page(page); 285 return err; 286 } 287 288 int sf_write_end(struct file *file, struct address_space *mapping, loff_t pos, 289 unsigned int len, unsigned int copied, struct page *page, 290 void *fsdata) 291 { 292 struct inode *inode = mapping->host; 293 struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); 294 struct sf_reg_info *sf_r = file->private_data; 295 unsigned int from = pos & ~PAGE_MASK; 296 u32 nwritten = len; 297 u8 *buf; 298 int err; 299 > 300 buf = kmap(page); 301 err = vboxsf_write(sf_g->root, sf_r->handle, pos, &nwritten, 302 buf + from, false); 303 kunmap(page); 304 305 if (err) 306 goto out; 307 308 /* mtime changed */ 309 GET_INODE_INFO(inode)->force_restat = 1; 310 > 311 if (!PageUptodate(page) && nwritten == PAGE_SIZE) 312 SetPageUptodate(page); 313 314 pos += nwritten; 315 if (pos > inode->i_size) 316 i_size_write(inode, pos); 317 318 out: 319 unlock_page(page); > 320 put_page(page); 321 322 return err; 323 } 324 325 const struct address_space_operations vboxsf_reg_aops = { 326 .readpage = sf_readpage, 327 .writepage = sf_writepage, > 328 .set_page_dirty = __set_page_dirty_nobuffers, 329 .write_begin = simple_write_begin, 330 .write_end = sf_write_end, 331 }; 332 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip