Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
- fs/splice.c | 238 +++++++++++++++++++++++++++++++++---------------------------
- 1 file changed, 133 insertions(+), 105 deletions(-)
+ fs/splice.c | 230 +++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 129 insertions(+), 101 deletions(-)
---- linux-2.6.17.4.orig/fs/splice.c
-+++ linux-2.6.17.4/fs/splice.c
+--- linux-2.6.17.6.orig/fs/splice.c
++++ linux-2.6.17.6/fs/splice.c
@@ -1295,6 +1295,85 @@ asmlinkage long sys_splice(int fd_in, lo
}
/*
* Potential ABBA deadlock, work around it by ordering lock
-@@ -1312,126 +1389,62 @@ static int link_pipe(struct pipe_inode_i
+@@ -1312,7 +1389,6 @@ static int link_pipe(struct pipe_inode_i
* could deadlock (one doing tee from A -> B, the other from B -> A).
*/
if (ipipe->inode < opipe->inode) {
- ipipe_first = 1;
-- mutex_lock(&ipipe->inode->i_mutex);
-- mutex_lock(&opipe->inode->i_mutex);
-+ mutex_lock_nested(&ipipe->inode->i_mutex, I_MUTEX_PARENT);
-+ mutex_lock_nested(&opipe->inode->i_mutex, I_MUTEX_CHILD);
+ mutex_lock(&ipipe->inode->i_mutex);
+ mutex_lock(&opipe->inode->i_mutex);
} else {
-- mutex_lock(&opipe->inode->i_mutex);
-- mutex_lock(&ipipe->inode->i_mutex);
-+ mutex_lock_nested(&opipe->inode->i_mutex, I_MUTEX_PARENT);
-+ mutex_lock_nested(&ipipe->inode->i_mutex, I_MUTEX_CHILD);
+@@ -1320,118 +1396,55 @@ static int link_pipe(struct pipe_inode_i
+ mutex_lock(&ipipe->inode->i_mutex);
}
- for (i = 0;; i++) {