40 lines
1.3 KiB
Plaintext
40 lines
1.3 KiB
Plaintext
|
From: Sankar P <psankar@novell.com>
|
||
|
Subject: novfs: novfs reports incorrect file size
|
||
|
Patch-mainline: no
|
||
|
References: bnc#426536
|
||
|
|
||
|
While updating the inode, make sure that the s_blocks member
|
||
|
is updated to the number of 512 blocks units.
|
||
|
|
||
|
This fixes the issue of novfs reporting invalid file sizes.
|
||
|
|
||
|
Signed-off-by: Sankar P <psankar@novell.com>
|
||
|
Acked-by: Jan Kara <jack@suse.cz>
|
||
|
|
||
|
---
|
||
|
fs/novfs/inode.c | 13 +++++++++++--
|
||
|
1 file changed, 11 insertions(+), 2 deletions(-)
|
||
|
|
||
|
--- a/fs/novfs/inode.c
|
||
|
+++ b/fs/novfs/inode.c
|
||
|
@@ -2671,8 +2671,17 @@ void update_inode(struct inode *Inode, s
|
||
|
Inode->i_mtime = Info->mtime;
|
||
|
|
||
|
if (Inode->i_size && Inode->i_sb->s_blocksize) {
|
||
|
- Inode->i_blocks =
|
||
|
- (unsigned long) (Info->size >> (loff_t) Inode->i_blkbits);
|
||
|
+
|
||
|
+ /*
|
||
|
+ * Filling number of blocks as in NSS filesystem.
|
||
|
+ * The s_blocksize is initialized to PAGE_CACHE_SIZE in
|
||
|
+ * the super block initialization.
|
||
|
+ *
|
||
|
+ * Update i_blocks to have the number of 512 blocks
|
||
|
+ */
|
||
|
+ Inode->i_blocks = (((loff_t)Info->size) + Inode->i_sb->s_blocksize - 1)
|
||
|
+ >> (loff_t)Inode->i_blkbits;
|
||
|
+ Inode->i_blocks = Inode->i_blocks << (PAGE_CACHE_SHIFT - 9);
|
||
|
Inode->i_bytes = Info->size & (Inode->i_sb->s_blocksize - 1);
|
||
|
|
||
|
DbgPrint("i_sb->s_blocksize=%d", Inode->i_sb->s_blocksize);
|