Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 291904
Collapse All | Expand All

(-)a/fs/pipe.c (-11 / +30 lines)
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
/*

Return to bug 291904