NTFS: Fix ntfs_attr_make_non_resident() to update the vfs inode i_blocks
authorAnton Altaparmakov <aia21@cantab.net>
Tue, 4 Oct 2005 13:57:15 +0000 (14:57 +0100)
committerAnton Altaparmakov <aia21@cantab.net>
Tue, 4 Oct 2005 13:57:15 +0000 (14:57 +0100)
      which is zero for a resident attribute but should no longer be zero
      once the attribute is non-resident as it then has real clusters
      allocated.

Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
fs/ntfs/ChangeLog
fs/ntfs/attrib.c

index 60ba3c5cb2ea77d321b0ec64af5dfd6de0433656..045beda82942b6d25011d7067d40fb7f8c5db95b 100644 (file)
@@ -43,6 +43,10 @@ ToDo/Notes:
          reason we cannot simply read the size from the vfs inode i_size is
          that this is not necessarily uptodate.  This happens when
          ntfs_attr_make_non_resident() is called in the ->truncate call path.
+       - Fix ntfs_attr_make_non_resident() to update the vfs inode i_blocks
+         which is zero for a resident attribute but should no longer be zero
+         once the attribute is non-resident as it then has real clusters
+         allocated.
 
 2.1.24 - Lots of bug fixes and support more clean journal states.
 
index 380f70a5f2e13a7740e4fa00098f8ea4fe1b240f..8821e2d088b7bbad520088d29ccf46c668356654 100644 (file)
@@ -1719,7 +1719,9 @@ int ntfs_attr_make_non_resident(ntfs_inode *ni, const u32 data_size)
                                ffs(ni->itype.compressed.block_size) - 1;
                ni->itype.compressed.block_clusters = 1U <<
                                a->data.non_resident.compression_unit;
-       }
+               vi->i_blocks = ni->itype.compressed.size >> 9;
+       } else
+               vi->i_blocks = ni->allocated_size >> 9;
        write_unlock_irqrestore(&ni->size_lock, flags);
        /*
         * This needs to be last since the address space operations ->readpage