lkml.org 
[lkml]   [2014]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.5 66/96] ceph: Avoid data inconsistency due to d-cache aliasing in readpage()
    Date
    3.5.7.29 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Li Wang <liwang@ubuntukylin.com>

    commit 56f91aad69444d650237295f68c195b74d888d95 upstream.

    If the length of data to be read in readpage() is exactly
    PAGE_CACHE_SIZE, the original code does not flush d-cache
    for data consistency after finishing reading. This patches fixes
    this.

    Signed-off-by: Li Wang <liwang@ubuntukylin.com>
    Signed-off-by: Sage Weil <sage@inktank.com>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    fs/ceph/addr.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
    index 32ee086..95f0bef 100644
    --- a/fs/ceph/addr.c
    +++ b/fs/ceph/addr.c
    @@ -213,9 +213,13 @@ static int readpage_nounlock(struct file *filp, struct page *page)
    if (err < 0) {
    SetPageError(page);
    goto out;
    - } else if (err < PAGE_CACHE_SIZE) {
    + } else {
    + if (err < PAGE_CACHE_SIZE) {
    /* zero fill remainder of page */
    - zero_user_segment(page, err, PAGE_CACHE_SIZE);
    + zero_user_segment(page, err, PAGE_CACHE_SIZE);
    + } else {
    + flush_dcache_page(page);
    + }
    }
    SetPageUptodate(page);

    --
    1.8.3.2


    \
     
     \ /
      Last update: 2014-01-13 20:41    [W:4.201 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site