From 22774a4bcce9324c9f07b27dafee95ff914970e6 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 10 Apr 2008 08:24:25 +0200 Subject: [PATCH] --- yaml --- r: 88222 b: refs/heads/master c: 8191ecd1d14c6914c660dfa007154860a7908857 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/hfsplus/dir.c | 23 ++++++++--------------- trunk/fs/splice.c | 31 ++++++------------------------- 3 files changed, 15 insertions(+), 41 deletions(-) diff --git a/[refs] b/[refs] index 15e05602305d..a1c84aedec17 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 76b0c26af2736b7e5b87e6ed7ab63901483d5736 +refs/heads/master: 8191ecd1d14c6914c660dfa007154860a7908857 diff --git a/trunk/fs/hfsplus/dir.c b/trunk/fs/hfsplus/dir.c index 5f4023678251..29683645fa0a 100644 --- a/trunk/fs/hfsplus/dir.c +++ b/trunk/fs/hfsplus/dir.c @@ -340,23 +340,16 @@ static int hfsplus_unlink(struct inode *dir, struct dentry *dentry) if (inode->i_nlink > 0) drop_nlink(inode); - if (inode->i_ino == cnid) - clear_nlink(inode); - if (!inode->i_nlink) { - if (inode->i_ino != cnid) { - HFSPLUS_SB(sb).file_count--; - if (!atomic_read(&HFSPLUS_I(inode).opencnt)) { - res = hfsplus_delete_cat(inode->i_ino, - HFSPLUS_SB(sb).hidden_dir, - NULL); - if (!res) - hfsplus_delete_inode(inode); - } else - inode->i_flags |= S_DEAD; + hfsplus_delete_inode(inode); + if (inode->i_ino != cnid && !inode->i_nlink) { + if (!atomic_read(&HFSPLUS_I(inode).opencnt)) { + res = hfsplus_delete_cat(inode->i_ino, HFSPLUS_SB(sb).hidden_dir, NULL); + if (!res) + hfsplus_delete_inode(inode); } else - hfsplus_delete_inode(inode); + inode->i_flags |= S_DEAD; } else - HFSPLUS_SB(sb).file_count--; + clear_nlink(inode); inode->i_ctime = CURRENT_TIME_SEC; mark_inode_dirty(inode); diff --git a/trunk/fs/splice.c b/trunk/fs/splice.c index a861bb318ac8..eeb1a86a7014 100644 --- a/trunk/fs/splice.c +++ b/trunk/fs/splice.c @@ -370,8 +370,10 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, * for an in-flight io page */ if (flags & SPLICE_F_NONBLOCK) { - if (TestSetPageLocked(page)) + if (TestSetPageLocked(page)) { + error = -EAGAIN; break; + } } else lock_page(page); @@ -479,9 +481,8 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags) { - ssize_t spliced; - int ret; loff_t isize, left; + int ret; isize = i_size_read(in->f_mapping->host); if (unlikely(*ppos >= isize)) @@ -491,29 +492,9 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, if (unlikely(left < len)) len = left; - ret = 0; - spliced = 0; - while (len && !spliced) { - ret = __generic_file_splice_read(in, ppos, pipe, len, flags); - - if (ret < 0) - break; - else if (!ret) { - if (spliced) - break; - if (flags & SPLICE_F_NONBLOCK) { - ret = -EAGAIN; - break; - } - } - + ret = __generic_file_splice_read(in, ppos, pipe, len, flags); + if (ret > 0) *ppos += ret; - len -= ret; - spliced += ret; - } - - if (spliced) - return spliced; return ret; }