summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5641279)
There have been several occurences of ASSERTION(local_nb[i].rc == 0)
failures in ost_brw_read(), where inode's i_size has changed due to
a racing write/growth beyond EOF. osd_read_prep() must protect
himself against this legal behavior by only reading i_size once.
Also removed m local variable declaration/usage apparently outdated.
Signed-off-by: Bruno Faccini <bruno.faccini@intel.com>
Change-Id: I5d931d5254b970e7031363f37114d0bad8b573fa
Reviewed-on: http://review.whamcloud.com/13707
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
struct osd_device *osd = osd_obj2dev(osd_dt_obj(dt));
struct timeval start, end;
unsigned long timediff;
struct osd_device *osd = osd_obj2dev(osd_dt_obj(dt));
struct timeval start, end;
unsigned long timediff;
- int rc = 0, i, m = 0, cache = 0, cache_hits = 0, cache_misses = 0;
+ int rc = 0, i, cache = 0, cache_hits = 0, cache_misses = 0;
+ loff_t isize;
if (unlikely(rc != 0))
RETURN(rc);
if (unlikely(rc != 0))
RETURN(rc);
+ isize = i_size_read(inode);
+
if (osd->od_read_cache)
cache = 1;
if (osd->od_read_cache)
cache = 1;
- if (i_size_read(inode) > osd->od_readcache_max_filesize)
+ if (isize > osd->od_readcache_max_filesize)
cache = 0;
do_gettimeofday(&start);
for (i = 0; i < npages; i++) {
cache = 0;
do_gettimeofday(&start);
for (i = 0; i < npages; i++) {
- if (i_size_read(inode) <= lnb[i].lnb_file_offset)
+ if (isize <= lnb[i].lnb_file_offset)
/* If there's no more data, abort early.
* lnb->lnb_rc == 0, so it's easy to detect later. */
break;
/* If there's no more data, abort early.
* lnb->lnb_rc == 0, so it's easy to detect later. */
break;
- if (i_size_read(inode) <
- lnb[i].lnb_file_offset + lnb[i].lnb_len - 1)
- lnb[i].lnb_rc = i_size_read(inode) -
- lnb[i].lnb_file_offset;
+ if (isize < lnb[i].lnb_file_offset + lnb[i].lnb_len - 1)
+ lnb[i].lnb_rc = isize - lnb[i].lnb_file_offset;
else
lnb[i].lnb_rc = lnb[i].lnb_len;
else
lnb[i].lnb_rc = lnb[i].lnb_len;
if (PageUptodate(lnb[i].lnb_page)) {
cache_hits++;
if (PageUptodate(lnb[i].lnb_page)) {
cache_hits++;