|
@@ -777,36 +777,55 @@ pipe_rdwr_release(struct inode *inode, struct file *filp)
|
|
static int
|
|
static int
|
|
pipe_read_open(struct inode *inode, struct file *filp)
|
|
pipe_read_open(struct inode *inode, struct file *filp)
|
|
{
|
|
{
|
|
- /* We could have perhaps used atomic_t, but this and friends
|
|
|
|
- below are the only places. So it doesn't seem worthwhile. */
|
|
|
|
|
|
+ int ret = -ENOENT;
|
|
|
|
+
|
|
mutex_lock(&inode->i_mutex);
|
|
mutex_lock(&inode->i_mutex);
|
|
- inode->i_pipe->readers++;
|
|
|
|
|
|
+
|
|
|
|
+ if (inode->i_pipe) {
|
|
|
|
+ ret = 0;
|
|
|
|
+ inode->i_pipe->readers++;
|
|
|
|
+ }
|
|
|
|
+
|
|
mutex_unlock(&inode->i_mutex);
|
|
mutex_unlock(&inode->i_mutex);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
pipe_write_open(struct inode *inode, struct file *filp)
|
|
pipe_write_open(struct inode *inode, struct file *filp)
|
|
{
|
|
{
|
|
|
|
+ int ret = -ENOENT;
|
|
|
|
+
|
|
mutex_lock(&inode->i_mutex);
|
|
mutex_lock(&inode->i_mutex);
|
|
- inode->i_pipe->writers++;
|
|
|
|
|
|
+
|
|
|
|
+ if (inode->i_pipe) {
|
|
|
|
+ ret = 0;
|
|
|
|
+ inode->i_pipe->writers++;
|
|
|
|
+ }
|
|
|
|
+
|
|
mutex_unlock(&inode->i_mutex);
|
|
mutex_unlock(&inode->i_mutex);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
pipe_rdwr_open(struct inode *inode, struct file *filp)
|
|
pipe_rdwr_open(struct inode *inode, struct file *filp)
|
|
{
|
|
{
|
|
|
|
+ int ret = -ENOENT;
|
|
|
|
+
|
|
mutex_lock(&inode->i_mutex);
|
|
mutex_lock(&inode->i_mutex);
|
|
- if (filp->f_mode & FMODE_READ)
|
|
|
|
- inode->i_pipe->readers++;
|
|
|
|
- if (filp->f_mode & FMODE_WRITE)
|
|
|
|
- inode->i_pipe->writers++;
|
|
|
|
|
|
+
|
|
|
|
+ if (inode->i_pipe) {
|
|
|
|
+ ret = 0;
|
|
|
|
+ if (filp->f_mode & FMODE_READ)
|
|
|
|
+ inode->i_pipe->readers++;
|
|
|
|
+ if (filp->f_mode & FMODE_WRITE)
|
|
|
|
+ inode->i_pipe->writers++;
|
|
|
|
+ }
|
|
|
|
+
|
|
mutex_unlock(&inode->i_mutex);
|
|
mutex_unlock(&inode->i_mutex);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|