diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2010-08-22 00:10:12 -0400 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2010-08-30 03:19:08 -0400 |
commit | ba2f48f70efcf4d82deafb2be327ed64b1f043a5 (patch) | |
tree | a05dd8287bb6588117f2a2a921b54f8ebf3425f4 /fs/ubifs/tnc.c | |
parent | 5b7a3a2e1b0cbc7d5410a8da60dac266a3e19268 (diff) |
UBIFS: mark unused key objects as invalid
When scanning the flash, UBIFS builds a list of flash nodes of type
'struct ubifs_scan_node'. Each scanned node has a 'snod->key' field. This field
is valid for most of the nodes, but invalid for some node type, e.g., truncation
nodes. It is safer to explicitly initialize such keys to something invalid,
rather than leaving them initialized to all zeros, which has key type of
UBIFS_INO_KEY.
This patch introduces new "fake" key type UBIFS_INVALID_KEY and initializes
unused 'snod->key' objects to this type. It also adds debugging assertions in
the TNC code to make sure no one ever tries to look these nodes up in the TNC.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'fs/ubifs/tnc.c')
-rw-r--r-- | fs/ubifs/tnc.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index 2194915220e5..ad9cf0133622 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c | |||
@@ -1177,6 +1177,7 @@ int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key, | |||
1177 | unsigned long time = get_seconds(); | 1177 | unsigned long time = get_seconds(); |
1178 | 1178 | ||
1179 | dbg_tnc("search key %s", DBGKEY(key)); | 1179 | dbg_tnc("search key %s", DBGKEY(key)); |
1180 | ubifs_assert(key_type(c, key) < UBIFS_INVALID_KEY); | ||
1180 | 1181 | ||
1181 | znode = c->zroot.znode; | 1182 | znode = c->zroot.znode; |
1182 | if (unlikely(!znode)) { | 1183 | if (unlikely(!znode)) { |
@@ -2966,7 +2967,7 @@ static struct ubifs_znode *right_znode(struct ubifs_info *c, | |||
2966 | * | 2967 | * |
2967 | * This function searches an indexing node by its first key @key and its | 2968 | * This function searches an indexing node by its first key @key and its |
2968 | * address @lnum:@offs. It looks up the indexing tree by pulling all indexing | 2969 | * address @lnum:@offs. It looks up the indexing tree by pulling all indexing |
2969 | * nodes it traverses to TNC. This function is called fro indexing nodes which | 2970 | * nodes it traverses to TNC. This function is called for indexing nodes which |
2970 | * were found on the media by scanning, for example when garbage-collecting or | 2971 | * were found on the media by scanning, for example when garbage-collecting or |
2971 | * when doing in-the-gaps commit. This means that the indexing node which is | 2972 | * when doing in-the-gaps commit. This means that the indexing node which is |
2972 | * looked for does not have to have exactly the same leftmost key @key, because | 2973 | * looked for does not have to have exactly the same leftmost key @key, because |
@@ -2988,6 +2989,8 @@ static struct ubifs_znode *lookup_znode(struct ubifs_info *c, | |||
2988 | struct ubifs_znode *znode, *zn; | 2989 | struct ubifs_znode *znode, *zn; |
2989 | int n, nn; | 2990 | int n, nn; |
2990 | 2991 | ||
2992 | ubifs_assert(key_type(c, key) < UBIFS_INVALID_KEY); | ||
2993 | |||
2991 | /* | 2994 | /* |
2992 | * The arguments have probably been read off flash, so don't assume | 2995 | * The arguments have probably been read off flash, so don't assume |
2993 | * they are valid. | 2996 | * they are valid. |