fuse: fix blksize calculation
Don't use inode->i_blkbits which might be stale, instead calculate the blksize information from the freshly obtained attributes. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
Родитель
45c72cd73c
Коммит
203627bbc9
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче