^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * JFFS2 -- Journalling Flash File System, Version 2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Zoltan Sogor <weth@inf.u-szeged.hu>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Patrik Kluba <pajko@halom.u-szeged.hu>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * University of Szeged, Hungary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * For licensing information, see the file 'LICENCE' in this directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #ifndef JFFS2_SUMMARY_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define JFFS2_SUMMARY_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /* Limit summary size to 64KiB so that we can kmalloc it. If the summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) is larger than that, we have to just ditch it and avoid using summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) for the eraseblock in question... and it probably doesn't hurt us much
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) anyway. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define MAX_SUMMARY_SIZE 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include <linux/uio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include <linux/jffs2.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define BLK_STATE_ALLFF 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define BLK_STATE_CLEAN 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define BLK_STATE_PARTDIRTY 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define BLK_STATE_CLEANMARKER 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define BLK_STATE_ALLDIRTY 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define BLK_STATE_BADBLOCK 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define JFFS2_SUMMARY_NOSUM_SIZE 0xffffffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define JFFS2_SUMMARY_INODE_SIZE (sizeof(struct jffs2_sum_inode_flash))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define JFFS2_SUMMARY_DIRENT_SIZE(x) (sizeof(struct jffs2_sum_dirent_flash) + (x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define JFFS2_SUMMARY_XATTR_SIZE (sizeof(struct jffs2_sum_xattr_flash))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define JFFS2_SUMMARY_XREF_SIZE (sizeof(struct jffs2_sum_xref_flash))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /* Summary structures used on flash */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct jffs2_sum_unknown_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) jint16_t nodetype; /* node type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct jffs2_sum_inode_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) jint16_t nodetype; /* node type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) jint32_t inode; /* inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) jint32_t version; /* inode version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) jint32_t offset; /* offset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) jint32_t totlen; /* record length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) struct jffs2_sum_dirent_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) jint16_t nodetype; /* == JFFS_NODETYPE_DIRENT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) jint32_t totlen; /* record length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) jint32_t offset; /* offset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) jint32_t pino; /* parent inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) jint32_t version; /* dirent version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) jint32_t ino; /* == zero for unlink */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) uint8_t nsize; /* dirent name size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) uint8_t type; /* dirent type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) uint8_t name[]; /* dirent name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) struct jffs2_sum_xattr_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) jint16_t nodetype; /* == JFFS2_NODETYPE_XATR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) jint32_t xid; /* xattr identifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) jint32_t version; /* version number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) jint32_t offset; /* offset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) jint32_t totlen; /* node length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) struct jffs2_sum_xref_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) jint16_t nodetype; /* == JFFS2_NODETYPE_XREF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) jint32_t offset; /* offset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) union jffs2_sum_flash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) struct jffs2_sum_unknown_flash u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct jffs2_sum_inode_flash i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) struct jffs2_sum_dirent_flash d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) struct jffs2_sum_xattr_flash x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) struct jffs2_sum_xref_flash r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* Summary structures used in the memory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) struct jffs2_sum_unknown_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) union jffs2_sum_mem *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) jint16_t nodetype; /* node type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) struct jffs2_sum_inode_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) union jffs2_sum_mem *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) jint16_t nodetype; /* node type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) jint32_t inode; /* inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) jint32_t version; /* inode version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) jint32_t offset; /* offset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) jint32_t totlen; /* record length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct jffs2_sum_dirent_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) union jffs2_sum_mem *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) jint16_t nodetype; /* == JFFS_NODETYPE_DIRENT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) jint32_t totlen; /* record length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) jint32_t offset; /* ofset on jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) jint32_t pino; /* parent inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) jint32_t version; /* dirent version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) jint32_t ino; /* == zero for unlink */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) uint8_t nsize; /* dirent name size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) uint8_t type; /* dirent type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) uint8_t name[]; /* dirent name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct jffs2_sum_xattr_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) union jffs2_sum_mem *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) jint16_t nodetype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) jint32_t xid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) jint32_t version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) jint32_t offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) jint32_t totlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct jffs2_sum_xref_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) union jffs2_sum_mem *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) jint16_t nodetype;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) jint32_t offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) union jffs2_sum_mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct jffs2_sum_unknown_mem u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) struct jffs2_sum_inode_mem i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct jffs2_sum_dirent_mem d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) struct jffs2_sum_xattr_mem x;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) struct jffs2_sum_xref_mem r;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* Summary related information stored in superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) struct jffs2_summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) uint32_t sum_size; /* collected summary information for nextblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) uint32_t sum_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) uint32_t sum_padded;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) union jffs2_sum_mem *sum_list_head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) union jffs2_sum_mem *sum_list_tail;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) jint32_t *sum_buf; /* buffer for writing out summary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /* Summary marker is stored at the end of every sumarized erase block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) struct jffs2_sum_marker
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) jint32_t offset; /* offset of the summary node in the jeb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) jint32_t magic; /* == JFFS2_SUM_MAGIC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define JFFS2_SUMMARY_FRAME_SIZE (sizeof(struct jffs2_raw_summary) + sizeof(struct jffs2_sum_marker))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #ifdef CONFIG_JFFS2_SUMMARY /* SUMMARY SUPPORT ENABLED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define jffs2_sum_active() (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) int jffs2_sum_init(struct jffs2_sb_info *c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) void jffs2_sum_exit(struct jffs2_sb_info *c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) void jffs2_sum_disable_collecting(struct jffs2_summary *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) int jffs2_sum_is_disabled(struct jffs2_summary *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) void jffs2_sum_reset_collected(struct jffs2_summary *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) void jffs2_sum_move_collected(struct jffs2_sb_info *c, struct jffs2_summary *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) int jffs2_sum_add_kvec(struct jffs2_sb_info *c, const struct kvec *invecs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) unsigned long count, uint32_t to);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) int jffs2_sum_write_sumnode(struct jffs2_sb_info *c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) int jffs2_sum_add_padding_mem(struct jffs2_summary *s, uint32_t size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) int jffs2_sum_add_inode_mem(struct jffs2_summary *s, struct jffs2_raw_inode *ri, uint32_t ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) int jffs2_sum_add_dirent_mem(struct jffs2_summary *s, struct jffs2_raw_dirent *rd, uint32_t ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) int jffs2_sum_add_xattr_mem(struct jffs2_summary *s, struct jffs2_raw_xattr *rx, uint32_t ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) int jffs2_sum_add_xref_mem(struct jffs2_summary *s, struct jffs2_raw_xref *rr, uint32_t ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct jffs2_raw_summary *summary, uint32_t sumlen,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) uint32_t *pseudo_random);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #else /* SUMMARY DISABLED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define jffs2_sum_active() (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define jffs2_sum_init(a) (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define jffs2_sum_exit(a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define jffs2_sum_disable_collecting(a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define jffs2_sum_is_disabled(a) (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define jffs2_sum_reset_collected(a)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define jffs2_sum_add_kvec(a,b,c,d) (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define jffs2_sum_move_collected(a,b)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define jffs2_sum_write_sumnode(a) (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define jffs2_sum_add_padding_mem(a,b)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define jffs2_sum_add_inode_mem(a,b,c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define jffs2_sum_add_dirent_mem(a,b,c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define jffs2_sum_add_xattr_mem(a,b,c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define jffs2_sum_add_xref_mem(a,b,c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define jffs2_sum_scan_sumnode(a,b,c,d,e) (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #endif /* CONFIG_JFFS2_SUMMARY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #endif /* JFFS2_SUMMARY_H */