Hi Gao,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc4 next-20190816]
[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/Gao-Xiang/staging-erofs-fix-an-error-handling-in-erofs_readdir/20190818-191344
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.4.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.4.0 make.cross ARCH=sparc64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   drivers/staging//erofs/dir.c: In function 'erofs_readdir':
>> drivers/staging//erofs/dir.c:110:11: error: 'EFSCORRUPTED' undeclared (first 
>> use in this function)
       err = -EFSCORRUPTED;
              ^~~~~~~~~~~~
   drivers/staging//erofs/dir.c:110:11: note: each undeclared identifier is 
reported only once for each function it appears in

vim +/EFSCORRUPTED +110 drivers/staging//erofs/dir.c

    85  
    86  static int erofs_readdir(struct file *f, struct dir_context *ctx)
    87  {
    88          struct inode *dir = file_inode(f);
    89          struct address_space *mapping = dir->i_mapping;
    90          const size_t dirsize = i_size_read(dir);
    91          unsigned int i = ctx->pos / EROFS_BLKSIZ;
    92          unsigned int ofs = ctx->pos % EROFS_BLKSIZ;
    93          int err = 0;
    94          bool initial = true;
    95  
    96          while (ctx->pos < dirsize) {
    97                  struct page *dentry_page;
    98                  struct erofs_dirent *de;
    99                  unsigned int nameoff, maxsize;
   100  
   101                  dentry_page = read_mapping_page(mapping, i, NULL);
   102                  if (dentry_page == ERR_PTR(-ENOMEM)) {
   103                          errln("no memory to readdir of logical block %u 
of nid %llu",
   104                                i, EROFS_V(dir)->nid);
   105                          err = -ENOMEM;
   106                          break;
   107                  } else if (IS_ERR(dentry_page)) {
   108                          errln("fail to readdir of logical block %u of 
nid %llu",
   109                                i, EROFS_V(dir)->nid);
 > 110                          err = -EFSCORRUPTED;
   111                          break;
   112                  }
   113  
   114                  de = (struct erofs_dirent *)kmap(dentry_page);
   115  
   116                  nameoff = le16_to_cpu(de->nameoff);
   117  
   118                  if (unlikely(nameoff < sizeof(struct erofs_dirent) ||
   119                               nameoff >= PAGE_SIZE)) {
   120                          errln("%s, invalid de[0].nameoff %u",
   121                                __func__, nameoff);
   122  
   123                          err = -EIO;
   124                          goto skip_this;
   125                  }
   126  
   127                  maxsize = min_t(unsigned int,
   128                                  dirsize - ctx->pos + ofs, PAGE_SIZE);
   129  
   130                  /* search dirents at the arbitrary position */
   131                  if (unlikely(initial)) {
   132                          initial = false;
   133  
   134                          ofs = roundup(ofs, sizeof(struct erofs_dirent));
   135                          if (unlikely(ofs >= nameoff))
   136                                  goto skip_this;
   137                  }
   138  
   139                  err = erofs_fill_dentries(ctx, de, &ofs, nameoff, 
maxsize);
   140  skip_this:
   141                  kunmap(dentry_page);
   142  
   143                  put_page(dentry_page);
   144  
   145                  ctx->pos = blknr_to_addr(i) + ofs;
   146  
   147                  if (unlikely(err))
   148                          break;
   149                  ++i;
   150                  ofs = 0;
   151          }
   152          return err < 0 ? err : 0;
   153  }
   154  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to