diff options
author | Pavel Shilovsky <piastry@etersoft.ru> | 2012-05-10 17:49:38 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2012-05-14 17:06:42 +0200 |
commit | 45c72cd73c788dd18c8113d4a404d6b4a01decf1 (patch) | |
tree | 49e28ba927e9485b6feadad7b60ec05d9bb6cff7 /fs/fuse/dir.c | |
parent | fuse: optimize fallocate on permanent failure (diff) | |
download | linux-45c72cd73c788dd18c8113d4a404d6b4a01decf1.tar.xz linux-45c72cd73c788dd18c8113d4a404d6b4a01decf1.zip |
fuse: fix stat call on 32 bit platforms
Now we store attr->ino at inode->i_ino, return attr->ino at the
first time and then return inode->i_ino if the attribute timeout
isn't expired. That's wrong on 32 bit platforms because attr->ino
is 64 bit and inode->i_ino is 32 bit in this case.
Fix this by saving 64 bit ino in fuse_inode structure and returning
it every time we call getattr. Also squash attr->ino into inode->i_ino
explicitly.
Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Diffstat (limited to 'fs/fuse/dir.c')
-rw-r--r-- | fs/fuse/dir.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index df5ac048dc74..bc438320cac5 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -863,6 +863,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; } } |