diff options
Diffstat (limited to 'fs/fifo.c')
-rw-r--r-- | fs/fifo.c | 48 |
1 files changed, 24 insertions, 24 deletions
@@ -28,14 +28,14 @@ static void wait_for_partner(struct inode* inode, unsigned int *cnt) | |||
28 | 28 | ||
29 | static void wake_up_partner(struct inode* inode) | 29 | static void wake_up_partner(struct inode* inode) |
30 | { | 30 | { |
31 | wake_up_interruptible(PIPE_WAIT(*inode)); | 31 | wake_up_interruptible(&inode->i_pipe->wait); |
32 | } | 32 | } |
33 | 33 | ||
34 | static int fifo_open(struct inode *inode, struct file *filp) | 34 | static int fifo_open(struct inode *inode, struct file *filp) |
35 | { | 35 | { |
36 | int ret; | 36 | int ret; |
37 | 37 | ||
38 | mutex_lock(PIPE_MUTEX(*inode)); | 38 | mutex_lock(&inode->i_mutex); |
39 | if (!inode->i_pipe) { | 39 | if (!inode->i_pipe) { |
40 | ret = -ENOMEM; | 40 | ret = -ENOMEM; |
41 | inode->i_pipe = alloc_pipe_info(inode); | 41 | inode->i_pipe = alloc_pipe_info(inode); |
@@ -55,18 +55,18 @@ static int fifo_open(struct inode *inode, struct file *filp) | |||
55 | * opened, even when there is no process writing the FIFO. | 55 | * opened, even when there is no process writing the FIFO. |
56 | */ | 56 | */ |
57 | filp->f_op = &read_fifo_fops; | 57 | filp->f_op = &read_fifo_fops; |
58 | PIPE_RCOUNTER(*inode)++; | 58 | inode->i_pipe->r_counter++; |
59 | if (PIPE_READERS(*inode)++ == 0) | 59 | if (inode->i_pipe->readers++ == 0) |
60 | wake_up_partner(inode); | 60 | wake_up_partner(inode); |
61 | 61 | ||
62 | if (!PIPE_WRITERS(*inode)) { | 62 | if (!inode->i_pipe->writers) { |
63 | if ((filp->f_flags & O_NONBLOCK)) { | 63 | if ((filp->f_flags & O_NONBLOCK)) { |
64 | /* suppress POLLHUP until we have | 64 | /* suppress POLLHUP until we have |
65 | * seen a writer */ | 65 | * seen a writer */ |
66 | filp->f_version = PIPE_WCOUNTER(*inode); | 66 | filp->f_version = inode->i_pipe->w_counter; |
67 | } else | 67 | } else |
68 | { | 68 | { |
69 | wait_for_partner(inode, &PIPE_WCOUNTER(*inode)); | 69 | wait_for_partner(inode, &inode->i_pipe->w_counter); |
70 | if(signal_pending(current)) | 70 | if(signal_pending(current)) |
71 | goto err_rd; | 71 | goto err_rd; |
72 | } | 72 | } |
@@ -80,16 +80,16 @@ static int fifo_open(struct inode *inode, struct file *filp) | |||
80 | * errno=ENXIO when there is no process reading the FIFO. | 80 | * errno=ENXIO when there is no process reading the FIFO. |
81 | */ | 81 | */ |
82 | ret = -ENXIO; | 82 | ret = -ENXIO; |
83 | if ((filp->f_flags & O_NONBLOCK) && !PIPE_READERS(*inode)) | 83 | if ((filp->f_flags & O_NONBLOCK) && !inode->i_pipe->readers) |
84 | goto err; | 84 | goto err; |
85 | 85 | ||
86 | filp->f_op = &write_fifo_fops; | 86 | filp->f_op = &write_fifo_fops; |
87 | PIPE_WCOUNTER(*inode)++; | 87 | inode->i_pipe->w_counter++; |
88 | if (!PIPE_WRITERS(*inode)++) | 88 | if (!inode->i_pipe->writers++) |
89 | wake_up_partner(inode); | 89 | wake_up_partner(inode); |
90 | 90 | ||
91 | if (!PIPE_READERS(*inode)) { | 91 | if (!inode->i_pipe->readers) { |
92 | wait_for_partner(inode, &PIPE_RCOUNTER(*inode)); | 92 | wait_for_partner(inode, &inode->i_pipe->r_counter); |
93 | if (signal_pending(current)) | 93 | if (signal_pending(current)) |
94 | goto err_wr; | 94 | goto err_wr; |
95 | } | 95 | } |
@@ -104,11 +104,11 @@ static int fifo_open(struct inode *inode, struct file *filp) | |||
104 | */ | 104 | */ |
105 | filp->f_op = &rdwr_fifo_fops; | 105 | filp->f_op = &rdwr_fifo_fops; |
106 | 106 | ||
107 | PIPE_READERS(*inode)++; | 107 | inode->i_pipe->readers++; |
108 | PIPE_WRITERS(*inode)++; | 108 | inode->i_pipe->writers++; |
109 | PIPE_RCOUNTER(*inode)++; | 109 | inode->i_pipe->r_counter++; |
110 | PIPE_WCOUNTER(*inode)++; | 110 | inode->i_pipe->w_counter++; |
111 | if (PIPE_READERS(*inode) == 1 || PIPE_WRITERS(*inode) == 1) | 111 | if (inode->i_pipe->readers == 1 || inode->i_pipe->writers == 1) |
112 | wake_up_partner(inode); | 112 | wake_up_partner(inode); |
113 | break; | 113 | break; |
114 | 114 | ||
@@ -118,27 +118,27 @@ static int fifo_open(struct inode *inode, struct file *filp) | |||
118 | } | 118 | } |
119 | 119 | ||
120 | /* Ok! */ | 120 | /* Ok! */ |
121 | mutex_unlock(PIPE_MUTEX(*inode)); | 121 | mutex_unlock(&inode->i_mutex); |
122 | return 0; | 122 | return 0; |
123 | 123 | ||
124 | err_rd: | 124 | err_rd: |
125 | if (!--PIPE_READERS(*inode)) | 125 | if (!--inode->i_pipe->readers) |
126 | wake_up_interruptible(PIPE_WAIT(*inode)); | 126 | wake_up_interruptible(&inode->i_pipe->wait); |
127 | ret = -ERESTARTSYS; | 127 | ret = -ERESTARTSYS; |
128 | goto err; | 128 | goto err; |
129 | 129 | ||
130 | err_wr: | 130 | err_wr: |
131 | if (!--PIPE_WRITERS(*inode)) | 131 | if (!--inode->i_pipe->writers) |
132 | wake_up_interruptible(PIPE_WAIT(*inode)); | 132 | wake_up_interruptible(&inode->i_pipe->wait); |
133 | ret = -ERESTARTSYS; | 133 | ret = -ERESTARTSYS; |
134 | goto err; | 134 | goto err; |
135 | 135 | ||
136 | err: | 136 | err: |
137 | if (!PIPE_READERS(*inode) && !PIPE_WRITERS(*inode)) | 137 | if (!inode->i_pipe->readers && !inode->i_pipe->writers) |
138 | free_pipe_info(inode); | 138 | free_pipe_info(inode); |
139 | 139 | ||
140 | err_nocleanup: | 140 | err_nocleanup: |
141 | mutex_unlock(PIPE_MUTEX(*inode)); | 141 | mutex_unlock(&inode->i_mutex); |
142 | return ret; | 142 | return ret; |
143 | } | 143 | } |
144 | 144 | ||