Re: [PATCH] ceph: clear page dirty before invalidate page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2019-07-23 at 15:55 +0800, erqi chen wrote:
> From: Erqi Chen <chenerqi@xxxxxxxxx>
> 
> clear_page_dirty_for_io(page) before mapping->a_ops->invalidatepage().
> invalidatepage() clears page's private flag, if dirty flag is not
> cleared, the page may cause BUG_ON failure in ceph_set_page_dirty().
> 
> Fixes: https://tracker.ceph.com/issues/40862
> Signed-off-by: Erqi Chen chenerqi@xxxxxxxxx
> ---
>  fs/ceph/addr.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
> index e078cc5..5ad63bf 100644
> --- a/fs/ceph/addr.c
> +++ b/fs/ceph/addr.c
> @@ -914,9 +914,11 @@ static int ceph_writepages_start(struct
> address_space *mapping,
>                                 dout("%p page eof %llu\n",
>                                      page, ceph_wbc.i_size);
>                                 if (ceph_wbc.size_stable ||
> -                                   page_offset(page) >= i_size_read(inode))
> -                                       mapping->a_ops->invalidatepage(page,
> -                                                               0, PAGE_SIZE);
> +                                   page_offset(page) >= i_size_read(inode)) {
> +                                   if (clear_page_dirty_for_io(page))
> +                                       mapping->a_ops->invalidatepage(page,
> +                                                               0, PAGE_SIZE);

It might be cleaner to just add:

    && clear_page_dirty_for_io(page)

to the existing if statement -- that will reduce the level of
indentation (which is already pretty far here).

> +                               }
>                                 unlock_page(page);
>                                 continue;
>                         }
> --
> 1.8.3.1

This patch looks good at first glance, but there is some whitespace
damage here and it does not apply. It looks like you may have cut and
pasted it into an email? Could you resend it? Maybe look into using
the git-send-email script to send it.

Thanks,
-- 
Jeff Layton <jlayton@xxxxxxxxxx>




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux