summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/orangefs/file.c10
-rw-r--r--fs/orangefs/namei.c7
2 files changed, 8 insertions, 9 deletions
diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c
index b0688ea894a4..a9e69c56d2fb 100644
--- a/fs/orangefs/file.c
+++ b/fs/orangefs/file.c
@@ -327,14 +327,8 @@ out:
file_accessed(file);
} else {
file_update_time(file);
- /*
- * Must invalidate to ensure write loop doesn't
- * prevent kernel from reading updated
- * attribute. Size probably changed because of
- * the write, and other clients could update
- * any other attribute.
- */
- orangefs_inode->getattr_time = jiffies - 1;
+ if (*offset > i_size_read(inode))
+ i_size_write(inode, *offset);
}
}
diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
index 87584d79ca7a..140314b76e10 100644
--- a/fs/orangefs/namei.c
+++ b/fs/orangefs/namei.c
@@ -383,6 +383,7 @@ static int orangefs_rename(struct inode *old_dir,
unsigned int flags)
{
struct orangefs_kernel_op_s *new_op;
+ struct iattr iattr;
int ret;
if (flags)
@@ -392,7 +393,11 @@ static int orangefs_rename(struct inode *old_dir,
"orangefs_rename: called (%pd2 => %pd2) ct=%d\n",
old_dentry, new_dentry, d_count(new_dentry));
- ORANGEFS_I(new_dentry->d_parent->d_inode)->getattr_time = jiffies - 1;
+ new_dir->i_mtime = new_dir->i_ctime = current_time(new_dir);
+ memset(&iattr, 0, sizeof iattr);
+ iattr.ia_valid |= ATTR_MTIME;
+ orangefs_inode_setattr(new_dir, &iattr);
+ mark_inode_dirty_sync(new_dir);
new_op = op_alloc(ORANGEFS_VFS_OP_RENAME);
if (!new_op)