linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / fifo.c
index a045fa7..d13fcd3 100644 (file)
--- a/fs/fifo.c
+++ b/fs/fifo.c
@@ -34,10 +34,7 @@ static int fifo_open(struct inode *inode, struct file *filp)
 {
        int ret;
 
-       ret = -ERESTARTSYS;
-       if (down_interruptible(PIPE_SEM(*inode)))
-               goto err_nolock_nocleanup;
-
+       mutex_lock(PIPE_MUTEX(*inode));
        if (!inode->i_pipe) {
                ret = -ENOMEM;
                if(!pipe_new(inode))
@@ -119,7 +116,7 @@ static int fifo_open(struct inode *inode, struct file *filp)
        }
 
        /* Ok! */
-       up(PIPE_SEM(*inode));
+       mutex_unlock(PIPE_MUTEX(*inode));
        return 0;
 
 err_rd:
@@ -135,17 +132,11 @@ err_wr:
        goto err;
 
 err:
-       if (!PIPE_READERS(*inode) && !PIPE_WRITERS(*inode)) {
-               struct pipe_inode_info *info = inode->i_pipe;
-               inode->i_pipe = NULL;
-               free_page((unsigned long)info->base);
-               kfree(info);
-       }
+       if (!PIPE_READERS(*inode) && !PIPE_WRITERS(*inode))
+               free_pipe_info(inode);
 
 err_nocleanup:
-       up(PIPE_SEM(*inode));
-
-err_nolock_nocleanup:
+       mutex_unlock(PIPE_MUTEX(*inode));
        return ret;
 }