Hi Hans, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v5.0] [cannot apply to next-20190306] [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/20190307-231837 config: x86_64-randconfig-s4-03081928 (attached as .config) compiler: gcc-8 (Debian 8.3.0-2) 8.3.0 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:15: error: implicit declaration of function 'page_offset'; did you mean 'gate_offset'? [-Werror=implicit-function-declaration] loff_t off = page_offset(page); ^~~~~~~~~~~ gate_offset >> fs/vboxsf/file.c:241:8: error: implicit declaration of function 'kmap'; did you mean 'swap'? [-Werror=implicit-function-declaration] buf = kmap(page); ^~~~ swap >> fs/vboxsf/file.c:241:6: warning: assignment to 'u8 *' {aka 'unsigned char *'} from 'int' makes pointer from integer without a cast [-Wint-conversion] buf = kmap(page); ^ >> fs/vboxsf/file.c:246:3: error: implicit declaration of function 'flush_dcache_page'; did you mean 'write_cache_pages'? [-Werror=implicit-function-declaration] flush_dcache_page(page); ^~~~~~~~~~~~~~~~~ write_cache_pages >> 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'; did you mean 'alloc_page'? [-Werror=implicit-function-declaration] unlock_page(page); ^~~~~~~~~~~ alloc_page fs/vboxsf/file.c: In function 'sf_writepage': fs/vboxsf/file.c:272:6: warning: assignment to 'u8 *' {aka 'unsigned char *'} from 'int' makes pointer from integer without a cast [-Wint-conversion] buf = kmap(page); ^ >> fs/vboxsf/file.c:277:3: error: implicit declaration of function 'ClearPageError'; did you mean 'clear_page_erms'? [-Werror=implicit-function-declaration] ClearPageError(page); ^~~~~~~~~~~~~~ clear_page_erms >> 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 to 'u8 *' {aka 'unsigned char *'} from 'int' makes pointer from integer without a cast [-Wint-conversion] buf = kmap(page); ^ >> fs/vboxsf/file.c:313:7: error: implicit declaration of function 'PageUptodate' [-Werror=implicit-function-declaration] if (!PageUptodate(page) && nwritten == PAGE_SIZE) ^~~~~~~~~~~~ >> fs/vboxsf/file.c:322:2: error: implicit declaration of function 'put_page'; did you mean 'pgd_page'? [-Werror=implicit-function-declaration] put_page(page); ^~~~~~~~ pgd_page fs/vboxsf/file.c: At top level: >> fs/vboxsf/file.c:330:20: error: '__set_page_dirty_nobuffers' undeclared here (not in a function); did you mean 'irq_set_affinity_notifier'? .set_page_dirty = __set_page_dirty_nobuffers, ^~~~~~~~~~~~~~~~~~~~~~~~~~ irq_set_affinity_notifier cc1: some warnings being treated as errors vim +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 nwritten = 0; 307 goto out; 308 } 309 310 /* mtime changed */ 311 GET_INODE_INFO(inode)->force_restat = 1; 312 > 313 if (!PageUptodate(page) && nwritten == PAGE_SIZE) 314 SetPageUptodate(page); 315 316 pos += nwritten; 317 if (pos > inode->i_size) 318 i_size_write(inode, pos); 319 320 out: 321 unlock_page(page); > 322 put_page(page); 323 324 return nwritten; 325 } 326 327 const struct address_space_operations vboxsf_reg_aops = { 328 .readpage = sf_readpage, 329 .writepage = sf_writepage, > 330 .set_page_dirty = __set_page_dirty_nobuffers, 331 .write_begin = simple_write_begin, 332 .write_end = sf_write_end, 333 }; 334 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation