projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix negative hash problem
[yaffs2.git]
/
yaffs_guts.c
diff --git
a/yaffs_guts.c
b/yaffs_guts.c
index 6c109c7374279abf1471bb16042d144e9162597b..0ab8d8a051dcf81706e0f6ffce91e167ba144fe8 100644
(file)
--- a/
yaffs_guts.c
+++ b/
yaffs_guts.c
@@
-13,7
+13,7
@@
*/
const char *yaffs_guts_c_version =
*/
const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.2
5 2005-12-08 00:51:15
charles Exp $";
+ "$Id: yaffs_guts.c,v 1.2
8 2006-02-02 22:14:44
charles Exp $";
#include "yportenv.h"
#include "yportenv.h"
@@
-335,6
+335,7
@@
static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
static Y_INLINE int yaffs_HashFunction(int n)
{
static Y_INLINE int yaffs_HashFunction(int n)
{
+ n = abs(n);
return (n % YAFFS_NOBJECT_BUCKETS);
}
return (n % YAFFS_NOBJECT_BUCKETS);
}
@@
-4437,7
+4438,7
@@
static int yaffs_ScanBackwards(yaffs_Device * dev)
yaffs_Object *in;
yaffs_Object *parent;
int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
yaffs_Object *in;
yaffs_Object *parent;
int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-
+ int itsUnlinked;
__u8 *chunkData;
yaffs_BlockIndex *blockIndex = NULL;
__u8 *chunkData;
yaffs_BlockIndex *blockIndex = NULL;
@@
-4847,11
+4848,8
@@
static int yaffs_ScanBackwards(yaffs_Device * dev)
yaffs_AddObjectToDirectory(parent, in);
yaffs_AddObjectToDirectory(parent, in);
- if ((parent == dev->deletedDir ||
- parent == dev->unlinkedDir)) {
- /* If it is unlinked at start up then it wants deleting */
- in->deleted = 1;
- }
+ itsUnlinked = (parent == dev->deletedDir) ||
+ (parent == dev->unlinkedDir);
if (oh->isShrink) {
/* Mark the block as having a shrinkHeader */
if (oh->isShrink) {
/* Mark the block as having a shrinkHeader */
@@
-4894,11
+4892,13
@@
static int yaffs_ScanBackwards(yaffs_Device * dev)
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
- in->variant.hardLinkVariant.equivalentObjectId =
+ if(!itsUnlinked) {
+ in->variant.hardLinkVariant.equivalentObjectId =
oh->equivalentObjectId;
oh->equivalentObjectId;
- in->hardLinks.next =
+
in->hardLinks.next =
(struct list_head *) hardList;
(struct list_head *) hardList;
- hardList = in;
+ hardList = in;
+ }
break;
case YAFFS_OBJECT_TYPE_DIRECTORY:
/* Do nothing */
break;
case YAFFS_OBJECT_TYPE_DIRECTORY:
/* Do nothing */