diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-05 10:11:11 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-05 10:11:11 -0700 |
commit | f9ba7179ce91fb77b2adf6eaab3676ab3a1f5a15 (patch) | |
tree | 2d02e7a4fd78083b78749d0c9c7466f0eb8e6f97 /fs/fuse/dir.c | |
parent | 0b3e9f3f21c42d064f5f4088df4088e3d55755eb (diff) | |
parent | 203627bbc90377c509e32450c67c5d957ba2d989 (diff) | |
download | op-kernel-dev-f9ba7179ce91fb77b2adf6eaab3676ab3a1f5a15.zip op-kernel-dev-f9ba7179ce91fb77b2adf6eaab3676ab3a1f5a15.tar.gz |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
Pull fuse updates from Miklos Szeredi.
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
fuse: fix blksize calculation
fuse: fix stat call on 32 bit platforms
fuse: optimize fallocate on permanent failure
fuse: add FALLOCATE operation
fuse: Convert to kstrtoul_from_user
Diffstat (limited to 'fs/fuse/dir.c')
-rw-r--r-- | fs/fuse/dir.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index df5ac04..334e0b1 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -775,6 +775,8 @@ static int fuse_link(struct dentry *entry, struct inode *newdir, static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr, struct kstat *stat) { + unsigned int blkbits; + stat->dev = inode->i_sb->s_dev; stat->ino = attr->ino; stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); @@ -790,7 +792,13 @@ static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr, stat->ctime.tv_nsec = attr->ctimensec; stat->size = attr->size; stat->blocks = attr->blocks; - stat->blksize = (1 << inode->i_blkbits); + + if (attr->blksize != 0) + blkbits = ilog2(attr->blksize); + else + blkbits = inode->i_sb->s_blocksize_bits; + + stat->blksize = 1 << blkbits; } static int fuse_do_getattr(struct inode *inode, struct kstat *stat, @@ -863,6 +871,7 @@ int fuse_update_attributes(struct inode *inode, struct kstat *stat, if (stat) { generic_fillattr(inode, stat); stat->mode = fi->orig_i_mode; + stat->ino = fi->orig_ino; } } |