Skip to content

Commit

Permalink
ubifs: Introduce new data node field, compr_size
Browse files Browse the repository at this point in the history
When data of a data node is compressed and encrypted
we need to store the size of the compressed data because
before encryption we may have to add padding bytes.

For the new field we consume the last two padding bytes
in struct ubifs_data_node. Two bytes are fine because
the data length is at most 4096.

Signed-off-by: Richard Weinberger <richard@nod.at>
  • Loading branch information
Richard Weinberger committed Dec 12, 2016
1 parent 959c2de commit f1f52d6
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 15 deletions.
11 changes: 0 additions & 11 deletions fs/ubifs/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,6 @@ static inline void zero_dent_node_unused(struct ubifs_dent_node *dent)
memset(dent->padding2, 0, 4);
}

/**
* zero_data_node_unused - zero out unused fields of an on-flash data node.
* @data: the data node to zero out
*/
static inline void zero_data_node_unused(struct ubifs_data_node *data)
{
memset(data->padding, 0, 2);
}

/**
* zero_trun_node_unused - zero out unused fields of an on-flash truncation
* node.
Expand Down Expand Up @@ -722,7 +713,6 @@ int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode,
data->ch.node_type = UBIFS_DATA_NODE;
key_write(c, key, &data->key);
data->size = cpu_to_le32(len);
zero_data_node_unused(data);

if (!(ui->flags & UBIFS_COMPR_FL))
/* Compression is disabled for this inode */
Expand Down Expand Up @@ -1357,7 +1347,6 @@ int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,
dn->size = cpu_to_le32(dlen);
dlen += UBIFS_DATA_NODE_SZ;
}
zero_data_node_unused(dn);
}
}
}
Expand Down
6 changes: 2 additions & 4 deletions fs/ubifs/ubifs-media.h
Original file line number Diff line number Diff line change
Expand Up @@ -553,18 +553,16 @@ struct ubifs_dent_node {
* @key: node key
* @size: uncompressed data size in bytes
* @compr_type: compression type (%UBIFS_COMPR_NONE, %UBIFS_COMPR_LZO, etc)
* @padding: reserved for future, zeroes
* @compr_size: compressed data size in bytes, only valid when data is encrypted
* @data: data
*
* Note, do not forget to amend 'zero_data_node_unused()' function when
* changing the padding fields.
*/
struct ubifs_data_node {
struct ubifs_ch ch;
__u8 key[UBIFS_MAX_KEY_LEN];
__le32 size;
__le16 compr_type;
__u8 padding[2]; /* Watch 'zero_data_node_unused()' if changing! */
__le16 compr_size;
__u8 data[];
} __packed;

Expand Down

0 comments on commit f1f52d6

Please sign in to comment.