Thread (1 message) 1 message, 1 author, 2012-10-09

RE: [PATCH 02/16] f2fs: add on-disk layout

From: Chul Lee <hidden>
Date: 2012-10-09 05:27:58
Also in: lkml

Dear David Sterba,

David Sterba wrote:
On Fri, Oct 05, 2012 at 08:56:44PM +0900, ????????? wrote:
quoted
+struct node_footer {
+	__le32 nid;		/* node id */
+	__le32 ino;		/* inode nunmber */
+	__le32 cold:1;		/* cold mark */
+	__le32 fsync:1;		/* fsync mark */
+	__le32 dentry:1;	/* dentry mark */
+	__le32 offset:29;	/* offset in inode's node space */
A bitfield for a on-disk structure? This will have endianity issues,
(but I don't know if you intend to support big-endian). It's not enough
to use cpu_to_le* as in

fill_node_footer(...) {

	rn->footer.offset = cpu_to_le32(ofs);

}

because the bitfield inside the structure will be already defined
reversed. The cpu_to_le macro will only convert value of 'ofs' but will
place it to different bits than it would on a little-endian arch.

There are macros to define bitfields in an endian-neutral way (or do it
by #ifdefs though it also involves duplicating the item names), or you
can alternatively use two structs fr disk-only and memory-only access,
the disk one stores __le32 with value combined of all and the in-memory
gets set up properly and will look like your current version of the
structure.

(More about not using bitfields
http://yarchive.net/comp/linux/bitfields.html)
I appreciate your kind feedback, but we should've avoided using bitfields
for on-disk structure. As you suggested, we'll revise them. The latter
approach would be good.

david
Chul
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help