When ll_page_mkwrite() detects page's covering lock is being canceled,
it should write the page back before invalidating it. Otherwise, it
will cause data corruption.
Signed-off-by: Jinshan Xiong <jinshan.xiong@whamcloud.com>
Change-Id: I345728daacf50edc154cd434dea392410f8cc782
Reviewed-on: http://review.whamcloud.com/2243
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
* This piece of code is definitely needed for RHEL5,
* otherwise, SIGBUS will be wrongly returned to
* applications. */
- ll_invalidate_page(vmpage);
- LASSERT(vmpage->mapping == NULL);
+ write_one_page(vmpage, 1);
+ lock_page(vmpage);
+ if (vmpage->mapping != NULL) {
+ ll_invalidate_page(vmpage);
+ LASSERT(vmpage->mapping == NULL);
+ }
unlock_page(vmpage);
} else if (!PageDirty(vmpage)) {
/* race, the page has been cleaned by ptlrpcd after
run_test 220 "preallocated MDS objects still used if ENOSPC from OST"
test_221() {
- cp `which date` $MOUNT
+ dd if=`which date` of=$MOUNT/date oflag=sync
+ chmod +x $MOUNT/date
#define OBD_FAIL_LLITE_FAULT_TRUNC_RACE 0x1401
$LCTL set_param fail_loc=0x80001401