In case of an error set the page error flag and clear the up-to-date
flag.
If the read was successful clear the error flag unconditionally.

Signed-off-by: Richard Weinberger <rich...@nod.at>
---
 fs/hostfs/hostfs_kern.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
index cf80a30..f154747 100644
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
@@ -445,24 +445,26 @@ static int hostfs_readpage(struct file *file, struct page 
*page)
 {
        char *buffer;
        long long start;
-       int bytes_read, ret;
+       int bytes_read, ret = 0;
 
        start = (long long) page->index << PAGE_CACHE_SHIFT;
        buffer = kmap(page);
        bytes_read = read_file(FILE_HOSTFS_I(file)->fd, &start, buffer,
                        PAGE_CACHE_SIZE);
        if (bytes_read < 0) {
+               ClearPageUptodate(page);
+               SetPageError(page);
                ret = bytes_read;
                goto out;
        }
 
        memset(buffer + bytes_read, 0, PAGE_CACHE_SIZE - bytes_read);
 
-       flush_dcache_page(page);
+       ClearPageError(page);
        SetPageUptodate(page);
-       if (PageError(page)) ClearPageError(page);
-       ret = 0;
+
  out:
+       flush_dcache_page(page);
        kunmap(page);
        unlock_page(page);
        return ret;
-- 
2.3.2


------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to