mtd/fs/jffs2 dir.c,1.71,1.72 erase.c,1.40,1.41 file.c,1.76,1.77 fs.c,1.15,1.16 gc.c,1.79,1.80 nodelist.c,1.47,1.48 nodemgmt.c,1.72,1.73 read.c,1.23,1.24 readinode.c,1.73,1.74 scan.c,1.81,1.82 wbuf.c,1.15,1.16 write.c,1.57,1.58
David Woodhouse
dwmw2 at infradead.org
Tue Aug 20 17:37:31 EDT 2002
Update of /home/cvs/mtd/fs/jffs2
In directory phoenix.infradead.org:/tmp/cvs-serv7536/fs/jffs2
Modified Files:
dir.c erase.c file.c fs.c gc.c nodelist.c nodemgmt.c read.c
readinode.c scan.c wbuf.c write.c
Log Message:
Byte-swapping code at last. Whether it's BE, LE or native is controlled by
a #define in jffs2.h for now.
Index: dir.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/dir.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- dir.c 23 Jul 2002 17:00:45 -0000 1.71
+++ dir.c 20 Aug 2002 21:37:28 -0000 1.72
@@ -211,7 +211,7 @@
return ret;
}
- dir_i->i_mtime = dir_i->i_ctime = ri->ctime;
+ dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(ri->ctime);
jffs2_free_raw_inode(ri);
d_instantiate(dentry, inode);
@@ -317,13 +317,14 @@
f = JFFS2_INODE_INFO(inode);
- inode->i_size = ri->isize = ri->dsize = ri->csize = strlen(target);
- ri->totlen = sizeof(*ri) + ri->dsize;
- ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
+ inode->i_size = strlen(target);
+ ri->isize = ri->dsize = ri->csize = cpu_to_je32(inode->i_size);
+ ri->totlen = cpu_to_je32(sizeof(*ri) + inode->i_size);
+ ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
ri->compr = JFFS2_COMPR_NONE;
- ri->data_crc = crc32(0, target, strlen(target));
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ ri->data_crc = cpu_to_je32(crc32(0, target, strlen(target)));
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, target, strlen(target), phys_ofs, &writtenlen);
@@ -369,19 +370,19 @@
dir_f = JFFS2_INODE_INFO(dir_i);
down(&dir_f->sem);
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
-
- rd->pino = dir_i->i_ino;
- rd->version = ++dir_f->highest_version;
- rd->ino = inode->i_ino;
- rd->mctime = CURRENT_TIME;
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+
+ rd->pino = cpu_to_je32(dir_i->i_ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
+ rd->ino = cpu_to_je32(inode->i_ino);
+ rd->mctime = cpu_to_je32(CURRENT_TIME);
rd->nsize = namelen;
rd->type = DT_LNK;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
@@ -395,7 +396,7 @@
return PTR_ERR(fd);
}
- dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+ dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
jffs2_free_raw_dirent(rd);
@@ -459,8 +460,8 @@
f = JFFS2_INODE_INFO(inode);
- ri->data_crc = 0;
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ ri->data_crc = cpu_to_je32(0);
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, &writtenlen);
@@ -506,19 +507,19 @@
dir_f = JFFS2_INODE_INFO(dir_i);
down(&dir_f->sem);
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
-
- rd->pino = dir_i->i_ino;
- rd->version = ++dir_f->highest_version;
- rd->ino = inode->i_ino;
- rd->mctime = CURRENT_TIME;
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+
+ rd->pino = cpu_to_je32(dir_i->i_ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
+ rd->ino = cpu_to_je32(inode->i_ino);
+ rd->mctime = cpu_to_je32(CURRENT_TIME);
rd->nsize = namelen;
rd->type = DT_DIR;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
@@ -532,7 +533,7 @@
return PTR_ERR(fd);
}
- dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+ dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
dir_i->i_nlink++;
jffs2_free_raw_dirent(rd);
@@ -614,13 +615,13 @@
f = JFFS2_INODE_INFO(inode);
- ri->dsize = ri->csize = devlen;
- ri->totlen = sizeof(*ri) + ri->csize;
- ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
+ ri->dsize = ri->csize = cpu_to_je32(devlen);
+ ri->totlen = cpu_to_je32(sizeof(*ri) + devlen);
+ ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
ri->compr = JFFS2_COMPR_NONE;
- ri->data_crc = crc32(0, &dev, devlen);
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen));
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, phys_ofs, &writtenlen);
@@ -666,22 +667,22 @@
dir_f = JFFS2_INODE_INFO(dir_i);
down(&dir_f->sem);
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
-
- rd->pino = dir_i->i_ino;
- rd->version = ++dir_f->highest_version;
- rd->ino = inode->i_ino;
- rd->mctime = CURRENT_TIME;
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+
+ rd->pino = cpu_to_je32(dir_i->i_ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
+ rd->ino = cpu_to_je32(inode->i_ino);
+ rd->mctime = cpu_to_je32(CURRENT_TIME);
rd->nsize = namelen;
/* XXX: This is ugly. */
rd->type = (mode & S_IFMT) >> 12;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
@@ -695,7 +696,7 @@
return PTR_ERR(fd);
}
- dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+ dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
jffs2_free_raw_dirent(rd);
Index: erase.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/erase.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- erase.c 20 Aug 2002 15:41:28 -0000 1.40
+++ erase.c 20 Aug 2002 21:37:28 -0000 1.41
@@ -347,29 +347,29 @@
jeb->wasted_size = 0;
} else {
struct jffs2_unknown_node marker = {
- .magic = JFFS2_MAGIC_BITMASK,
- .nodetype = JFFS2_NODETYPE_CLEANMARKER,
- .totlen = c->cleanmarker_size
+ .magic = cpu_to_je16(JFFS2_MAGIC_BITMASK),
+ .nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER),
+ .totlen = cpu_to_je32(c->cleanmarker_size)
};
- marker.hdr_crc = crc32(0, &marker, marker.totlen - 4);
+ marker.hdr_crc = cpu_to_je32(crc32(0, &marker, je32_to_cpu(marker.totlen) - 4));
- ret = jffs2_flash_write(c, jeb->offset, marker.totlen, &retlen, (char *)&marker);
+ ret = jffs2_flash_write(c, jeb->offset, je32_to_cpu(marker.totlen), &retlen, (char *)&marker);
if (ret) {
printk(KERN_WARNING "Write clean marker to block at 0x%08x failed: %d\n",
jeb->offset, ret);
goto bad2;
}
- if (retlen != marker.totlen) {
+ if (retlen != je32_to_cpu(marker.totlen)) {
printk(KERN_WARNING "Short write to newly-erased block at 0x%08x: Wanted %d, got %d\n",
- jeb->offset, marker.totlen, retlen);
+ jeb->offset, je32_to_cpu(marker.totlen), retlen);
goto bad2;
}
marker_ref->next_in_ino = NULL;
marker_ref->next_phys = NULL;
marker_ref->flash_offset = jeb->offset;
- marker_ref->totlen = PAD(marker.totlen);
+ marker_ref->totlen = PAD(je32_to_cpu(marker.totlen));
jeb->first_node = jeb->last_node = marker_ref;
Index: file.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/file.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -r1.76 -r1.77
--- file.c 29 Jul 2002 08:25:35 -0000 1.76
+++ file.c 20 Aug 2002 21:37:28 -0000 1.77
@@ -138,41 +138,46 @@
down(&f->sem);
ivalid = iattr->ia_valid;
- ri->magic = JFFS2_MAGIC_BITMASK;
- ri->nodetype = JFFS2_NODETYPE_INODE;
- ri->totlen = sizeof(*ri) + mdatalen;
- ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri->ino = inode->i_ino;
- ri->version = ++f->highest_version;
-
- ri->mode = (ivalid & ATTR_MODE)?iattr->ia_mode:inode->i_mode;
- ri->uid = (ivalid & ATTR_UID)?iattr->ia_uid:inode->i_uid;
- ri->gid = (ivalid & ATTR_GID)?iattr->ia_gid:inode->i_gid;
-
- if (ivalid & ATTR_MODE && ri->mode & S_ISGID &&
- !in_group_p(ri->gid) && !capable(CAP_FSETID))
- ri->mode &= ~S_ISGID;
-
- ri->isize = (ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size;
- ri->atime = (ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime;
- ri->mtime = (ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime;
- ri->ctime = (ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime;
+ ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
+ ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri->ino = cpu_to_je32(inode->i_ino);
+ ri->version = cpu_to_je32(++f->highest_version);
+
+ ri->uid = cpu_to_je16((ivalid & ATTR_UID)?iattr->ia_uid:inode->i_uid);
+ ri->gid = cpu_to_je16((ivalid & ATTR_GID)?iattr->ia_gid:inode->i_gid);
+
+ if (ivalid & ATTR_MODE)
+ if (iattr->ia_mode & S_ISGID &&
+ !in_group_p(je16_to_cpu(ri->gid)) && !capable(CAP_FSETID))
+ ri->mode = cpu_to_je32(iattr->ia_mode & ~S_ISGID);
+ else
+ ri->mode = cpu_to_je32(iattr->ia_mode);
+ else
+ ri->mode = cpu_to_je32(inode->i_mode);
+
+
+ ri->isize = cpu_to_je32((ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size);
+ ri->atime = cpu_to_je32((ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime);
+ ri->mtime = cpu_to_je32((ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime);
+ ri->ctime = cpu_to_je32((ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime);
- ri->offset = 0;
- ri->csize = ri->dsize = mdatalen;
+ ri->offset = cpu_to_je32(0);
+ ri->csize = ri->dsize = cpu_to_je32(mdatalen);
ri->compr = JFFS2_COMPR_NONE;
- if (inode->i_size < ri->isize) {
+ if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
/* It's an extension. Make it a hole node */
ri->compr = JFFS2_COMPR_ZERO;
- ri->dsize = ri->isize - inode->i_size;
- ri->offset = inode->i_size;
+ ri->dsize = cpu_to_je32(iattr->ia_size - inode->i_size);
+ ri->offset = cpu_to_je32(inode->i_size);
}
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
if (mdatalen)
- ri->data_crc = crc32(0, mdata, mdatalen);
+ ri->data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
else
- ri->data_crc = 0;
+ ri->data_crc = cpu_to_je32(0);
new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, phys_ofs, NULL);
if (S_ISLNK(inode->i_mode))
@@ -185,24 +190,24 @@
return PTR_ERR(new_metadata);
}
/* It worked. Update the inode */
- inode->i_atime = ri->atime;
- inode->i_ctime = ri->ctime;
- inode->i_mtime = ri->mtime;
- inode->i_mode = ri->mode;
- inode->i_uid = ri->uid;
- inode->i_gid = ri->gid;
+ inode->i_atime = je32_to_cpu(ri->atime);
+ inode->i_ctime = je32_to_cpu(ri->ctime);
+ inode->i_mtime = je32_to_cpu(ri->mtime);
+ inode->i_mode = je32_to_cpu(ri->mode);
+ inode->i_uid = je16_to_cpu(ri->uid);
+ inode->i_gid = je16_to_cpu(ri->gid);
old_metadata = f->metadata;
- if (inode->i_size > ri->isize) {
- vmtruncate(inode, ri->isize);
- jffs2_truncate_fraglist (c, &f->fraglist, ri->isize);
+ if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) {
+ vmtruncate(inode, iattr->ia_size);
+ jffs2_truncate_fraglist (c, &f->fraglist, iattr->ia_size);
}
- if (inode->i_size < ri->isize) {
+ if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
jffs2_add_full_dnode_to_inode(c, f, new_metadata);
- inode->i_size = ri->isize;
+ inode->i_size = iattr->ia_size;
f->metadata = NULL;
} else {
f->metadata = new_metadata;
@@ -297,24 +302,24 @@
}
memset(&ri, 0, sizeof(ri));
- ri.magic = JFFS2_MAGIC_BITMASK;
- ri.nodetype = JFFS2_NODETYPE_INODE;
- ri.totlen = sizeof(ri);
- ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri.ino = f->inocache->ino;
- ri.version = ++f->highest_version;
- ri.mode = inode->i_mode;
- ri.uid = inode->i_uid;
- ri.gid = inode->i_gid;
- ri.isize = max((uint32_t)inode->i_size, pageofs);
- ri.atime = ri.ctime = ri.mtime = CURRENT_TIME;
- ri.offset = inode->i_size;
- ri.dsize = pageofs - inode->i_size;
- ri.csize = 0;
+ ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri.totlen = cpu_to_je32(sizeof(ri));
+ ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri.ino = cpu_to_je32(f->inocache->ino);
+ ri.version = cpu_to_je32(++f->highest_version);
+ ri.mode = cpu_to_je32(inode->i_mode);
+ ri.uid = cpu_to_je16(inode->i_uid);
+ ri.gid = cpu_to_je16(inode->i_gid);
+ ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs));
+ ri.atime = ri.ctime = ri.mtime = cpu_to_je32(CURRENT_TIME);
+ ri.offset = cpu_to_je32(inode->i_size);
+ ri.dsize = cpu_to_je32(pageofs - inode->i_size);
+ ri.csize = cpu_to_je32(0);
ri.compr = JFFS2_COMPR_ZERO;
- ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
- ri.data_crc = 0;
+ ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+ ri.data_crc = cpu_to_je32(0);
fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, NULL);
@@ -374,12 +379,12 @@
}
/* Set the fields that the generic jffs2_write_inode_range() code can't find */
- ri->ino = inode->i_ino;
- ri->mode = inode->i_mode;
- ri->uid = inode->i_uid;
- ri->gid = inode->i_gid;
- ri->isize = (uint32_t)inode->i_size;
- ri->atime = ri->ctime = ri->mtime = CURRENT_TIME;
+ ri->ino = cpu_to_je32(inode->i_ino);
+ ri->mode = cpu_to_je32(inode->i_mode);
+ ri->uid = cpu_to_je16(inode->i_uid);
+ ri->gid = cpu_to_je16(inode->i_gid);
+ ri->isize = cpu_to_je32((uint32_t)inode->i_size);
+ ri->atime = ri->ctime = ri->mtime = cpu_to_je32(CURRENT_TIME);
/* We rely on the fact that generic_file_write() currently kmaps the page for us. */
ret = jffs2_write_inode_range(c, f, ri, page_address(pg) + start,
@@ -395,7 +400,7 @@
inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen;
inode->i_blocks = (inode->i_size + 511) >> 9;
- inode->i_ctime = inode->i_mtime = ri->ctime;
+ inode->i_ctime = inode->i_mtime = je32_to_cpu(ri->ctime);
}
}
Index: fs.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/fs.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- fs.c 20 Aug 2002 14:38:54 -0000 1.15
+++ fs.c 20 Aug 2002 21:37:28 -0000 1.16
@@ -86,13 +86,13 @@
up(&f->sem);
return;
}
- inode->i_mode = latest_node.mode;
- inode->i_uid = latest_node.uid;
- inode->i_gid = latest_node.gid;
- inode->i_size = latest_node.isize;
- inode->i_atime = latest_node.atime;
- inode->i_mtime = latest_node.mtime;
- inode->i_ctime = latest_node.ctime;
+ inode->i_mode = je32_to_cpu(latest_node.mode);
+ inode->i_uid = je16_to_cpu(latest_node.uid);
+ inode->i_gid = je16_to_cpu(latest_node.gid);
+ inode->i_size = je32_to_cpu(latest_node.isize);
+ inode->i_atime = je32_to_cpu(latest_node.atime);
+ inode->i_mtime = je32_to_cpu(latest_node.mtime);
+ inode->i_ctime = je32_to_cpu(latest_node.ctime);
inode->i_nlink = f->inocache->nlink;
@@ -220,16 +220,16 @@
memset(ri, 0, sizeof(*ri));
/* Set OS-specific defaults for new inodes */
- ri->uid = current->fsuid;
+ ri->uid = cpu_to_je16(current->fsuid);
if (dir_i->i_mode & S_ISGID) {
- ri->gid = dir_i->i_gid;
+ ri->gid = cpu_to_je16(dir_i->i_gid);
if (S_ISDIR(mode))
mode |= S_ISGID;
} else {
- ri->gid = current->fsgid;
+ ri->gid = cpu_to_je16(current->fsgid);
}
- ri->mode = mode;
+ ri->mode = cpu_to_je32(mode);
ret = jffs2_do_new_inode (c, f, mode, ri);
if (ret) {
make_bad_inode(inode);
@@ -237,12 +237,12 @@
return ERR_PTR(ret);
}
inode->i_nlink = 1;
- inode->i_ino = ri->ino;
- inode->i_mode = ri->mode;
- inode->i_gid = ri->gid;
- inode->i_uid = ri->uid;
+ inode->i_ino = je32_to_cpu(ri->ino);
+ inode->i_mode = je32_to_cpu(ri->mode);
+ inode->i_gid = je16_to_cpu(ri->gid);
+ inode->i_uid = je16_to_cpu(ri->uid);
inode->i_atime = inode->i_ctime = inode->i_mtime =
- ri->atime = ri->mtime = ri->ctime = CURRENT_TIME;
+ je32_to_cpu(ri->atime = ri->mtime = ri->ctime = cpu_to_je32(CURRENT_TIME));
inode->i_blksize = PAGE_SIZE;
inode->i_blocks = 0;
inode->i_size = 0;
Index: gc.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/gc.c,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- gc.c 20 Aug 2002 15:41:28 -0000 1.79
+++ gc.c 20 Aug 2002 21:37:28 -0000 1.80
@@ -309,26 +309,26 @@
}
memset(&ri, 0, sizeof(ri));
- ri.magic = JFFS2_MAGIC_BITMASK;
- ri.nodetype = JFFS2_NODETYPE_INODE;
- ri.totlen = sizeof(ri) + mdatalen;
- ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri.ino = f->inocache->ino;
- ri.version = ++f->highest_version;
- ri.mode = JFFS2_F_I_MODE(f);
- ri.uid = JFFS2_F_I_UID(f);
- ri.gid = JFFS2_F_I_GID(f);
- ri.isize = JFFS2_F_I_SIZE(f);
- ri.atime = JFFS2_F_I_ATIME(f);
- ri.ctime = JFFS2_F_I_CTIME(f);
- ri.mtime = JFFS2_F_I_MTIME(f);
- ri.offset = 0;
- ri.csize = mdatalen;
- ri.dsize = mdatalen;
+ ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri.totlen = cpu_to_je32(sizeof(ri) + mdatalen);
+ ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri.ino = cpu_to_je32(f->inocache->ino);
+ ri.version = cpu_to_je32(++f->highest_version);
+ ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+ ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+ ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+ ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+ ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+ ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+ ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+ ri.offset = cpu_to_je32(0);
+ ri.csize = cpu_to_je32(mdatalen);
+ ri.dsize = cpu_to_je32(mdatalen);
ri.compr = JFFS2_COMPR_NONE;
- ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
- ri.data_crc = crc32(0, mdata, mdatalen);
+ ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+ ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, phys_ofs, NULL);
@@ -354,19 +354,19 @@
uint32_t alloclen, phys_ofs;
int ret;
- rd.magic = JFFS2_MAGIC_BITMASK;
- rd.nodetype = JFFS2_NODETYPE_DIRENT;
+ rd.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
rd.nsize = strlen(fd->name);
- rd.totlen = sizeof(rd) + rd.nsize;
- rd.hdr_crc = crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4);
+ rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize);
+ rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4));
- rd.pino = f->inocache->ino;
- rd.version = ++f->highest_version;
- rd.ino = fd->ino;
- rd.mctime = max(JFFS2_F_I_MTIME(f), JFFS2_F_I_CTIME(f));
+ rd.pino = cpu_to_je32(f->inocache->ino);
+ rd.version = cpu_to_je32(++f->highest_version);
+ rd.ino = cpu_to_je32(fd->ino);
+ rd.mctime = cpu_to_je32(max(JFFS2_F_I_MTIME(f), JFFS2_F_I_CTIME(f)));
rd.type = fd->type;
- rd.node_crc = crc32(0, &rd, sizeof(rd)-8);
- rd.name_crc = crc32(0, fd->name, rd.nsize);
+ rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8));
+ rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize));
ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &phys_ofs, &alloclen);
if (ret) {
@@ -432,8 +432,8 @@
retlen, sizeof(struct jffs2_unknown_node), raw->flash_offset & ~3);
continue;
}
- if (rd.nodetype != JFFS2_NODETYPE_DIRENT ||
- PAD(rd.totlen) != PAD(sizeof(rd) + name_len))
+ if (je16_to_cpu(rd.nodetype) != JFFS2_NODETYPE_DIRENT ||
+ PAD(je32_to_cpu(rd.totlen)) != PAD(sizeof(rd) + name_len))
continue;
/* OK, it's a dirent node, it's the right length. We have to take a
@@ -451,10 +451,10 @@
}
/* If the name CRC doesn't match, skip */
- if (rd.name_crc != name_crc)
+ if (je32_to_cpu(rd.name_crc) != name_crc)
continue;
/* If the name length doesn't match, or it's another deletion dirent, skip */
- if (rd.nsize != name_len || !rd.ino)
+ if (rd.nsize != name_len || !je32_to_cpu(rd.ino))
continue;
/* OK, check the actual name now */
@@ -539,20 +539,23 @@
printk(KERN_WARNING "Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %d. Data will be lost by writing new hole node\n", ret, readlen);
goto fill;
}
- if (ri.nodetype != JFFS2_NODETYPE_INODE) {
+ if (je16_to_cpu(ri.nodetype) != JFFS2_NODETYPE_INODE) {
printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n",
- fn->raw->flash_offset & ~3, ri.nodetype, JFFS2_NODETYPE_INODE);
+ fn->raw->flash_offset & ~3,
+ je16_to_cpu(ri.nodetype), JFFS2_NODETYPE_INODE);
return -EIO;
}
- if (ri.totlen != sizeof(ri)) {
+ if (je32_to_cpu(ri.totlen) != sizeof(ri)) {
printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had totlen 0x%x instead of expected 0x%x\n",
- fn->raw->flash_offset & ~3, ri.totlen, sizeof(ri));
+ fn->raw->flash_offset & ~3,
+ je32_to_cpu(ri.totlen), sizeof(ri));
return -EIO;
}
crc = crc32(0, &ri, sizeof(ri)-8);
- if (crc != ri.node_crc) {
+ if (crc != je32_to_cpu(ri.node_crc)) {
printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had CRC 0x%08x which doesn't match calculated CRC 0x%08x\n",
- fn->raw->flash_offset & ~3, ri.node_crc, crc);
+ fn->raw->flash_offset & ~3,
+ je32_to_cpu(ri.node_crc), crc);
/* FIXME: We could possibly deal with this by writing new holes for each frag */
printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
start, end, f->inocache->ino);
@@ -566,27 +569,27 @@
}
} else {
fill:
- ri.magic = JFFS2_MAGIC_BITMASK;
- ri.nodetype = JFFS2_NODETYPE_INODE;
- ri.totlen = sizeof(ri);
- ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri.ino = f->inocache->ino;
- ri.version = ++f->highest_version;
- ri.offset = start;
- ri.dsize = end - start;
- ri.csize = 0;
+ ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri.totlen = cpu_to_je32(sizeof(ri));
+ ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri.ino = cpu_to_je32(f->inocache->ino);
+ ri.version = cpu_to_je32(++f->highest_version);
+ ri.offset = cpu_to_je32(start);
+ ri.dsize = cpu_to_je32(end - start);
+ ri.csize = cpu_to_je32(0);
ri.compr = JFFS2_COMPR_ZERO;
}
- ri.mode = JFFS2_F_I_MODE(f);
- ri.uid = JFFS2_F_I_UID(f);
- ri.gid = JFFS2_F_I_GID(f);
- ri.isize = JFFS2_F_I_SIZE(f);
- ri.atime = JFFS2_F_I_ATIME(f);
- ri.ctime = JFFS2_F_I_CTIME(f);
- ri.mtime = JFFS2_F_I_MTIME(f);
- ri.data_crc = 0;
- ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
+ ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+ ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+ ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+ ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+ ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+ ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+ ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+ ri.data_crc = cpu_to_je32(0);
+ ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
ret = jffs2_reserve_space_gc(c, sizeof(ri), &phys_ofs, &alloclen);
if (ret) {
@@ -600,7 +603,7 @@
printk(KERN_WARNING "Error writing new hole node: %ld\n", PTR_ERR(new_fn));
return PTR_ERR(new_fn);
}
- if (ri.version == f->highest_version) {
+ if (je32_to_cpu(ri.version) == f->highest_version) {
jffs2_add_full_dnode_to_inode(c, f, new_fn);
if (f->metadata) {
jffs2_mark_node_obsolete(c, f->metadata->raw);
@@ -618,7 +621,8 @@
*/
D1(if(unlikely(fn->frags <= 1)) {
printk(KERN_WARNING "jffs2_garbage_collect_hole: Replacing fn with %d frag(s) but new ver %d != highest_version %d of ino #%d\n",
- fn->frags, ri.version, f->highest_version, ri.ino);
+ fn->frags, je32_to_cpu(ri.version), f->highest_version,
+ je32_to_cpu(ri.ino));
});
for (frag = f->fraglist; frag; frag = frag->next) {
@@ -732,26 +736,26 @@
} else {
datalen = cdatalen;
}
- ri.magic = JFFS2_MAGIC_BITMASK;
- ri.nodetype = JFFS2_NODETYPE_INODE;
- ri.totlen = sizeof(ri) + cdatalen;
- ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri.ino = f->inocache->ino;
- ri.version = ++f->highest_version;
- ri.mode = JFFS2_F_I_MODE(f);
- ri.uid = JFFS2_F_I_UID(f);
- ri.gid = JFFS2_F_I_GID(f);
- ri.isize = JFFS2_F_I_SIZE(f);
- ri.atime = JFFS2_F_I_ATIME(f);
- ri.ctime = JFFS2_F_I_CTIME(f);
- ri.mtime = JFFS2_F_I_MTIME(f);
- ri.offset = offset;
- ri.csize = cdatalen;
- ri.dsize = datalen;
+ ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen);
+ ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri.ino = cpu_to_je32(f->inocache->ino);
+ ri.version = cpu_to_je32(++f->highest_version);
+ ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+ ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+ ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+ ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+ ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+ ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+ ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+ ri.offset = cpu_to_je32(offset);
+ ri.csize = cpu_to_je32(cdatalen);
+ ri.dsize = cpu_to_je32(datalen);
ri.compr = comprtype;
- ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
- ri.data_crc = crc32(0, writebuf, cdatalen);
+ ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+ ri.data_crc = cpu_to_je32(crc32(0, writebuf, cdatalen));
new_fn = jffs2_write_dnode(c, f, &ri, writebuf, cdatalen, phys_ofs, NULL);
Index: nodelist.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodelist.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- nodelist.c 26 Jun 2002 01:25:30 -0000 1.47
+++ nodelist.c 20 Aug 2002 21:37:28 -0000 1.48
@@ -140,7 +140,7 @@
goto free_out;
}
- switch (node.u.nodetype) {
+ switch (je16_to_cpu(node.u.nodetype)) {
case JFFS2_NODETYPE_DIRENT:
D1(printk(KERN_DEBUG "Node at %08x is a dirent node\n", ref->flash_offset &~3));
if (retlen < sizeof(node.d)) {
@@ -148,8 +148,8 @@
err = -EIO;
goto free_out;
}
- if (node.d.version > *highest_version)
- *highest_version = node.d.version;
+ if (je32_to_cpu(node.d.version) > *highest_version)
+ *highest_version = je32_to_cpu(node.d.version);
if (ref->flash_offset & 1) {
/* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
printk(KERN_ERR "Dirent node at 0x%08x became obsolete while we weren't looking\n",
@@ -163,14 +163,14 @@
}
memset(fd,0,sizeof(struct jffs2_full_dirent) + node.d.nsize+1);
fd->raw = ref;
- fd->version = node.d.version;
- fd->ino = node.d.ino;
+ fd->version = je32_to_cpu(node.d.version);
+ fd->ino = je32_to_cpu(node.d.ino);
fd->type = node.d.type;
/* Pick out the mctime of the latest dirent */
if(fd->version > *mctime_ver) {
*mctime_ver = fd->version;
- *latest_mctime = node.d.mctime;
+ *latest_mctime = je32_to_cpu(node.d.mctime);
}
/* memcpy as much of the name as possible from the raw
@@ -212,9 +212,9 @@
err = -EIO;
goto free_out;
}
- if (node.d.version > *highest_version)
- *highest_version = node.i.version;
- D1(printk(KERN_DEBUG "version %d, highest_version now %d\n", node.d.version, *highest_version));
+ if (je32_to_cpu(node.i.version) > *highest_version)
+ *highest_version = je32_to_cpu(node.i.version);
+ D1(printk(KERN_DEBUG "version %d, highest_version now %d\n", je32_to_cpu(node.i.version), *highest_version));
if (ref->flash_offset & 1) {
/* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
@@ -236,32 +236,34 @@
jffs2_free_tmp_dnode_info(tn);
goto free_out;
}
- tn->version = node.i.version;
- tn->fn->ofs = node.i.offset;
+ tn->version = je32_to_cpu(node.i.version);
+ tn->fn->ofs = je32_to_cpu(node.i.offset);
/* There was a bug where we wrote hole nodes out with
csize/dsize swapped. Deal with it */
- if (node.i.compr == JFFS2_COMPR_ZERO && !node.i.dsize && node.i.csize)
- tn->fn->size = node.i.csize;
+ if (node.i.compr == JFFS2_COMPR_ZERO && !je32_to_cpu(node.i.dsize) && je32_to_cpu(node.i.csize))
+ tn->fn->size = je32_to_cpu(node.i.csize);
else // normal case...
- tn->fn->size = node.i.dsize;
+ tn->fn->size = je32_to_cpu(node.i.dsize);
tn->fn->raw = ref;
- D1(printk(KERN_DEBUG "dnode @%08x: ver %u, offset %04x, dsize %04x\n", ref->flash_offset &~3, node.i.version, node.i.offset, node.i.dsize));
+ D1(printk(KERN_DEBUG "dnode @%08x: ver %u, offset %04x, dsize %04x\n",
+ ref->flash_offset &~3, je32_to_cpu(node.i.version),
+ je32_to_cpu(node.i.offset), je32_to_cpu(node.i.dsize)));
jffs2_add_tn_to_list(tn, &ret_tn);
break;
default:
- switch(node.u.nodetype & JFFS2_COMPAT_MASK) {
+ switch(je16_to_cpu(node.u.nodetype) & JFFS2_COMPAT_MASK) {
case JFFS2_FEATURE_INCOMPAT:
- printk(KERN_NOTICE "Unknown INCOMPAT nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ printk(KERN_NOTICE "Unknown INCOMPAT nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref->flash_offset & ~3);
break;
case JFFS2_FEATURE_ROCOMPAT:
- printk(KERN_NOTICE "Unknown ROCOMPAT nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ printk(KERN_NOTICE "Unknown ROCOMPAT nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref->flash_offset & ~3);
break;
case JFFS2_FEATURE_RWCOMPAT_COPY:
- printk(KERN_NOTICE "Unknown RWCOMPAT_COPY nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ printk(KERN_NOTICE "Unknown RWCOMPAT_COPY nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref->flash_offset & ~3);
break;
case JFFS2_FEATURE_RWCOMPAT_DELETE:
- printk(KERN_NOTICE "Unknown RWCOMPAT_DELETE nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ printk(KERN_NOTICE "Unknown RWCOMPAT_DELETE nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref->flash_offset & ~3);
break;
}
}
Index: nodemgmt.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodemgmt.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- nodemgmt.c 20 Aug 2002 15:41:28 -0000 1.72
+++ nodemgmt.c 20 Aug 2002 21:37:28 -0000 1.73
@@ -472,15 +472,16 @@
printk(KERN_WARNING "Short read from obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, retlen);
return;
}
- if (PAD(n.totlen) != PAD(ref->totlen)) {
- printk(KERN_WARNING "Node totlen on flash (0x%08x) != totlen in node ref (0x%08x)\n", n.totlen, ref->totlen);
+ if (PAD(je32_to_cpu(n.totlen)) != PAD(ref->totlen)) {
+ printk(KERN_WARNING "Node totlen on flash (0x%08x) != totlen in node ref (0x%08x)\n", je32_to_cpu(n.totlen), ref->totlen);
return;
}
- if (!(n.nodetype & JFFS2_NODE_ACCURATE)) {
- D1(printk(KERN_DEBUG "Node at 0x%08x was already marked obsolete (nodetype 0x%04x\n", ref->flash_offset &~3, n.nodetype));
+ if (!(je16_to_cpu(n.nodetype) & JFFS2_NODE_ACCURATE)) {
+ D1(printk(KERN_DEBUG "Node at 0x%08x was already marked obsolete (nodetype 0x%04x\n", ref->flash_offset &~3, je16_to_cpu(n.nodetype)));
return;
}
- n.nodetype &= ~JFFS2_NODE_ACCURATE;
+ /* XXX FIXME: This is ugly now */
+ n.nodetype = cpu_to_je16(je16_to_cpu(n.nodetype) & ~JFFS2_NODE_ACCURATE);
ret = jffs2_flash_write(c, ref->flash_offset&~3, sizeof(n), &retlen, (char *)&n);
if (ret) {
printk(KERN_WARNING "Write error in obliterating obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, ret);
Index: read.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/read.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- read.c 20 May 2002 14:56:38 -0000 1.23
+++ read.c 20 Aug 2002 21:37:28 -0000 1.24
@@ -45,21 +45,27 @@
}
crc = crc32(0, ri, sizeof(*ri)-8);
- D1(printk(KERN_DEBUG "Node read from %08x: node_crc %08x, calculated CRC %08x. dsize %x, csize %x, offset %x, buf %p\n", fd->raw->flash_offset & ~3, ri->node_crc, crc, ri->dsize, ri->csize, ri->offset, buf));
- if (crc != ri->node_crc) {
- printk(KERN_WARNING "Node CRC %08x != calculated CRC %08x for node at %08x\n", ri->node_crc, crc, fd->raw->flash_offset & ~3);
+ D1(printk(KERN_DEBUG "Node read from %08x: node_crc %08x, calculated CRC %08x. dsize %x, csize %x, offset %x, buf %p\n",
+ fd->raw->flash_offset & ~3, je32_to_cpu(ri->node_crc),
+ crc, je32_to_cpu(ri->dsize), je32_to_cpu(ri->csize),
+ je32_to_cpu(ri->offset), buf));
+ if (crc != je32_to_cpu(ri->node_crc)) {
+ printk(KERN_WARNING "Node CRC %08x != calculated CRC %08x for node at %08x\n",
+ je32_to_cpu(ri->node_crc), crc, fd->raw->flash_offset & ~3);
ret = -EIO;
goto out_ri;
}
/* There was a bug where we wrote hole nodes out with csize/dsize
swapped. Deal with it */
- if (ri->compr == JFFS2_COMPR_ZERO && !ri->dsize && ri->csize) {
+ if (ri->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri->dsize) &&
+ je32_to_cpu(ri->csize)) {
ri->dsize = ri->csize;
- ri->csize = 0;
+ ri->csize = cpu_to_je32(0);
}
- D1(if(ofs + len > ri->dsize) {
- printk(KERN_WARNING "jffs2_read_dnode() asked for %d bytes at %d from %d-byte node\n", len, ofs, ri->dsize);
+ D1(if(ofs + len > je32_to_cpu(ri->dsize)) {
+ printk(KERN_WARNING "jffs2_read_dnode() asked for %d bytes at %d from %d-byte node\n",
+ len, ofs, je32_to_cpu(ri->dsize));
ret = -EINVAL;
goto out_ri;
});
@@ -76,18 +82,18 @@
Reading partial node and it's uncompressed - read into readbuf, check CRC, and copy
Reading partial node and it's compressed - read into readbuf, check checksum, decompress to decomprbuf and copy
*/
- if (ri->compr == JFFS2_COMPR_NONE && len == ri->dsize) {
+ if (ri->compr == JFFS2_COMPR_NONE && len == je32_to_cpu(ri->dsize)) {
readbuf = buf;
} else {
- readbuf = kmalloc(ri->csize, GFP_KERNEL);
+ readbuf = kmalloc(je32_to_cpu(ri->csize), GFP_KERNEL);
if (!readbuf) {
ret = -ENOMEM;
goto out_ri;
}
}
if (ri->compr != JFFS2_COMPR_NONE) {
- if (len < ri->dsize) {
- decomprbuf = kmalloc(ri->dsize, GFP_KERNEL);
+ if (len < je32_to_cpu(ri->dsize)) {
+ decomprbuf = kmalloc(je32_to_cpu(ri->dsize), GFP_KERNEL);
if (!decomprbuf) {
ret = -ENOMEM;
goto out_readbuf;
@@ -99,31 +105,34 @@
decomprbuf = readbuf;
}
- D2(printk(KERN_DEBUG "Read %d bytes to %p\n", ri->csize, readbuf));
- ret = jffs2_flash_read(c, (fd->raw->flash_offset &~3) + sizeof(*ri), ri->csize, &readlen, readbuf);
+ D2(printk(KERN_DEBUG "Read %d bytes to %p\n", je32_to_cpu(ri->csize),
+ readbuf));
+ ret = jffs2_flash_read(c, (fd->raw->flash_offset &~3) + sizeof(*ri),
+ je32_to_cpu(ri->csize), &readlen, readbuf);
- if (!ret && readlen != ri->csize)
+ if (!ret && readlen != je32_to_cpu(ri->csize))
ret = -EIO;
if (ret)
goto out_decomprbuf;
- crc = crc32(0, readbuf, ri->csize);
- if (crc != ri->data_crc) {
- printk(KERN_WARNING "Data CRC %08x != calculated CRC %08x for node at %08x\n", ri->data_crc, crc, fd->raw->flash_offset & ~3);
+ crc = crc32(0, readbuf, je32_to_cpu(ri->csize));
+ if (crc != je32_to_cpu(ri->data_crc)) {
+ printk(KERN_WARNING "Data CRC %08x != calculated CRC %08x for node at %08x\n",
+ je32_to_cpu(ri->data_crc), crc, fd->raw->flash_offset & ~3);
ret = -EIO;
goto out_decomprbuf;
}
D2(printk(KERN_DEBUG "Data CRC matches calculated CRC %08x\n", crc));
if (ri->compr != JFFS2_COMPR_NONE) {
- D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n", ri->csize, readbuf, ri->dsize, decomprbuf));
- ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, ri->csize, ri->dsize);
+ D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n", ri->csize, readbuf, je32_to_cpu(ri->dsize), decomprbuf));
+ ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, je32_to_cpu(ri->csize), je32_to_cpu(ri->dsize));
if (ret) {
printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret);
goto out_decomprbuf;
}
}
- if (len < ri->dsize) {
+ if (len < je32_to_cpu(ri->dsize)) {
memcpy(buf, decomprbuf+ofs, len);
}
out_decomprbuf:
Index: readinode.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/readinode.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- readinode.c 20 May 2002 14:56:38 -0000 1.73
+++ readinode.c 20 Aug 2002 21:37:28 -0000 1.74
@@ -299,12 +299,12 @@
}
printk(KERN_WARNING "jffs2_do_read_inode(): But it has children so we fake some modes for it\n");
}
- latest_node->mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
- latest_node->version = 0;
- latest_node->atime = latest_node->ctime = latest_node->mtime = 0;
- latest_node->isize = 0;
- latest_node->gid = 0;
- latest_node->uid = 0;
+ latest_node->mode = cpu_to_je32(S_IFDIR|S_IRUGO|S_IWUSR|S_IXUGO);
+ latest_node->version = cpu_to_je32(0);
+ latest_node->atime = latest_node->ctime = latest_node->mtime = cpu_to_je32(0);
+ latest_node->isize = cpu_to_je32(0);
+ latest_node->gid = cpu_to_je16(0);
+ latest_node->uid = cpu_to_je16(0);
return 0;
}
@@ -319,26 +319,26 @@
}
crc = crc32(0, latest_node, sizeof(*latest_node)-8);
- if (crc != latest_node->node_crc) {
+ if (crc != je32_to_cpu(latest_node->node_crc)) {
printk(KERN_NOTICE "CRC failed for read_inode of inode %u at physical location 0x%x\n", ino, fn->raw->flash_offset & ~3);
up(&f->sem);
jffs2_do_clear_inode(c, f);
return -EIO;
}
- switch(latest_node->mode & S_IFMT) {
+ switch(je32_to_cpu(latest_node->mode) & S_IFMT) {
case S_IFDIR:
- if (mctime_ver > latest_node->version) {
+ if (mctime_ver > je32_to_cpu(latest_node->version)) {
/* The times in the latest_node are actually older than
mctime in the latest dirent. Cheat. */
- latest_node->ctime = latest_node->mtime = latest_mctime;
+ latest_node->ctime = latest_node->mtime = cpu_to_je32(latest_mctime);
}
break;
case S_IFREG:
/* If it was a regular file, truncate it to the latest node's isize */
- jffs2_truncate_fraglist(c, &f->fraglist, latest_node->isize);
+ jffs2_truncate_fraglist(c, &f->fraglist, je32_to_cpu(latest_node->isize));
break;
case S_IFLNK:
@@ -346,7 +346,7 @@
Remove this when dwmw2 comes to his senses and stops
symlinks from being an entirely gratuitous special
case. */
- if (!latest_node->isize)
+ if (!je32_to_cpu(latest_node->isize))
latest_node->isize = latest_node->dsize;
/* fall through... */
@@ -355,20 +355,20 @@
/* Xertain inode types should have only one data node, and it's
kept as the metadata node */
if (f->metadata) {
- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had metadata node\n", ino, latest_node->mode);
+ printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had metadata node\n", ino, je32_to_cpu(latest_node->mode));
up(&f->sem);
jffs2_do_clear_inode(c, f);
return -EIO;
}
if (!f->fraglist) {
- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o has no fragments\n", ino, latest_node->mode);
+ printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o has no fragments\n", ino, je32_to_cpu(latest_node->mode));
up(&f->sem);
jffs2_do_clear_inode(c, f);
return -EIO;
}
/* ASSERT: f->fraglist != NULL */
if (f->fraglist->next) {
- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had more than one node\n", ino, latest_node->mode);
+ printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had more than one node\n", ino, je32_to_cpu(latest_node->mode));
/* FIXME: Deal with it - check crc32, check for duplicate node, check times and discard the older one */
up(&f->sem);
jffs2_do_clear_inode(c, f);
Index: scan.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/scan.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- scan.c 20 Aug 2002 15:41:28 -0000 1.81
+++ scan.c 20 Aug 2002 21:37:28 -0000 1.82
@@ -294,71 +294,82 @@
continue;
}
- if (node.magic == JFFS2_EMPTY_BITMASK && node.nodetype == JFFS2_EMPTY_BITMASK) {
+ if (je16_to_cpu(node.magic) == JFFS2_EMPTY_BITMASK &&
+ je16_to_cpu(node.nodetype) == JFFS2_EMPTY_BITMASK) {
D1(printk(KERN_DEBUG "Found empty flash at 0x%x\n", ofs));
err = jffs2_scan_empty(c, jeb, &ofs, &noise);
if (err) return err;
continue;
}
- if (ofs == jeb->offset && node.magic == KSAMTIB_CIGAM_2SFFJ) {
+ if (ofs == jeb->offset && je16_to_cpu(node.magic) == KSAMTIB_CIGAM_2SFFJ) {
printk(KERN_WARNING "Magic bitmask is backwards at offset 0x%08x. Wrong endian filesystem?\n", ofs);
DIRTY_SPACE(4);
ofs += 4;
continue;
}
- if (node.magic == JFFS2_DIRTY_BITMASK) {
+ if (je16_to_cpu(node.magic) == JFFS2_DIRTY_BITMASK) {
D1(printk(KERN_DEBUG "Empty bitmask at 0x%08x\n", ofs));
DIRTY_SPACE(4);
ofs += 4;
continue;
}
- if (node.magic == JFFS2_OLD_MAGIC_BITMASK) {
+ if (je16_to_cpu(node.magic) == JFFS2_OLD_MAGIC_BITMASK) {
printk(KERN_WARNING "Old JFFS2 bitmask found at 0x%08x\n", ofs);
printk(KERN_WARNING "You cannot use older JFFS2 filesystems with newer kernels\n");
DIRTY_SPACE(4);
ofs += 4;
continue;
}
- if (node.magic != JFFS2_MAGIC_BITMASK) {
+ if (je16_to_cpu(node.magic) != JFFS2_MAGIC_BITMASK) {
/* OK. We're out of possibilities. Whinge and move on */
- noisy_printk(&noise, "jffs2_scan_eraseblock(): Magic bitmask 0x%04x not found at 0x%08x: 0x%04x instead\n", JFFS2_MAGIC_BITMASK, ofs, node.magic);
+ noisy_printk(&noise, "jffs2_scan_eraseblock(): Magic bitmask 0x%04x not found at 0x%08x: 0x%04x instead\n",
+ JFFS2_MAGIC_BITMASK, ofs,
+ je16_to_cpu(node.magic));
DIRTY_SPACE(4);
ofs += 4;
continue;
}
/* We seem to have a node of sorts. Check the CRC */
- nodetype = node.nodetype;
- node.nodetype |= JFFS2_NODE_ACCURATE;
+ nodetype = je16_to_cpu(node.nodetype);
+ node.nodetype = cpu_to_je16(nodetype | JFFS2_NODE_ACCURATE);
+
hdr_crc = crc32(0, &node, sizeof(node)-4);
- node.nodetype = nodetype;
- if (hdr_crc != node.hdr_crc) {
+
+ node.nodetype = cpu_to_je16(nodetype);
+
+ if (hdr_crc != je32_to_cpu(node.hdr_crc)) {
noisy_printk(&noise, "jffs2_scan_eraseblock(): Node at 0x%08x {0x%04x, 0x%04x, 0x%08x) has invalid CRC 0x%08x (calculated 0x%08x)\n",
- ofs, node.magic, node.nodetype, node.totlen, node.hdr_crc, hdr_crc);
+ ofs, je16_to_cpu(node.magic),
+ je16_to_cpu(node.nodetype),
+ je32_to_cpu(node.totlen),
+ je32_to_cpu(node.hdr_crc),
+ hdr_crc);
DIRTY_SPACE(4);
ofs += 4;
continue;
}
- if (ofs + node.totlen > jeb->offset + c->sector_size) {
+ if (ofs + je32_to_cpu(node.totlen) >
+ jeb->offset + c->sector_size) {
/* Eep. Node goes over the end of the erase block. */
printk(KERN_WARNING "Node at 0x%08x with length 0x%08x would run over the end of the erase block\n",
- ofs, node.totlen);
+ ofs, je32_to_cpu(node.totlen));
printk(KERN_WARNING "Perhaps the file system was created with the wrong erase size?\n");
DIRTY_SPACE(4);
ofs += 4;
continue;
}
- if (!(node.nodetype & JFFS2_NODE_ACCURATE)) {
+ if (!(je16_to_cpu(node.nodetype) & JFFS2_NODE_ACCURATE)) {
/* Wheee. This is an obsoleted node */
D2(printk(KERN_DEBUG "Node at 0x%08x is obsolete. Skipping\n", ofs));
- DIRTY_SPACE(PAD(node.totlen));
- ofs += PAD(node.totlen);
+ DIRTY_SPACE(PAD(je32_to_cpu(node.totlen)));
+ ofs += PAD(je32_to_cpu(node.totlen));
continue;
}
- switch(node.nodetype) {
+ switch(je16_to_cpu(node.nodetype)) {
case JFFS2_NODETYPE_INODE:
err = jffs2_scan_inode_node(c, jeb, &ofs);
if (err) return err;
@@ -370,9 +381,9 @@
break;
case JFFS2_NODETYPE_CLEANMARKER:
- if (node.totlen != c->cleanmarker_size) {
+ if (je32_to_cpu(node.totlen) != c->cleanmarker_size) {
printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x has totlen 0x%x != normal 0x%x\n",
- ofs, node.totlen, c->cleanmarker_size);
+ ofs, je32_to_cpu(node.totlen), c->cleanmarker_size);
DIRTY_SPACE(PAD(sizeof(struct jffs2_unknown_node)));
} else if (jeb->first_node) {
printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x, not first node in block (0x%08x)\n", ofs, jeb->offset);
@@ -397,35 +408,35 @@
break;
case JFFS2_NODETYPE_PADDING:
- DIRTY_SPACE(PAD(node.totlen));
- ofs += PAD(node.totlen);
+ DIRTY_SPACE(PAD(je32_to_cpu(node.totlen)));
+ ofs += PAD(je32_to_cpu(node.totlen));
break;
default:
- switch (node.nodetype & JFFS2_COMPAT_MASK) {
+ switch (je16_to_cpu(node.nodetype) & JFFS2_COMPAT_MASK) {
case JFFS2_FEATURE_ROCOMPAT:
- printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
+ printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node.nodetype), ofs);
c->flags |= JFFS2_SB_FLAG_RO;
if (!(jffs2_is_readonly(c)))
return -EROFS;
- DIRTY_SPACE(PAD(node.totlen));
- ofs += PAD(node.totlen);
+ DIRTY_SPACE(PAD(je32_to_cpu(node.totlen)));
+ ofs += PAD(je32_to_cpu(node.totlen));
break;
case JFFS2_FEATURE_INCOMPAT:
- printk(KERN_NOTICE "Incompatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
+ printk(KERN_NOTICE "Incompatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node.nodetype), ofs);
return -EINVAL;
case JFFS2_FEATURE_RWCOMPAT_DELETE:
- D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs));
- DIRTY_SPACE(PAD(node.totlen));
- ofs += PAD(node.totlen);
+ D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node.nodetype), ofs));
+ DIRTY_SPACE(PAD(je32_to_cpu(node.totlen)));
+ ofs += PAD(je32_to_cpu(node.totlen));
break;
case JFFS2_FEATURE_RWCOMPAT_COPY:
- D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs));
- USED_SPACE(PAD(node.totlen));
- ofs += PAD(node.totlen);
+ D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node.nodetype), ofs));
+ USED_SPACE(PAD(je32_to_cpu(node.totlen)));
+ ofs += PAD(je32_to_cpu(node.totlen));
break;
}
}
@@ -554,14 +565,14 @@
/* We sort of assume that the node was accurate when it was
first written to the medium :) */
- oldnodetype = ri.nodetype;
- ri.nodetype |= JFFS2_NODE_ACCURATE;
+ oldnodetype = je16_to_cpu(ri.nodetype);
+ ri.nodetype = cpu_to_je16(oldnodetype | JFFS2_NODE_ACCURATE);
crc = crc32(0, &ri, sizeof(ri)-8);
- ri.nodetype = oldnodetype;
+ ri.nodetype = cpu_to_je16(oldnodetype);
- if(crc != ri.node_crc) {
+ if(crc != je32_to_cpu(ri.node_crc)) {
printk(KERN_NOTICE "jffs2_scan_inode_node(): CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
- *ofs, ri.node_crc, crc);
+ *ofs, je32_to_cpu(ri.node_crc), crc);
/* FIXME: Why do we believe totlen? */
DIRTY_SPACE(4);
*ofs += 4;
@@ -569,12 +580,12 @@
}
/* There was a bug where we wrote hole nodes out with csize/dsize
swapped. Deal with it */
- if (ri.compr == JFFS2_COMPR_ZERO && !ri.dsize && ri.csize) {
+ if (ri.compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri.dsize) && je32_to_cpu(ri.csize)) {
ri.dsize = ri.csize;
- ri.csize = 0;
+ ri.csize = cpu_to_je32(0);
}
- if (ri.csize) {
+ if (je32_to_cpu(ri.csize)) {
/* Check data CRC too */
unsigned char *dbuf;
uint32_t crc;
@@ -584,25 +595,25 @@
printk(KERN_NOTICE "jffs2_scan_inode_node(): allocation of temporary data buffer for CRC check failed\n");
return -ENOMEM;
}
- ret = jffs2_flash_read(c, *ofs+sizeof(ri), ri.csize, &retlen, dbuf);
+ ret = jffs2_flash_read(c, *ofs+sizeof(ri), je32_to_cpu(ri.csize), &retlen, dbuf);
if (ret) {
printk(KERN_NOTICE "jffs2_scan_inode_node(): Read error at 0x%08x: %d\n", *ofs+sizeof(ri), ret);
kfree(dbuf);
return ret;
}
- if (retlen != ri.csize) {
+ if (retlen != je32_to_cpu(ri.csize)) {
printk(KERN_NOTICE "Short read: 0x%x bytes at 0x%08x instead of requested %x\n",
- retlen, *ofs+ sizeof(ri), ri.csize);
+ retlen, *ofs+ sizeof(ri), je32_to_cpu(ri.csize));
kfree(dbuf);
return -EIO;
}
- crc = crc32(0, dbuf, ri.csize);
+ crc = crc32(0, dbuf, je32_to_cpu(ri.csize));
kfree(dbuf);
- if (crc != ri.data_crc) {
+ if (crc != je32_to_cpu(ri.data_crc)) {
printk(KERN_NOTICE "jffs2_scan_inode_node(): Data CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
- *ofs, ri.data_crc, crc);
- DIRTY_SPACE(PAD(ri.totlen));
- *ofs += PAD(ri.totlen);
+ *ofs, je32_to_cpu(ri.data_crc), crc);
+ DIRTY_SPACE(PAD(je32_to_cpu(ri.totlen)));
+ *ofs += PAD(je32_to_cpu(ri.totlen));
return 0;
}
}
@@ -624,7 +635,7 @@
jffs2_free_raw_node_ref(raw);
return -ENOMEM;
}
- ic = jffs2_scan_make_ino_cache(c, ri.ino);
+ ic = jffs2_scan_make_ino_cache(c, je32_to_cpu(ri.ino));
if (!ic) {
jffs2_free_full_dnode(fn);
jffs2_free_tmp_dnode_info(tn);
@@ -634,7 +645,7 @@
/* Build the data structures and file them for later */
raw->flash_offset = *ofs;
- raw->totlen = PAD(ri.totlen);
+ raw->totlen = PAD(je32_to_cpu(ri.totlen));
raw->next_phys = NULL;
raw->next_in_ino = ic->nodes;
ic->nodes = raw;
@@ -645,48 +656,53 @@
jeb->last_node = raw;
D1(printk(KERN_DEBUG "Node is ino #%u, version %d. Range 0x%x-0x%x\n",
- ri.ino, ri.version, ri.offset, ri.offset+ri.dsize));
+ je32_to_cpu(ri.ino), je32_to_cpu(ri.version),
+ je32_to_cpu(ri.offset),
+ je32_to_cpu(ri.offset)+je32_to_cpu(ri.dsize)));
- pseudo_random += ri.version;
+ pseudo_random += je32_to_cpu(ri.version);
for (tn_list = &ic->scan->tmpnodes; *tn_list; tn_list = &((*tn_list)->next)) {
- if ((*tn_list)->version < ri.version)
+ if ((*tn_list)->version < je32_to_cpu(ri.version))
continue;
- if ((*tn_list)->version > ri.version)
+ if ((*tn_list)->version > je32_to_cpu(ri.version))
break;
/* Wheee. We've found another instance of the same version number.
We should obsolete one of them.
*/
- D1(printk(KERN_DEBUG "Duplicate version %d found in ino #%u. Previous one is at 0x%08x\n", ri.version, ic->ino, (*tn_list)->fn->raw->flash_offset &~3));
+ D1(printk(KERN_DEBUG "Duplicate version %d found in ino #%u. Previous one is at 0x%08x\n",
+ je32_to_cpu(ri.version), ic->ino,
+ (*tn_list)->fn->raw->flash_offset &~3));
if (!jeb->used_size) {
D1(printk(KERN_DEBUG "No valid nodes yet found in this eraseblock 0x%08x, so obsoleting the new instance at 0x%08x\n",
jeb->offset, raw->flash_offset & ~3));
- ri.nodetype &= ~JFFS2_NODE_ACCURATE;
+ /* XXX FIXME: This is now ugly */
+ ri.nodetype = cpu_to_je16(je16_to_cpu(ri.nodetype) & ~JFFS2_NODE_ACCURATE);
/* Perhaps we could also mark it as such on the medium. Maybe later */
}
break;
}
- if (ri.nodetype & JFFS2_NODE_ACCURATE) {
+ if (je16_to_cpu(ri.nodetype) & JFFS2_NODE_ACCURATE) {
/* Only do fraglist truncation in pass1 for S_IFREG inodes */
- if (S_ISREG(ri.mode) && ic->scan->version < ri.version) {
- ic->scan->version = ri.version;
- ic->scan->isize = ri.isize;
+ if (S_ISREG(je32_to_cpu(ri.mode)) && ic->scan->version < je32_to_cpu(ri.version)) {
+ ic->scan->version = je32_to_cpu(ri.version);
+ ic->scan->isize = je32_to_cpu(ri.isize);
}
memset(fn,0,sizeof(*fn));
- fn->ofs = ri.offset;
- fn->size = ri.dsize;
+ fn->ofs = je32_to_cpu(ri.offset);
+ fn->size = je32_to_cpu(ri.dsize);
fn->frags = 0;
fn->raw = raw;
tn->next = NULL;
tn->fn = fn;
- tn->version = ri.version;
+ tn->version = je32_to_cpu(ri.version);
- USED_SPACE(PAD(ri.totlen));
+ USED_SPACE(PAD(je32_to_cpu(ri.totlen)));
/* No need to scan from the beginning of the list again.
We can start from tn_list instead (Thanks Jocke) */
@@ -697,7 +713,9 @@
while (tn->next && tn->next->version == tn->version) {
D1(printk(KERN_DEBUG "Shifting new node at 0x%08x after other node at 0x%08x for version %d in list\n",
- fn->raw->flash_offset&~3, tn->next->fn->raw->flash_offset &~3, ri.version));
+ fn->raw->flash_offset&~3,
+ tn->next->fn->raw->flash_offset &~3,
+ je32_to_cpu(ri.version)));
if(tn->fn != fn)
BUG();
@@ -709,9 +727,9 @@
jffs2_free_full_dnode(fn);
jffs2_free_tmp_dnode_info(tn);
raw->flash_offset |= 1;
- DIRTY_SPACE(PAD(ri.totlen));
+ DIRTY_SPACE(PAD(je32_to_cpu(ri.totlen)));
}
- *ofs += PAD(ri.totlen);
+ *ofs += PAD(je32_to_cpu(ri.totlen));
return 0;
}
@@ -741,21 +759,21 @@
/* We sort of assume that the node was accurate when it was
first written to the medium :) */
- oldnodetype = rd.nodetype;
- rd.nodetype |= JFFS2_NODE_ACCURATE;
+ oldnodetype = je16_to_cpu(rd.nodetype);
+ rd.nodetype = cpu_to_je16(oldnodetype | JFFS2_NODE_ACCURATE);
crc = crc32(0, &rd, sizeof(rd)-8);
- rd.nodetype = oldnodetype;
+ rd.nodetype = cpu_to_je16(oldnodetype);
- if (crc != rd.node_crc) {
+ if (crc != je32_to_cpu(rd.node_crc)) {
printk(KERN_NOTICE "jffs2_scan_dirent_node(): Node CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
- *ofs, rd.node_crc, crc);
- /* FIXME: Why do we believe totlen? */
+ *ofs, je32_to_cpu(rd.node_crc), crc);
+ /* NB: We don't believe totlen. */
DIRTY_SPACE(4);
*ofs += 4;
return 0;
}
- pseudo_random += rd.version;
+ pseudo_random += je32_to_cpu(rd.version);
fd = jffs2_alloc_full_dirent(rd.nsize+1);
if (!fd) {
@@ -776,15 +794,15 @@
}
crc = crc32(0, fd->name, rd.nsize);
- if (crc != rd.name_crc) {
+ if (crc != je32_to_cpu(rd.name_crc)) {
printk(KERN_NOTICE "jffs2_scan_dirent_node(): Name CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
- *ofs, rd.name_crc, crc);
+ *ofs, je32_to_cpu(rd.name_crc), crc);
fd->name[rd.nsize]=0;
- D1(printk(KERN_NOTICE "Name for which CRC failed is (now) '%s', ino #%d\n", fd->name, rd.ino));
+ D1(printk(KERN_NOTICE "Name for which CRC failed is (now) '%s', ino #%d\n", fd->name, je32_to_cpu(rd.ino)));
jffs2_free_full_dirent(fd);
/* FIXME: Why do we believe totlen? */
- DIRTY_SPACE(PAD(rd.totlen));
- *ofs += PAD(rd.totlen);
+ DIRTY_SPACE(PAD(je32_to_cpu(rd.totlen)));
+ *ofs += PAD(je32_to_cpu(rd.totlen));
return 0;
}
raw = jffs2_alloc_raw_node_ref();
@@ -793,14 +811,14 @@
printk(KERN_NOTICE "jffs2_scan_dirent_node(): allocation of node reference failed\n");
return -ENOMEM;
}
- ic = jffs2_scan_make_ino_cache(c, rd.pino);
+ ic = jffs2_scan_make_ino_cache(c, je32_to_cpu(rd.pino));
if (!ic) {
jffs2_free_full_dirent(fd);
jffs2_free_raw_node_ref(raw);
return -ENOMEM;
}
- raw->totlen = PAD(rd.totlen);
+ raw->totlen = PAD(je32_to_cpu(rd.totlen));
raw->flash_offset = *ofs;
raw->next_phys = NULL;
raw->next_in_ino = ic->nodes;
@@ -811,22 +829,22 @@
jeb->last_node->next_phys = raw;
jeb->last_node = raw;
- if (rd.nodetype & JFFS2_NODE_ACCURATE) {
+ if (je16_to_cpu(rd.nodetype) & JFFS2_NODE_ACCURATE) {
fd->raw = raw;
fd->next = NULL;
- fd->version = rd.version;
- fd->ino = rd.ino;
+ fd->version = je32_to_cpu(rd.version);
+ fd->ino = je32_to_cpu(rd.ino);
fd->name[rd.nsize]=0;
fd->nhash = full_name_hash(fd->name, rd.nsize);
fd->type = rd.type;
- USED_SPACE(PAD(rd.totlen));
+ USED_SPACE(PAD(je32_to_cpu(rd.totlen)));
jffs2_add_fd_to_list(c, fd, &ic->scan->dents);
} else {
raw->flash_offset |= 1;
jffs2_free_full_dirent(fd);
- DIRTY_SPACE(PAD(rd.totlen));
+ DIRTY_SPACE(PAD(je32_to_cpu(rd.totlen)));
}
- *ofs += PAD(rd.totlen);
+ *ofs += PAD(je32_to_cpu(rd.totlen));
return 0;
}
Index: wbuf.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/wbuf.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- wbuf.c 20 Aug 2002 15:41:28 -0000 1.15
+++ wbuf.c 20 Aug 2002 21:37:28 -0000 1.16
@@ -149,10 +149,10 @@
if ( c->wbuf_len + sizeof(struct jffs2_unknown_node) < c->wbuf_pagesize) {
struct jffs2_unknown_node *padnode = (void *)(c->wbuf + c->wbuf_len);
- padnode->magic = JFFS2_MAGIC_BITMASK;
- padnode->nodetype = JFFS2_NODETYPE_PADDING;
- padnode->totlen = c->wbuf_pagesize - c->wbuf_len;
- padnode->hdr_crc = crc32(0, padnode, sizeof(*padnode)-4);
+ padnode->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ padnode->nodetype = cpu_to_je16(JFFS2_NODETYPE_PADDING);
+ padnode->totlen = cpu_to_je32(c->wbuf_pagesize - c->wbuf_len);
+ padnode->hdr_crc = cpu_to_je32(crc32(0, padnode, sizeof(*padnode)-4));
}
}
/* else jffs2_flash_writev has actually filled in the rest of the
@@ -621,9 +621,9 @@
return 3;
}
- n.magic = JFFS2_MAGIC_BITMASK;
- n.nodetype = JFFS2_NODETYPE_CLEANMARKER;
- n.totlen = 8;
+ n.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ n.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);
+ n.totlen = cpu_to_je32(8);
p = (unsigned char *) &n;
for (i = 0; i < fsdata_len; i++) {
@@ -653,9 +653,9 @@
return -EINVAL;
}
- n.magic = JFFS2_MAGIC_BITMASK;
- n.nodetype = JFFS2_NODETYPE_CLEANMARKER;
- n.totlen = 8;
+ n.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ n.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);
+ n.totlen = cpu_to_je32(8);
ret = jffs2_flash_write_oob(c, jeb->offset + fsdata_pos, fsdata_len, &retlen, (unsigned char *)&n);
Index: write.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/write.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- write.c 16 Aug 2002 13:28:03 -0000 1.57
+++ write.c 20 Aug 2002 21:37:28 -0000 1.58
@@ -34,16 +34,20 @@
f->inocache = ic;
f->inocache->nlink = 1;
f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
- f->inocache->ino = ri->ino = ++c->highest_ino;
- D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", ri->ino));
+ f->inocache->ino = ++c->highest_ino;
+ ri->ino = cpu_to_je32(f->inocache->ino);
+
+ D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino));
jffs2_add_ino_cache(c, f->inocache);
- ri->magic = JFFS2_MAGIC_BITMASK;
- ri->nodetype = JFFS2_NODETYPE_INODE;
- ri->totlen = PAD(sizeof(*ri));
- ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
- ri->mode = mode;
- f->highest_version = ri->version = 1;
+ ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri->totlen = cpu_to_je32(PAD(sizeof(*ri)));
+ ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+ ri->mode = cpu_to_je32(mode);
+
+ f->highest_version = 1;
+ ri->version = cpu_to_je32(f->highest_version);
return 0;
}
@@ -88,7 +92,7 @@
int ret;
unsigned long cnt = 2;
- D1(if(ri->hdr_crc != crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)) {
+ D1(if(je32_to_cpu(ri->hdr_crc) != crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)) {
printk(KERN_CRIT "Eep. CRC not correct in jffs2_write_dnode()\n");
BUG();
}
@@ -100,8 +104,8 @@
writecheck(c, flash_ofs);
- if (ri->totlen != sizeof(*ri) + datalen) {
- printk(KERN_WARNING "jffs2_write_dnode: ri->totlen (0x%08x) != sizeof(*ri) (0x%08x) + datalen (0x%08x)\n", ri->totlen, sizeof(*ri), datalen);
+ if (je32_to_cpu(ri->totlen) != sizeof(*ri) + datalen) {
+ printk(KERN_WARNING "jffs2_write_dnode: ri->totlen (0x%08x) != sizeof(*ri) (0x%08x) + datalen (0x%08x)\n", je32_to_cpu(ri->totlen), sizeof(*ri), datalen);
}
raw = jffs2_alloc_raw_node_ref();
if (!raw)
@@ -113,11 +117,11 @@
return ERR_PTR(-ENOMEM);
}
raw->flash_offset = flash_ofs;
- raw->totlen = PAD(ri->totlen);
+ raw->totlen = PAD(je32_to_cpu(ri->totlen));
raw->next_phys = NULL;
- fn->ofs = ri->offset;
- fn->size = ri->dsize;
+ fn->ofs = je32_to_cpu(ri->offset);
+ fn->size = je32_to_cpu(ri->dsize);
fn->frags = 0;
fn->raw = raw;
@@ -160,7 +164,10 @@
raw->next_in_ino = f->inocache->nodes;
f->inocache->nodes = raw;
- D1(printk(KERN_DEBUG "jffs2_write_dnode wrote node at 0x%08x with dsize 0x%x, csize 0x%x, node_crc 0x%08x, data_crc 0x%08x, totlen 0x%08x\n", flash_ofs, ri->dsize, ri->csize, ri->node_crc, ri->data_crc, ri->totlen));
+ D1(printk(KERN_DEBUG "jffs2_write_dnode wrote node at 0x%08x with dsize 0x%x, csize 0x%x, node_crc 0x%08x, data_crc 0x%08x, totlen 0x%08x\n",
+ flash_ofs, je32_to_cpu(ri->dsize), je32_to_cpu(ri->csize),
+ je32_to_cpu(ri->node_crc), je32_to_cpu(ri->data_crc),
+ je32_to_cpu(ri->totlen)));
if (writelen)
*writelen = retlen;
@@ -176,10 +183,12 @@
struct iovec vecs[2];
int ret;
- D1(printk(KERN_DEBUG "jffs2_write_dirent(ino #%u, name at *0x%p \"%s\"->ino #%u, name_crc 0x%08x)\n", rd->pino, name, name, rd->ino, rd->name_crc));
+ D1(printk(KERN_DEBUG "jffs2_write_dirent(ino #%u, name at *0x%p \"%s\"->ino #%u, name_crc 0x%08x)\n",
+ je32_to_cpu(rd->pino), name, name, je32_to_cpu(rd->ino),
+ je32_to_cpu(rd->name_crc)));
writecheck(c, flash_ofs);
- D1(if(rd->hdr_crc != crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)) {
+ D1(if(je32_to_cpu(rd->hdr_crc) != crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)) {
printk(KERN_CRIT "Eep. CRC not correct in jffs2_write_dirent()\n");
BUG();
}
@@ -201,13 +210,13 @@
return ERR_PTR(-ENOMEM);
}
raw->flash_offset = flash_ofs;
- raw->totlen = PAD(rd->totlen);
+ raw->totlen = PAD(je32_to_cpu(rd->totlen));
raw->next_in_ino = f->inocache->nodes;
f->inocache->nodes = raw;
raw->next_phys = NULL;
- fd->version = rd->version;
- fd->ino = rd->ino;
+ fd->version = je32_to_cpu(rd->version);
+ fd->ino = je32_to_cpu(rd->ino);
fd->nhash = full_name_hash(name, strlen(name));
fd->type = rd->type;
memcpy(fd->name, name, namelen);
@@ -289,20 +298,20 @@
that the comprbuf doesn't need to be kfree()d.
*/
- ri->magic = JFFS2_MAGIC_BITMASK;
- ri->nodetype = JFFS2_NODETYPE_INODE;
- ri->totlen = sizeof(*ri) + cdatalen;
- ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
-
- ri->ino = f->inocache->ino;
- ri->version = ++f->highest_version;
- ri->isize = max(ri->isize, offset + datalen);
- ri->offset = offset;
- ri->csize = cdatalen;
- ri->dsize = datalen;
+ ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+ ri->totlen = cpu_to_je32(sizeof(*ri) + cdatalen);
+ ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+
+ ri->ino = cpu_to_je32(f->inocache->ino);
+ ri->version = cpu_to_je32(++f->highest_version);
+ ri->isize = cpu_to_je32(max(je32_to_cpu(ri->isize), offset + datalen));
+ ri->offset = cpu_to_je32(offset);
+ ri->csize = cpu_to_je32(cdatalen);
+ ri->dsize = cpu_to_je32(datalen);
ri->compr = comprtype;
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
- ri->data_crc = crc32(0, comprbuf, cdatalen);
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
+ ri->data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen));
fn = jffs2_write_dnode(c, f, ri, comprbuf, cdatalen, phys_ofs, NULL);
@@ -367,12 +376,13 @@
return ret;
}
- ri->data_crc = 0;
- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ ri->data_crc = cpu_to_je32(0);
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, &writtenlen);
- D1(printk(KERN_DEBUG "jffs2_do_create created file with mode 0x%x\n", ri->mode));
+ D1(printk(KERN_DEBUG "jffs2_do_create created file with mode 0x%x\n",
+ je32_to_cpu(ri->mode)));
if (IS_ERR(fn)) {
D1(printk(KERN_DEBUG "jffs2_write_dnode() failed\n"));
@@ -413,19 +423,19 @@
down(&dir_f->sem);
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
- rd->pino = dir_f->inocache->ino;
- rd->version = ++dir_f->highest_version;
+ rd->pino = cpu_to_je32(dir_f->inocache->ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
rd->ino = ri->ino;
rd->mctime = ri->ctime;
rd->nsize = namelen;
rd->type = DT_REG;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, &writtenlen);
@@ -471,19 +481,19 @@
down(&dir_f->sem);
/* Build a deletion node */
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
-
- rd->pino = dir_f->inocache->ino;
- rd->version = ++dir_f->highest_version;
- rd->ino = 0;
- rd->mctime = CURRENT_TIME;
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+
+ rd->pino = cpu_to_je32(dir_f->inocache->ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
+ rd->ino = cpu_to_je32(0);
+ rd->mctime = cpu_to_je32(CURRENT_TIME);
rd->nsize = namelen;
rd->type = DT_UNKNOWN;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, NULL);
@@ -554,21 +564,21 @@
down(&dir_f->sem);
/* Build a deletion node */
- rd->magic = JFFS2_MAGIC_BITMASK;
- rd->nodetype = JFFS2_NODETYPE_DIRENT;
- rd->totlen = sizeof(*rd) + namelen;
- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
-
- rd->pino = dir_f->inocache->ino;
- rd->version = ++dir_f->highest_version;
- rd->ino = ino;
- rd->mctime = CURRENT_TIME;
+ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+ rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+ rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+
+ rd->pino = cpu_to_je32(dir_f->inocache->ino);
+ rd->version = cpu_to_je32(++dir_f->highest_version);
+ rd->ino = cpu_to_je32(ino);
+ rd->mctime = cpu_to_je32(CURRENT_TIME);
rd->nsize = namelen;
rd->type = type;
- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
- rd->name_crc = crc32(0, name, namelen);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, NULL);
More information about the linux-mtd-cvs
mailing list