summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6d29658)
The check in ll_dom_finish_open() for data end shouldn't
use i_size for comparision because it may be not updated
yet with just returned data from server. Use size value in
mdt_body from reply for that check.
Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: I1104fbbb0eb4633869b9bf2d1803ac3e84e3853d
Reviewed-on: https://review.whamcloud.com/33895
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
struct address_space *mapping = inode->i_mapping;
struct page *vmpage;
struct niobuf_remote *rnb;
struct address_space *mapping = inode->i_mapping;
struct page *vmpage;
struct niobuf_remote *rnb;
char *data;
unsigned long index, start;
struct niobuf_local lnb;
char *data;
unsigned long index, start;
struct niobuf_local lnb;
if (rnb->rnb_offset % PAGE_SIZE)
RETURN_EXIT;
if (rnb->rnb_offset % PAGE_SIZE)
RETURN_EXIT;
- /* Server returns whole file or just file tail if it fills in
- * reply buffer, in both cases total size should be inode size.
+ /* Server returns whole file or just file tail if it fills in reply
+ * buffer, in both cases total size should be equal to the file size.
- if (rnb->rnb_offset + rnb->rnb_len < i_size_read(inode)) {
- CERROR("%s: server returns off/len %llu/%u < i_size %llu\n",
+ body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
+ if (rnb->rnb_offset + rnb->rnb_len != body->mbo_dom_size) {
+ CERROR("%s: server returns off/len %llu/%u but size %llu\n",
ll_i2sbi(inode)->ll_fsname, rnb->rnb_offset,
ll_i2sbi(inode)->ll_fsname, rnb->rnb_offset,
- rnb->rnb_len, i_size_read(inode));
+ rnb->rnb_len, body->mbo_dom_size);
- CDEBUG(D_INFO, "Get data along with open at %llu len %i, i_size %llu\n",
- rnb->rnb_offset, rnb->rnb_len, i_size_read(inode));
+ CDEBUG(D_INFO, "Get data along with open at %llu len %i, size %llu\n",
+ rnb->rnb_offset, rnb->rnb_len, body->mbo_dom_size);
data = (char *)rnb + sizeof(*rnb);
data = (char *)rnb + sizeof(*rnb);
test_100a() {
skip "Reserved for glimpse-ahead" && return
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
test_100a() {
skip "Reserved for glimpse-ahead" && return
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
- skip "Need MDS version at least 2.10.55" && return
+ skip "Need MDS version at least 2.10.55"
test_100b() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
test_100b() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
- skip "Need MDS version at least 2.10.55" && return
+ skip "Need MDS version at least 2.10.55"
test_100c() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
test_100c() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
- skip "Need MDS version at least 2.10.55" && return
+ skip "Need MDS version at least 2.10.55"
test_100d() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
test_100d() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
- skip "Need MDS version at least 2.10.55" && return
+ skip "Need MDS version at least 2.10.55"
}
run_test 100d "DoM: write+truncate vs stat without IO lock (combined file)"
}
run_test 100d "DoM: write+truncate vs stat without IO lock (combined file)"
+test_100e() {
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.50) ] &&
+ skip "Need MDS version at least 2.11.50"
+
+ local dom=$DIR/$tdir/dom
+ local dom2=$DIR2/$tdir/dom
+ mkdir -p $DIR/$tdir
+
+ $LFS setstripe -E 1024K -L mdt $DIR/$tdir
+
+ cancel_lru_locks mdc
+ dd if=/dev/urandom of=$dom bs=12000 count=1
+ $TRUNCATE $dom2 6000
+ cancel_lru_locks mdc
+ lctl set_param -n mdc.*.stats=clear
+ # expect read-on-open to return all data before write
+ cat /etc/hosts >> $dom
+ local read=$(lctl get_param -n mdc.*.stats | grep -c ost_read)
+ [[ $read -eq 0 ]] || error "Unexpected $read READ RPCs"
+}
+run_test 100e "DoM: read on open and file size"
+
test_101a() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
skip "Need MDS version at least 2.10.55" && return
test_101a() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.55) ] &&
skip "Need MDS version at least 2.10.55" && return