Lines 777-812
pipe_rdwr_release(struct inode *inode, struct file *filp)
Link Here
|
777 |
static int |
777 |
static int |
778 |
pipe_read_open(struct inode *inode, struct file *filp) |
778 |
pipe_read_open(struct inode *inode, struct file *filp) |
779 |
{ |
779 |
{ |
780 |
/* We could have perhaps used atomic_t, but this and friends |
780 |
int ret = -ENOENT; |
781 |
below are the only places. So it doesn't seem worthwhile. */ |
781 |
|
782 |
mutex_lock(&inode->i_mutex); |
782 |
mutex_lock(&inode->i_mutex); |
783 |
inode->i_pipe->readers++; |
783 |
|
|
|
784 |
if (inode->i_pipe) { |
785 |
ret = 0; |
786 |
inode->i_pipe->readers++; |
787 |
} |
788 |
|
784 |
mutex_unlock(&inode->i_mutex); |
789 |
mutex_unlock(&inode->i_mutex); |
785 |
|
790 |
|
786 |
return 0; |
791 |
return ret; |
787 |
} |
792 |
} |
788 |
|
793 |
|
789 |
static int |
794 |
static int |
790 |
pipe_write_open(struct inode *inode, struct file *filp) |
795 |
pipe_write_open(struct inode *inode, struct file *filp) |
791 |
{ |
796 |
{ |
|
|
797 |
int ret = -ENOENT; |
798 |
|
792 |
mutex_lock(&inode->i_mutex); |
799 |
mutex_lock(&inode->i_mutex); |
793 |
inode->i_pipe->writers++; |
800 |
|
|
|
801 |
if (inode->i_pipe) { |
802 |
ret = 0; |
803 |
inode->i_pipe->writers++; |
804 |
} |
805 |
|
794 |
mutex_unlock(&inode->i_mutex); |
806 |
mutex_unlock(&inode->i_mutex); |
795 |
|
807 |
|
796 |
return 0; |
808 |
return ret; |
797 |
} |
809 |
} |
798 |
|
810 |
|
799 |
static int |
811 |
static int |
800 |
pipe_rdwr_open(struct inode *inode, struct file *filp) |
812 |
pipe_rdwr_open(struct inode *inode, struct file *filp) |
801 |
{ |
813 |
{ |
|
|
814 |
int ret = -ENOENT; |
815 |
|
802 |
mutex_lock(&inode->i_mutex); |
816 |
mutex_lock(&inode->i_mutex); |
803 |
if (filp->f_mode & FMODE_READ) |
817 |
|
804 |
inode->i_pipe->readers++; |
818 |
if (inode->i_pipe) { |
805 |
if (filp->f_mode & FMODE_WRITE) |
819 |
ret = 0; |
806 |
inode->i_pipe->writers++; |
820 |
if (filp->f_mode & FMODE_READ) |
|
|
821 |
inode->i_pipe->readers++; |
822 |
if (filp->f_mode & FMODE_WRITE) |
823 |
inode->i_pipe->writers++; |
824 |
} |
825 |
|
807 |
mutex_unlock(&inode->i_mutex); |
826 |
mutex_unlock(&inode->i_mutex); |
808 |
|
827 |
|
809 |
return 0; |
828 |
return ret; |
810 |
} |
829 |
} |
811 |
|
830 |
|
812 |
/* |
831 |
/* |