Whamcloud - gitweb
LU-13493 llite: check if page truncated in ll_write_begin() 25/38425/2
authorWang Shilong <wshilong@ddn.com>
Thu, 30 Apr 2020 02:27:06 +0000 (10:27 +0800)
committerOleg Drokin <green@whamcloud.com>
Wed, 20 May 2020 08:25:36 +0000 (08:25 +0000)
commit985de582849dfc25ccbf2ef6ea923f984ad7fd89
tree5a0ced518c9a083605e797458996462bfdf6d891
parent71ca66bcd9c3a08edfbb67c9711c17428f599bcf
LU-13493 llite: check if page truncated in ll_write_begin()

See following function flows:

CPU0 CPU1
|->grab_cache_page_nowait
  |->find_get_page
    |->__find_get_page (page unlocked)
|->truncate page
   |->trylock_page —->page might has been truncated after this.

So it is possible that page might has been truncated after
grab_cache_page_nowait() return even page lock is held.

We need check wheather vmpage->mapping change in ll_write_begin()
otherwise, we will have truncated page with NULL mapping, which
will trigger assertions in vvp_set_pagevec_dirty().

This patch also fix assertion string doesn't end in newline.

Change-Id: I46e14f560378a39d8ae1353d60cc49c0f0b241c0
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Reviewed-on: https://review.whamcloud.com/38425
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Bobi Jam <bobijam@hotmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/rw26.c
lustre/llite/vvp_io.c