From ed448ea8b49d23ee5d272a0ad93c6475bcfce874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Pierre=20Andr=C3=A9?= Date: Mon, 14 Jun 2010 14:40:17 +0200 Subject: [PATCH] fixed cached allocation for compressed files --- libntfs-3g/attrib.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libntfs-3g/attrib.c b/libntfs-3g/attrib.c index 71a08b4c..ab707467 100644 --- a/libntfs-3g/attrib.c +++ b/libntfs-3g/attrib.c @@ -1781,7 +1781,11 @@ s64 ntfs_attr_pwrite(ntfs_attr *na, const s64 pos, s64 count, const void *b) ? na->type == AT_INDEX_ROOT && na->name == NTFS_INDEX_I30 : na->type == AT_DATA && na->name == AT_UNNAMED) { na->ni->data_size = na->data_size; - na->ni->allocated_size = na->allocated_size; + if ((compressed || NAttrSparse(na)) + && NAttrNonResident(na)) + na->ni->allocated_size = na->compressed_size; + else + na->ni->allocated_size = na->allocated_size; set_nino_flag(na->ni,KnownSize); } #endif @@ -2225,7 +2229,7 @@ retry: ? na->type == AT_INDEX_ROOT && na->name == NTFS_INDEX_I30 : na->type == AT_DATA && na->name == AT_UNNAMED) { na->ni->data_size = na->data_size; - na->ni->allocated_size = na->allocated_size; + na->ni->allocated_size = na->compressed_size; set_nino_flag(na->ni,KnownSize); } #endif @@ -4723,7 +4727,14 @@ static int ntfs_resident_attr_resize_i(ntfs_attr *na, const s64 newsize) ? na->type == AT_INDEX_ROOT && na->name == NTFS_INDEX_I30 : na->type == AT_DATA && na->name == AT_UNNAMED) { na->ni->data_size = na->data_size; - na->ni->allocated_size = na->allocated_size; + if (((na->data_flags & ATTR_COMPRESSION_MASK) + || NAttrSparse(na)) + && NAttrNonResident(na)) + na->ni->allocated_size + = na->compressed_size; + else + na->ni->allocated_size + = na->allocated_size; set_nino_flag(na->ni,KnownSize); if (na->type == AT_DATA) NInoFileNameSetDirty(na->ni);