staging: erofs: fix an error handling in erofs_readdir()
[sfrench/cifs-2.6.git] / drivers / staging / erofs / dir.c
index 5f38382637e6cbcbdf5b9ea1350506cd9466368c..77ef856df9f3a5f7caa9fddf95599af697759aea 100644 (file)
@@ -82,8 +82,15 @@ static int erofs_readdir(struct file *f, struct dir_context *ctx)
                unsigned int nameoff, maxsize;
 
                dentry_page = read_mapping_page(mapping, i, NULL);
-               if (IS_ERR(dentry_page))
-                       continue;
+               if (dentry_page == ERR_PTR(-ENOMEM)) {
+                       err = -ENOMEM;
+                       break;
+               } else if (IS_ERR(dentry_page)) {
+                       errln("fail to readdir of logical block %u of nid %llu",
+                             i, EROFS_V(dir)->nid);
+                       err = -EFSCORRUPTED;
+                       break;
+               }
 
                de = (struct erofs_dirent *)kmap(dentry_page);