Without attribute caching, the correct size would be pulled from the server. With attribute caching, the wrong size could make it to userspace. Signed-off-by: Martin Brandenburg <martin@xxxxxxxxxxxx> --- fs/orangefs/inode.c | 2 +- fs/orangefs/namei.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 9912104..3ee121a 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -296,7 +296,7 @@ struct inode *orangefs_new_inode(struct super_block *sb, struct inode *dir, inode->i_uid = current_fsuid(); inode->i_gid = current_fsgid(); inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); - inode->i_size = PAGE_SIZE; + inode->i_size = 0; inode->i_rdev = dev; error = insert_inode_locked4(inode, hash, orangefs_test_inode, ref); diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c index 478e88b..020a402 100644 --- a/fs/orangefs/namei.c +++ b/fs/orangefs/namei.c @@ -319,6 +319,8 @@ static int orangefs_symlink(struct inode *dir, "Assigned symlink inode new number of %pU\n", get_khandle_from_ino(inode)); + inode->i_size = strlen(symname); + d_instantiate(dentry, inode); unlock_new_inode(inode); orangefs_set_timeout(dentry); @@ -384,6 +386,8 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode "Assigned dir inode new number of %pU\n", get_khandle_from_ino(inode)); + inode->i_size = PAGE_SIZE; + d_instantiate(dentry, inode); unlock_new_inode(inode); orangefs_set_timeout(dentry); -- 2.1.4