diff options
Diffstat (limited to 'mm/filemap.c')
| -rw-r--r-- | mm/filemap.c | 58 | 
1 files changed, 28 insertions, 30 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index b7749a92021c..d56d3c145b9f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -409,9 +409,9 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)  {  	int error; -	VM_BUG_ON(!PageLocked(old)); -	VM_BUG_ON(!PageLocked(new)); -	VM_BUG_ON(new->mapping); +	VM_BUG_ON_PAGE(!PageLocked(old), old); +	VM_BUG_ON_PAGE(!PageLocked(new), new); +	VM_BUG_ON_PAGE(new->mapping, new);  	error = radix_tree_preload(gfp_mask & ~__GFP_HIGHMEM);  	if (!error) { @@ -461,8 +461,8 @@ int add_to_page_cache_locked(struct page *page, struct address_space *mapping,  {  	int error; -	VM_BUG_ON(!PageLocked(page)); -	VM_BUG_ON(PageSwapBacked(page)); +	VM_BUG_ON_PAGE(!PageLocked(page), page); +	VM_BUG_ON_PAGE(PageSwapBacked(page), page);  	error = mem_cgroup_cache_charge(page, current->mm,  					gfp_mask & GFP_RECLAIM_MASK); @@ -607,7 +607,7 @@ EXPORT_SYMBOL_GPL(add_page_wait_queue);   */  void unlock_page(struct page *page)  { -	VM_BUG_ON(!PageLocked(page)); +	VM_BUG_ON_PAGE(!PageLocked(page), page);  	clear_bit_unlock(PG_locked, &page->flags);  	smp_mb__after_clear_bit();  	wake_up_page(page, PG_locked); @@ -760,7 +760,7 @@ repeat:  			page_cache_release(page);  			goto repeat;  		} -		VM_BUG_ON(page->index != offset); +		VM_BUG_ON_PAGE(page->index != offset, page);  	}  	return page;  } @@ -1428,30 +1428,28 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,  		if (!count)  			goto out; /* skip atime */  		size = i_size_read(inode); -		if (pos < size) { -			retval = filemap_write_and_wait_range(mapping, pos, +		retval = filemap_write_and_wait_range(mapping, pos,  					pos + iov_length(iov, nr_segs) - 1); -			if (!retval) { -				retval = mapping->a_ops->direct_IO(READ, iocb, -							iov, pos, nr_segs); -			} -			if (retval > 0) { -				*ppos = pos + retval; -				count -= retval; -			} +		if (!retval) { +			retval = mapping->a_ops->direct_IO(READ, iocb, +							   iov, pos, nr_segs); +		} +		if (retval > 0) { +			*ppos = pos + retval; +			count -= retval; +		} -			/* -			 * Btrfs can have a short DIO read if we encounter -			 * compressed extents, so if there was an error, or if -			 * we've already read everything we wanted to, or if -			 * there was a short read because we hit EOF, go ahead -			 * and return.  Otherwise fallthrough to buffered io for -			 * the rest of the read. -			 */ -			if (retval < 0 || !count || *ppos >= size) { -				file_accessed(filp); -				goto out; -			} +		/* +		 * Btrfs can have a short DIO read if we encounter +		 * compressed extents, so if there was an error, or if +		 * we've already read everything we wanted to, or if +		 * there was a short read because we hit EOF, go ahead +		 * and return.  Otherwise fallthrough to buffered io for +		 * the rest of the read. +		 */ +		if (retval < 0 || !count || *ppos >= size) { +			file_accessed(filp); +			goto out;  		}  	} @@ -1656,7 +1654,7 @@ retry_find:  		put_page(page);  		goto retry_find;  	} -	VM_BUG_ON(page->index != offset); +	VM_BUG_ON_PAGE(page->index != offset, page);  	/*  	 * We have a locked page in the page cache, now we need to check  | 
