uint64_t new_size = 0;
int i, abufsz, rc = 0, drop_cache = 0;
unsigned long iosize = 0;
+ bool compressed = false;
ENTRY;
LASSERT(dt_object_exists(dt));
continue;
}
+ compressed |= lnb[i].lnb_flags & OBD_BRW_COMPRESSED;
+
if (new_size < lnb[i].lnb_file_offset + lnb[i].lnb_len)
new_size = lnb[i].lnb_file_offset + lnb[i].lnb_len;
if (lnb[i].lnb_page == NULL)
/* if file has grown, take user_size into account */
if (user_size && new_size > user_size)
new_size = user_size;
+ /*
+ * Compressed files can have holes at the
+ * object's end. This is required for correct
+ * file size.
+ */
+ if (compressed && user_size > new_size)
+ new_size = user_size;
+
write_lock(&obj->oo_attr_lock);
if (obj->oo_attr.la_size < new_size) {
obj->oo_attr.la_size = new_size;