aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/inode.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2006-10-13 19:48:19 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2006-10-13 19:48:19 +0000
commitbcfa416e38d180c5687219f05c23f343879752f7 (patch)
tree3a979a6be1b57626708da7ab84611c66fa4fe8c2 /kernel/inode.c
parentd6f8db71b84a139c1d74d6d0c654659951219c38 (diff)
downloadlibfuse-bcfa416e38d180c5687219f05c23f343879752f7.tar.gz
fix hang, etc
Diffstat (limited to 'kernel/inode.c')
-rw-r--r--kernel/inode.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/inode.c b/kernel/inode.c
index e3f98db..d70141b 100644
--- a/kernel/inode.c
+++ b/kernel/inode.c
@@ -125,6 +125,7 @@ static int fuse_remount_fs(struct super_block *sb, int *flags, char *data)
void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
{
+ struct fuse_conn *fc = get_fuse_conn(inode);
if (S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size)
invalidate_inode_pages(inode->i_mapping);
@@ -133,7 +134,9 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
inode->i_nlink = attr->nlink;
inode->i_uid = attr->uid;
inode->i_gid = attr->gid;
+ spin_lock(&fc->lock);
i_size_write(inode, attr->size);
+ spin_unlock(&fc->lock);
#ifdef HAVE_I_BLKSIZE
inode->i_blksize = PAGE_CACHE_SIZE;
#endif
@@ -149,7 +152,7 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr)
{
inode->i_mode = attr->mode & S_IFMT;
- i_size_write(inode, attr->size);
+ inode->i_size = attr->size;
if (S_ISREG(inode->i_mode)) {
fuse_init_common(inode);
fuse_init_file_inode(inode);