diff options
| author | Christoph Hellwig <hch@sgi.com> | 2005-06-21 01:47:39 -0400 |
|---|---|---|
| committer | Nathan Scott <nathans@sgi.com> | 2005-06-21 01:47:39 -0400 |
| commit | bd5a876ac4c130e8e1986dcdbb21839ae4cd91c0 (patch) | |
| tree | 5b03fbdcfafa7702cf70388891a1bab700349add | |
| parent | d130c14c0310edac5ea0c6327bef7e3715f9a083 (diff) | |
[XFS] (mostly) remove xfs_inval_cached_pages Since the last round of
direct I/O locking changes it is just a wrapper around
VOP_FLUSHINVAL_PAGES, so it's not nessecary anymore. Keep a simplified
version for kernels < 2.4.22, as these don't have the changed direct I/O
locking.
SGI-PV: 938064
SGI-Modid: xfs-linux:xfs-kern:194420a
Signed-off-by: Christoph Hellwig <hch@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 24 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_dfrag.c | 7 | ||||
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 16 |
4 files changed, 17 insertions, 32 deletions
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index aa9daaea6c..46b61a859a 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
| @@ -209,30 +209,6 @@ unlock: | |||
| 209 | return (-status); | 209 | return (-status); |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | /* | ||
| 213 | * xfs_inval_cached_pages | ||
| 214 | * | ||
| 215 | * This routine is responsible for keeping direct I/O and buffered I/O | ||
| 216 | * somewhat coherent. From here we make sure that we're at least | ||
| 217 | * temporarily holding the inode I/O lock exclusively and then call | ||
| 218 | * the page cache to flush and invalidate any cached pages. If there | ||
| 219 | * are no cached pages this routine will be very quick. | ||
| 220 | */ | ||
| 221 | void | ||
| 222 | xfs_inval_cached_pages( | ||
| 223 | vnode_t *vp, | ||
| 224 | xfs_iocore_t *io, | ||
| 225 | xfs_off_t offset, | ||
| 226 | int write, | ||
| 227 | int relock) | ||
| 228 | { | ||
| 229 | if (VN_CACHED(vp)) { | ||
| 230 | xfs_inval_cached_trace(io, offset, -1, ctooff(offtoct(offset)), -1); | ||
| 231 | VOP_FLUSHINVAL_PAGES(vp, ctooff(offtoct(offset)), -1, FI_REMAPF_LOCKED); | ||
| 232 | } | ||
| 233 | |||
| 234 | } | ||
| 235 | |||
| 236 | ssize_t /* bytes read, or (-) error */ | 212 | ssize_t /* bytes read, or (-) error */ |
| 237 | xfs_read( | 213 | xfs_read( |
| 238 | bhv_desc_t *bdp, | 214 | bhv_desc_t *bdp, |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.h b/fs/xfs/linux-2.6/xfs_lrw.h index d723e35254..f197a720e3 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.h +++ b/fs/xfs/linux-2.6/xfs_lrw.h | |||
| @@ -94,8 +94,6 @@ extern int xfs_bdstrat_cb(struct xfs_buf *); | |||
| 94 | 94 | ||
| 95 | extern int xfs_zero_eof(struct vnode *, struct xfs_iocore *, xfs_off_t, | 95 | extern int xfs_zero_eof(struct vnode *, struct xfs_iocore *, xfs_off_t, |
| 96 | xfs_fsize_t, xfs_fsize_t); | 96 | xfs_fsize_t, xfs_fsize_t); |
| 97 | extern void xfs_inval_cached_pages(struct vnode *, struct xfs_iocore *, | ||
| 98 | xfs_off_t, int, int); | ||
| 99 | extern ssize_t xfs_read(struct bhv_desc *, struct kiocb *, | 97 | extern ssize_t xfs_read(struct bhv_desc *, struct kiocb *, |
| 100 | const struct iovec *, unsigned int, | 98 | const struct iovec *, unsigned int, |
| 101 | loff_t *, int, struct cred *); | 99 | loff_t *, int, struct cred *); |
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index 63abdc2ac7..681be5c93a 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c | |||
| @@ -180,9 +180,10 @@ xfs_swapext( | |||
| 180 | goto error0; | 180 | goto error0; |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | if (VN_CACHED(tvp) != 0) | 183 | if (VN_CACHED(tvp) != 0) { |
| 184 | xfs_inval_cached_pages(XFS_ITOV(tip), &(tip->i_iocore), | 184 | xfs_inval_cached_trace(&tip->i_iocore, 0, -1, 0, -1); |
| 185 | (xfs_off_t)0, 0, 0); | 185 | VOP_FLUSHINVAL_PAGES(tvp, 0, -1, FI_REMAPF_LOCKED); |
| 186 | } | ||
| 186 | 187 | ||
| 187 | /* Verify O_DIRECT for ftmp */ | 188 | /* Verify O_DIRECT for ftmp */ |
| 188 | if (VN_CACHED(tvp) != 0) { | 189 | if (VN_CACHED(tvp) != 0) { |
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 96dc18b73c..d64ebcfa0b 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
| @@ -4329,6 +4329,7 @@ xfs_free_file_space( | |||
| 4329 | xfs_off_t len, | 4329 | xfs_off_t len, |
| 4330 | int attr_flags) | 4330 | int attr_flags) |
| 4331 | { | 4331 | { |
| 4332 | vnode_t *vp; | ||
| 4332 | int committed; | 4333 | int committed; |
| 4333 | int done; | 4334 | int done; |
| 4334 | xfs_off_t end_dmi_offset; | 4335 | xfs_off_t end_dmi_offset; |
| @@ -4349,9 +4350,11 @@ xfs_free_file_space( | |||
| 4349 | xfs_trans_t *tp; | 4350 | xfs_trans_t *tp; |
| 4350 | int need_iolock = 1; | 4351 | int need_iolock = 1; |
| 4351 | 4352 | ||
| 4352 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 4353 | vp = XFS_ITOV(ip); |
| 4353 | mp = ip->i_mount; | 4354 | mp = ip->i_mount; |
| 4354 | 4355 | ||
| 4356 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | ||
| 4357 | |||
| 4355 | if ((error = XFS_QM_DQATTACH(mp, ip, 0))) | 4358 | if ((error = XFS_QM_DQATTACH(mp, ip, 0))) |
| 4356 | return error; | 4359 | return error; |
| 4357 | 4360 | ||
| @@ -4368,7 +4371,7 @@ xfs_free_file_space( | |||
| 4368 | DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) { | 4371 | DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) { |
| 4369 | if (end_dmi_offset > ip->i_d.di_size) | 4372 | if (end_dmi_offset > ip->i_d.di_size) |
| 4370 | end_dmi_offset = ip->i_d.di_size; | 4373 | end_dmi_offset = ip->i_d.di_size; |
| 4371 | error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, XFS_ITOV(ip), | 4374 | error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, vp, |
| 4372 | offset, end_dmi_offset - offset, | 4375 | offset, end_dmi_offset - offset, |
| 4373 | AT_DELAY_FLAG(attr_flags), NULL); | 4376 | AT_DELAY_FLAG(attr_flags), NULL); |
| 4374 | if (error) | 4377 | if (error) |
| @@ -4387,7 +4390,14 @@ xfs_free_file_space( | |||
| 4387 | ioffset = offset & ~(rounding - 1); | 4390 | ioffset = offset & ~(rounding - 1); |
| 4388 | if (ilen & (rounding - 1)) | 4391 | if (ilen & (rounding - 1)) |
| 4389 | ilen = (ilen + rounding) & ~(rounding - 1); | 4392 | ilen = (ilen + rounding) & ~(rounding - 1); |
| 4390 | xfs_inval_cached_pages(XFS_ITOV(ip), &(ip->i_iocore), ioffset, 0, 0); | 4393 | |
| 4394 | if (VN_CACHED(vp) != 0) { | ||
| 4395 | xfs_inval_cached_trace(&ip->i_iocore, ioffset, -1, | ||
| 4396 | ctooff(offtoct(ioffset)), -1); | ||
| 4397 | VOP_FLUSHINVAL_PAGES(vp, ctooff(offtoct(ioffset)), | ||
| 4398 | -1, FI_REMAPF_LOCKED); | ||
| 4399 | } | ||
| 4400 | |||
| 4391 | /* | 4401 | /* |
| 4392 | * Need to zero the stuff we're not freeing, on disk. | 4402 | * Need to zero the stuff we're not freeing, on disk. |
| 4393 | * If its a realtime file & can't use unwritten extents then we | 4403 | * If its a realtime file & can't use unwritten extents then we |
