};
#endif
-/*
- * An entry in the lookup table in the WIM file.
+/*
+ * An entry in the lookup table in the WIM file.
*
- * It is used to find data streams for files in the WIM.
+ * It is used to find data streams for files in the WIM.
*
* Metadata resources and reparse point data buffers will also have lookup table
* entries associated with the data.
*
* The lookup_table_entry for a given dentry or alternate stream entry in the
- * WIM is found using the SHA1 message digest field.
+ * WIM is found using the SHA1 message digest field.
*/
struct lookup_table_entry {
* - The stream may have a different compressed size in the
* new WIM if the compression type changed
*/
- struct resource_entry output_resource_entry;
+ union {
+ struct resource_entry output_resource_entry;
+ struct list_head msg_list;
+ };
/* This field is used for the special hardlink or symlink image
* extraction mode. In these mode, all identical files are linked
return lte->resource_entry.original_size;
}
+static inline u64 wim_resource_chunks(const struct lookup_table_entry *lte)
+{
+ return (wim_resource_size(lte) + WIM_CHUNK_SIZE - 1) / WIM_CHUNK_SIZE;
+}
+
static inline u64
wim_resource_compressed_size(const struct lookup_table_entry *lte)
{
extern struct lookup_table *new_lookup_table(size_t capacity);
-extern void lookup_table_insert(struct lookup_table *table,
+extern void lookup_table_insert(struct lookup_table *table,
struct lookup_table_entry *lte);
/* Unlinks a lookup table entry from the table; does not free it. */
-static inline void lookup_table_unlink(struct lookup_table *table,
+static inline void lookup_table_unlink(struct lookup_table *table,
struct lookup_table_entry *lte)
{
hlist_del(<e->hash_list);
extern struct lookup_table_entry *
clone_lookup_table_entry(const struct lookup_table_entry *lte);
-extern int for_lookup_table_entry(struct lookup_table *table,
- int (*visitor)(struct lookup_table_entry *, void *),
+extern int for_lookup_table_entry(struct lookup_table *table,
+ int (*visitor)(struct lookup_table_entry *, void *),
void *arg);
extern struct lookup_table_entry *
extern void lte_decrement_refcnt(struct lookup_table_entry *lte,
struct lookup_table *table);
-extern void lte_decrement_num_opened_fds(struct lookup_table_entry *lte,
- struct lookup_table *table);
+#ifdef WITH_FUSE
+extern void lte_decrement_num_opened_fds(struct lookup_table_entry *lte);
+#endif
extern int lte_zero_out_refcnt(struct lookup_table_entry *entry, void *ignore);
extern int lte_zero_real_refcnt(struct lookup_table_entry *entry, void *ignore);
}
/* Unlinks and frees an entry from a lookup table. */
-static inline void lookup_table_remove(struct lookup_table *table,
+static inline void lookup_table_remove(struct lookup_table *table,
struct lookup_table_entry *lte)
{
lookup_table_unlink(table, lte);
inode->ads_entries[
stream_idx - 1].hash);
}
-/*
+/*
* Returns the lookup table entry for stream @stream_idx of the inode, where
* stream_idx = 0 means the default un-named file stream, and stream_idx >= 1
* corresponds to an alternate data stream.
return zero_hash;
}
-/*
+/*
* Returns the hash for stream @stream_idx of the inode, where stream_idx = 0
* means the default un-named file stream, and stream_idx >= 1 corresponds to an
* alternate data stream.