- if (coord->between != AT_UNIT)
+ if (coord->between != AT_UNIT) {
/* there were no items corresponding to given offset */
+ done_lh(hint->ext_coord.lh);
break;
+ }
loaded = coord->node;
result = zload(loaded);
- if (unlikely(result))
+ if (unlikely(result)) {
+ done_lh(hint->ext_coord.lh);
break;
+ }
if (hint->ext_coord.valid == 0)
validate_extended_coord(&hint->ext_coord,
@@ -1725,13 +1729,15 @@ ssize_t read_unix_file(struct file *file
left = size - *off;
/* faultin user page */
- result = fault_in_pages_writeable(buf, left > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : left);
- if (result) {
+ if(fault_in_pages_writeable(buf, left > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : left)) {
drop_nonexclusive_access(uf_info);
- return RETERR(-EFAULT);
+ result = RETERR(-EFAULT);
+ break;
}
if (count) {
Index: linux-2.6.16/fs/reiser4/as_ops.c
===================================================================
--- linux-2.6.16.orig/fs/reiser4/as_ops.c
+++ linux-2.6.16/fs/reiser4/as_ops.c
@@ -350,6 +350,9 @@ int reiser4_releasepage(struct page *pag
if (PageDirty(page))
return 0;
+ if (page_count(page) > 3)
+ return 0;
+
/* releasable() needs jnode lock, because it looks at the jnode fields
* and we need jload_lock here to avoid races with jload(). */
spin_lock_jnode(node);