diff options
author | Christoph Hellwig <hch@infradead.org> | 2010-01-13 17:17:56 -0500 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2010-01-15 16:35:17 -0500 |
commit | 4e23471a3f3aba885ea70100db47ccacb5f069f6 (patch) | |
tree | 976d7943087e8f49fada9204b6914c84b3c25a31 /fs/xfs/xfs_rw.c | |
parent | 64e0bc7d2a6609ad265757a600e2a0d93c8adb47 (diff) |
xfs: move more buffer helpers into xfs_buf.c
Move xfsbdstrat and xfs_bdstrat_cb from xfs_lrw.c and xfs_bioerror
and xfs_bioerror_relse from xfs_rw.c into xfs_buf.c. This also
means xfs_bioerror and xfs_bioerror_relse can be marked static now.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_rw.c')
-rw-r--r-- | fs/xfs/xfs_rw.c | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c index 9d933a10d6bb..abb2c458b148 100644 --- a/fs/xfs/xfs_rw.c +++ b/fs/xfs/xfs_rw.c | |||
@@ -153,88 +153,6 @@ xfs_do_force_shutdown( | |||
153 | } | 153 | } |
154 | } | 154 | } |
155 | 155 | ||
156 | |||
157 | /* | ||
158 | * Called when we want to stop a buffer from getting written or read. | ||
159 | * We attach the EIO error, muck with its flags, and call biodone | ||
160 | * so that the proper iodone callbacks get called. | ||
161 | */ | ||
162 | int | ||
163 | xfs_bioerror( | ||
164 | xfs_buf_t *bp) | ||
165 | { | ||
166 | |||
167 | #ifdef XFSERRORDEBUG | ||
168 | ASSERT(XFS_BUF_ISREAD(bp) || bp->b_iodone); | ||
169 | #endif | ||
170 | |||
171 | /* | ||
172 | * No need to wait until the buffer is unpinned. | ||
173 | * We aren't flushing it. | ||
174 | */ | ||
175 | XFS_BUF_ERROR(bp, EIO); | ||
176 | /* | ||
177 | * We're calling biodone, so delete B_DONE flag. Either way | ||
178 | * we have to call the iodone callback, and calling biodone | ||
179 | * probably is the best way since it takes care of | ||
180 | * GRIO as well. | ||
181 | */ | ||
182 | XFS_BUF_UNREAD(bp); | ||
183 | XFS_BUF_UNDELAYWRITE(bp); | ||
184 | XFS_BUF_UNDONE(bp); | ||
185 | XFS_BUF_STALE(bp); | ||
186 | |||
187 | XFS_BUF_CLR_BDSTRAT_FUNC(bp); | ||
188 | xfs_biodone(bp); | ||
189 | |||
190 | return (EIO); | ||
191 | } | ||
192 | |||
193 | /* | ||
194 | * Same as xfs_bioerror, except that we are releasing the buffer | ||
195 | * here ourselves, and avoiding the biodone call. | ||
196 | * This is meant for userdata errors; metadata bufs come with | ||
197 | * iodone functions attached, so that we can track down errors. | ||
198 | */ | ||
199 | int | ||
200 | xfs_bioerror_relse( | ||
201 | xfs_buf_t *bp) | ||
202 | { | ||
203 | int64_t fl; | ||
204 | |||
205 | ASSERT(XFS_BUF_IODONE_FUNC(bp) != xfs_buf_iodone_callbacks); | ||
206 | ASSERT(XFS_BUF_IODONE_FUNC(bp) != xlog_iodone); | ||
207 | |||
208 | fl = XFS_BUF_BFLAGS(bp); | ||
209 | /* | ||
210 | * No need to wait until the buffer is unpinned. | ||
211 | * We aren't flushing it. | ||
212 | * | ||
213 | * chunkhold expects B_DONE to be set, whether | ||
214 | * we actually finish the I/O or not. We don't want to | ||
215 | * change that interface. | ||
216 | */ | ||
217 | XFS_BUF_UNREAD(bp); | ||
218 | XFS_BUF_UNDELAYWRITE(bp); | ||
219 | XFS_BUF_DONE(bp); | ||
220 | XFS_BUF_STALE(bp); | ||
221 | XFS_BUF_CLR_IODONE_FUNC(bp); | ||
222 | XFS_BUF_CLR_BDSTRAT_FUNC(bp); | ||
223 | if (!(fl & XFS_B_ASYNC)) { | ||
224 | /* | ||
225 | * Mark b_error and B_ERROR _both_. | ||
226 | * Lot's of chunkcache code assumes that. | ||
227 | * There's no reason to mark error for | ||
228 | * ASYNC buffers. | ||
229 | */ | ||
230 | XFS_BUF_ERROR(bp, EIO); | ||
231 | XFS_BUF_FINISH_IOWAIT(bp); | ||
232 | } else { | ||
233 | xfs_buf_relse(bp); | ||
234 | } | ||
235 | return (EIO); | ||
236 | } | ||
237 | |||
238 | /* | 156 | /* |
239 | * Prints out an ALERT message about I/O error. | 157 | * Prints out an ALERT message about I/O error. |
240 | */ | 158 | */ |