return 0;
 }
 
-static void restart_ctx(struct dir_context *ctx)
-{
-       ctx->pos = 0;
-}
-
 static int verify_info_level(int info_level)
 {
        switch (info_level) {
        if (srch_flag & SMB2_REOPEN || srch_flag & SMB2_RESTART_SCANS) {
                ksmbd_debug(SMB, "Restart directory scan\n");
                generic_file_llseek(dir_fp->filp, 0, SEEK_SET);
-               restart_ctx(&dir_fp->readdir_data.ctx);
        }
 
        memset(&d_info, 0, sizeof(struct ksmbd_dir_info));
         */
        if (!d_info.out_buf_len && !d_info.num_entry)
                goto no_buf_len;
-       if (rc == 0)
-               restart_ctx(&dir_fp->readdir_data.ctx);
-       if (rc == -ENOSPC)
+       if (rc > 0 || rc == -ENOSPC)
                rc = 0;
-       if (rc)
+       else if (rc)
                goto err_out;
 
        d_info.wptr = d_info.rptr;
                rsp->hdr.Status = STATUS_NO_MEMORY;
        else if (rc == -EFAULT)
                rsp->hdr.Status = STATUS_INVALID_INFO_CLASS;
+       else if (rc == -EIO)
+               rsp->hdr.Status = STATUS_FILE_CORRUPT_ERROR;
        if (!rsp->hdr.Status)
                rsp->hdr.Status = STATUS_UNEXPECTED_IO_ERROR;