|
Hard Link problem: msg#00057linux.file-systems.yaffs
Hi all,
I had a problem related with hard link in yaffs2.
A problem occured in the following two deleted objects.
yaffs_Object obj1
variantType = YAFFS_OBJECT_TYPE_HARDLINK
objectId = 6036
variant.hardLinkVariant.equivalentObjectId = 6010
deleted = 1
yaffs_Object obj2
variantType = YAFFS_OBJECT_TYPE_HARDLINK
objectId = 5816
variant.hardLinkVariant.equivalentObjectId = 6036
deleted = 1
An error took place in the function yaffs_ScanBackwards.
Line 4896
case YAFFS_OBJECT_TYPE_HARDLINK: in->variant.hardLinkVariant.equivalentObjectId = oh->equivalentObjectId; in->hardLinks.next = (struct list_head *) hardList; hardList = in; break;
Obj1 was the first object to be executed in the previous code. Therefore, obj1->hardLinks.next = NULL; Because hardList was initialized to NULL in line 4432.
This makes an error in the following code.
Line 4953 if (in) { /* Add the hardlink pointers */ hl->variant.hardLinkVariant.equivalentObject = in; list_add(&hl->hardLinks, &in->hardLinks); } else { /* Todo Need to report/handle this better. * Got a problem... hardlink to a non-existant object */ hl->variant.hardLinkVariant.equivalentObject = NULL; INIT_LIST_HEAD(&hl->hardLinks);
}
In line 4956, there is list_add(&hl->hardLinks, &in->hardLinks). In this case, "in" can be obj1 and "hl" can be obj2. But obj1->hardLinks.next was initialized to NULL in line 4899. So NULL pointer is referenced in list_add.
This problem was caused because a deleted hard link referred to the other deleted hard link. The other reason is that deleted hard links were set up.
I solved this problem like this.
4897,4901c4897,4904 < in->variant.hardLinkVariant.equivalentObjectId = < oh->equivalentObjectId; < in->hardLinks.next = < (struct list_head *) hardList; < hardList = in; --- > if (in->deleted == 0) > { > in->variant.hardLinkVariant.equivalentObjectId = > oh->equivalentObjectId; > in->hardLinks.next = > (struct list_head *) hardList; > hardList = in; > }
Is it necessary to set up hard links about deleted hard links files? yaffs mailing list yaffs@xxxxxxxxxxxxxxxxxxxxxx http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Lost blocks: 00057, Charles Manning |
|---|---|
| Next by Date: | can't see files after umount: 00057, yuri . golovach |
| Previous by Thread: | Re: [YAFFS1] Some bits are changed - systematicallyi: 00057, Martin Egholm Nielsen |
| Next by Thread: | Re: Hard Link problem: 00057, Charles Manning |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |