diff options
author | Dave Hansen <haveblue@us.ibm.com> | 2008-02-15 17:37:53 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-04-19 00:29:26 -0400 |
commit | ec82687f29127a954dd0da95dc1e0a4ce92b560c (patch) | |
tree | 952b4f3f7128e2f5798607d595fb43d89c458e17 /fs/xfs/linux-2.6 | |
parent | 2f676cbc0d60ae806216c7a61c6971bd72dedde8 (diff) |
[PATCH] r/o bind mounts: elevate count for xfs timestamp updates
Elevate the write count during the xfs m/ctime updates.
XFS has to do it's own timestamp updates due to an unfortunate VFS
design limitation, so it will have to track writers by itself aswell.
[hch: split out from the touch_atime patch as it's not related to it at all]
Acked-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/xfs/linux-2.6')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 7 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 9 |
2 files changed, 8 insertions, 8 deletions
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 0c958cf77758..a1237dad6430 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -155,13 +155,6 @@ xfs_ichgtime_fast( | |||
155 | */ | 155 | */ |
156 | ASSERT((flags & XFS_ICHGTIME_ACC) == 0); | 156 | ASSERT((flags & XFS_ICHGTIME_ACC) == 0); |
157 | 157 | ||
158 | /* | ||
159 | * We're not supposed to change timestamps in readonly-mounted | ||
160 | * filesystems. Throw it away if anyone asks us. | ||
161 | */ | ||
162 | if (unlikely(IS_RDONLY(inode))) | ||
163 | return; | ||
164 | |||
165 | if (flags & XFS_ICHGTIME_MOD) { | 158 | if (flags & XFS_ICHGTIME_MOD) { |
166 | tvp = &inode->i_mtime; | 159 | tvp = &inode->i_mtime; |
167 | ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec; | 160 | ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec; |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index 21c0dbc74093..1ebd8004469c 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
@@ -51,6 +51,7 @@ | |||
51 | #include "xfs_vnodeops.h" | 51 | #include "xfs_vnodeops.h" |
52 | 52 | ||
53 | #include <linux/capability.h> | 53 | #include <linux/capability.h> |
54 | #include <linux/mount.h> | ||
54 | #include <linux/writeback.h> | 55 | #include <linux/writeback.h> |
55 | 56 | ||
56 | 57 | ||
@@ -670,10 +671,16 @@ start: | |||
670 | if (new_size > xip->i_size) | 671 | if (new_size > xip->i_size) |
671 | xip->i_new_size = new_size; | 672 | xip->i_new_size = new_size; |
672 | 673 | ||
673 | if (likely(!(ioflags & IO_INVIS))) { | 674 | /* |
675 | * We're not supposed to change timestamps in readonly-mounted | ||
676 | * filesystems. Throw it away if anyone asks us. | ||
677 | */ | ||
678 | if (likely(!(ioflags & IO_INVIS) && | ||
679 | !mnt_want_write(file->f_path.mnt))) { | ||
674 | file_update_time(file); | 680 | file_update_time(file); |
675 | xfs_ichgtime_fast(xip, inode, | 681 | xfs_ichgtime_fast(xip, inode, |
676 | XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); | 682 | XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); |
683 | mnt_drop_write(file->f_path.mnt); | ||
677 | } | 684 | } |
678 | 685 | ||
679 | /* | 686 | /* |