RA_STAT_FAILED_FAST_READ,
RA_STAT_MMAP_RANGE_READ,
RA_STAT_READAHEAD_PAGES,
+ RA_STAT_FORCEREAD_PAGES,
_NR_RA_STAT,
};
[RA_STAT_ASYNC] = "async_readahead",
[RA_STAT_FAILED_FAST_READ] = "failed_to_fast_read",
[RA_STAT_MMAP_RANGE_READ] = "mmap_range_read",
- [RA_STAT_READAHEAD_PAGES] = "readahead_pages"
+ [RA_STAT_READAHEAD_PAGES] = "readahead_pages",
+ [RA_STAT_FORCEREAD_PAGES] = "forceread_pages"
};
int ll_debugfs_register_super(struct super_block *sb, const char *name)
GOTO(out_stats, err = -ENOMEM);
for (id = 0; id < ARRAY_SIZE(ra_stat_string); id++) {
- if (id == RA_STAT_READAHEAD_PAGES)
+ if (id == RA_STAT_READAHEAD_PAGES ||
+ id == RA_STAT_FORCEREAD_PAGES)
lprocfs_counter_init(sbi->ll_ra_stats, id,
LPROCFS_TYPE_PAGES |
LPROCFS_CNTR_AVGMINMAX,
count++;
}
+ if (count)
+ ll_ra_stats_add(vvp_object_inode(io->ci_obj),
+ RA_STAT_FORCEREAD_PAGES, count);
+
RETURN(count > 0 ? count : ret);
}
if (file) {
lfd = file->private_data;
ras = &lfd->fd_ras;
+
+ if (file->f_mode & FMODE_RANDOM)
+ io->ci_rand_read = 1;
}
/* PagePrivate2 is set in ll_io_zero_page() to tell us the vmpage
" g gid put grouplock\n"
" H[num] create HSM released file with num stripes\n"
" I fiemap\n"
+" i random fadvise\n"
" K link path to filename\n"
" L link\n"
" l symlink filename to path\n"
case 'I':
do_fiemap(fd);
break;
+ case 'i':
+ rc = posix_fadvise(fd, 0, 0, POSIX_FADV_RANDOM);
+ if (rc) {
+ save_errno = errno;
+ perror("fadvise");
+ exit(save_errno);
+ }
+ break;
case 'j':
if (flock(fd, LOCK_EX) == -1)
errx(-1, "flock()");
}
run_test 852 "mkdir using intent lock for striped directory"
+test_853() {
+ local file=$DIR/$tfile
+ local size=$((PAGE_SIZE * 2))
+
+ dd if=/dev/zero of=$file bs=1M count=100 ||
+ error "failed to write $file"
+ cancel_lru_locks $OSC
+ $LCTL set_param llite.*.read_ahead_stats=clear
+ $MULTIOP $file or1048576c || error "failed to read $file"
+ $LCTL get_param llite.*.read_ahead_stats
+
+ cancel_lru_locks $OSC
+ $LCTL set_param llite.*.read_ahead_stats=clear
+ $MULTIOP $file oir1048576z1048576r${size}c ||
+ error "failed to read $file"
+ $LCTL get_param llite.*.read_ahead_stats
+
+ local ranum=$($LCTL get_param -n llite.*.read_ahead_stats |
+ get_named_value 'readahead.pages' | calc_sum)
+
+ (( ranum == 0 )) || error "should not trigger readahead"
+
+ local rndnum=$($LCTL get_param -n llite.*.read_ahead_stats |
+ get_named_value 'forceread.pages' | calc_sum)
+
+ (( rndnum == 2 )) || error "force random read: $rndnum, expected 2"
+}
+run_test 853 "Verify that random fadvise works as expected"
+
#
# tests that do cleanup/setup should be run at the end
#