diff --git a/[refs] b/[refs] index 237582901027..745b9bd1687c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2d7f2ea9c989853310c7f6e8be52cc090cc8e66b +refs/heads/master: 17320a9644a45ccac51ce4ff4333276844abf72d diff --git a/trunk/arch/arm/kernel/ptrace.c b/trunk/arch/arm/kernel/ptrace.c index bc9e2f8ae326..a1d1b2906e8d 100644 --- a/trunk/arch/arm/kernel/ptrace.c +++ b/trunk/arch/arm/kernel/ptrace.c @@ -628,7 +628,7 @@ static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT)) return -EACCES; iwmmxt_task_release(thread); /* force a reload */ - return copy_from_user(&thead->fpstate.iwmmxt, ufp, IWMMXT_SIZE) + return copy_from_user(&thread->fpstate.iwmmxt, ufp, IWMMXT_SIZE) ? -EFAULT : 0; } diff --git a/trunk/fs/ext2/dir.c b/trunk/fs/ext2/dir.c index b3dbd716cd3a..7442bdd1267a 100644 --- a/trunk/fs/ext2/dir.c +++ b/trunk/fs/ext2/dir.c @@ -256,10 +256,11 @@ ext2_readdir (struct file * filp, void * dirent, filldir_t filldir) unsigned long npages = dir_pages(inode); unsigned chunk_mask = ~(ext2_chunk_size(inode)-1); unsigned char *types = NULL; - int need_revalidate = filp->f_version != inode->i_version; + int need_revalidate = (filp->f_version != inode->i_version); + int ret; if (pos > inode->i_size - EXT2_DIR_REC_LEN(1)) - return 0; + goto success; if (EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE)) types = ext2_filetype_table; @@ -274,15 +275,12 @@ ext2_readdir (struct file * filp, void * dirent, filldir_t filldir) "bad page in #%lu", inode->i_ino); filp->f_pos += PAGE_CACHE_SIZE - offset; - return -EIO; + ret = -EIO; + goto done; } kaddr = page_address(page); - if (unlikely(need_revalidate)) { - if (offset) { - offset = ext2_validate_entry(kaddr, offset, chunk_mask); - filp->f_pos = (n<f_version = inode->i_version; + if (need_revalidate) { + offset = ext2_validate_entry(kaddr, offset, chunk_mask); need_revalidate = 0; } de = (ext2_dirent *)(kaddr+offset); @@ -291,8 +289,9 @@ ext2_readdir (struct file * filp, void * dirent, filldir_t filldir) if (de->rec_len == 0) { ext2_error(sb, __FUNCTION__, "zero-length directory entry"); + ret = -EIO; ext2_put_page(page); - return -EIO; + goto done; } if (de->inode) { int over; @@ -307,14 +306,19 @@ ext2_readdir (struct file * filp, void * dirent, filldir_t filldir) le32_to_cpu(de->inode), d_type); if (over) { ext2_put_page(page); - return 0; + goto success; } } filp->f_pos += le16_to_cpu(de->rec_len); } ext2_put_page(page); } - return 0; + +success: + ret = 0; +done: + filp->f_version = inode->i_version; + return ret; } /* diff --git a/trunk/fs/namespace.c b/trunk/fs/namespace.c index 39c81a8d6316..058a44865beb 100644 --- a/trunk/fs/namespace.c +++ b/trunk/fs/namespace.c @@ -1338,7 +1338,7 @@ struct namespace *dup_namespace(struct task_struct *tsk, struct fs_struct *fs) new_ns = kmalloc(sizeof(struct namespace), GFP_KERNEL); if (!new_ns) - return NULL; + goto out; atomic_set(&new_ns->count, 1); INIT_LIST_HEAD(&new_ns->list); @@ -1352,7 +1352,7 @@ struct namespace *dup_namespace(struct task_struct *tsk, struct fs_struct *fs) if (!new_ns->root) { up_write(&namespace_sem); kfree(new_ns); - return NULL; + goto out; } spin_lock(&vfsmount_lock); list_add_tail(&new_ns->list, &new_ns->root->mnt_list); @@ -1393,6 +1393,7 @@ struct namespace *dup_namespace(struct task_struct *tsk, struct fs_struct *fs) if (altrootmnt) mntput(altrootmnt); +out: return new_ns; }