[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>
This commit is contained in:
parent
2f676cbc0d
commit
ec82687f29
|
@ -155,13 +155,6 @@ xfs_ichgtime_fast(
|
||||||
*/
|
*/
|
||||||
ASSERT((flags & XFS_ICHGTIME_ACC) == 0);
|
ASSERT((flags & XFS_ICHGTIME_ACC) == 0);
|
||||||
|
|
||||||
/*
|
|
||||||
* We're not supposed to change timestamps in readonly-mounted
|
|
||||||
* filesystems. Throw it away if anyone asks us.
|
|
||||||
*/
|
|
||||||
if (unlikely(IS_RDONLY(inode)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (flags & XFS_ICHGTIME_MOD) {
|
if (flags & XFS_ICHGTIME_MOD) {
|
||||||
tvp = &inode->i_mtime;
|
tvp = &inode->i_mtime;
|
||||||
ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
|
ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#include "xfs_vnodeops.h"
|
#include "xfs_vnodeops.h"
|
||||||
|
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
|
#include <linux/mount.h>
|
||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -670,10 +671,16 @@ start:
|
||||||
if (new_size > xip->i_size)
|
if (new_size > xip->i_size)
|
||||||
xip->i_new_size = new_size;
|
xip->i_new_size = new_size;
|
||||||
|
|
||||||
if (likely(!(ioflags & IO_INVIS))) {
|
/*
|
||||||
|
* We're not supposed to change timestamps in readonly-mounted
|
||||||
|
* filesystems. Throw it away if anyone asks us.
|
||||||
|
*/
|
||||||
|
if (likely(!(ioflags & IO_INVIS) &&
|
||||||
|
!mnt_want_write(file->f_path.mnt))) {
|
||||||
file_update_time(file);
|
file_update_time(file);
|
||||||
xfs_ichgtime_fast(xip, inode,
|
xfs_ichgtime_fast(xip, inode,
|
||||||
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
||||||
|
mnt_drop_write(file->f_path.mnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue