=============================================================================== 4000a7b0 <__jffs2_dbg_acct_sanity_check>: void __jffs2_dbg_acct_sanity_check(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) { spin_lock(&c->erase_completion_lock); jffs2_dbg_acct_sanity_check_nolock(c, jeb); 4000a7b0: e9dff06f j 4000a64c <__jffs2_dbg_acct_sanity_check_nolock> <== NOT EXECUTED =============================================================================== 4000a64c <__jffs2_dbg_acct_sanity_check_nolock>: #ifdef JFFS2_DBG_SANITY_CHECKS void __jffs2_dbg_acct_sanity_check_nolock(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) { 4000a64c: fe010113 addi sp,sp,-32 4000a650: 00812c23 sw s0,24(sp) 4000a654: 00112e23 sw ra,28(sp) 4000a658: 00912a23 sw s1,20(sp) 4000a65c: 01212823 sw s2,16(sp) 4000a660: 00050413 mv s0,a0 if (unlikely(jeb && jeb->used_size + jeb->dirty_size + 4000a664: 02058a63 beqz a1,4000a698 <__jffs2_dbg_acct_sanity_check_nolock+0x4c><== NEVER TAKEN 4000a668: 00058493 mv s1,a1 4000a66c: 0145a783 lw a5,20(a1) 4000a670: 0185a583 lw a1,24(a1) 4000a674: 0204a703 lw a4,32(s1) 4000a678: 01c4a603 lw a2,28(s1) 4000a67c: 0104a683 lw a3,16(s1) 4000a680: 00b787b3 add a5,a5,a1 4000a684: 00e787b3 add a5,a5,a4 4000a688: 03452703 lw a4,52(a0) 4000a68c: 00c787b3 add a5,a5,a2 4000a690: 00d787b3 add a5,a5,a3 4000a694: 0ce79063 bne a5,a4,4000a754 <__jffs2_dbg_acct_sanity_check_nolock+0x108> jeb->free_size, jeb->dirty_size, jeb->used_size, jeb->wasted_size, jeb->unchecked_size, c->sector_size); BUG(); } if (unlikely(c->used_size + c->dirty_size + c->free_size + c->erasing_size + c->bad_size 4000a698: 02042603 lw a2,32(s0) 4000a69c: 01c42783 lw a5,28(s0) 4000a6a0: 02842683 lw a3,40(s0) 4000a6a4: 02c42583 lw a1,44(s0) 4000a6a8: 03042703 lw a4,48(s0) 4000a6ac: 00c787b3 add a5,a5,a2 4000a6b0: 00d787b3 add a5,a5,a3 4000a6b4: 02442603 lw a2,36(s0) 4000a6b8: 03842683 lw a3,56(s0) 4000a6bc: 00b787b3 add a5,a5,a1 4000a6c0: 00e787b3 add a5,a5,a4 4000a6c4: 01842703 lw a4,24(s0) 4000a6c8: 00c787b3 add a5,a5,a2 4000a6cc: 00d787b3 add a5,a5,a3 4000a6d0: 00e79e63 bne a5,a4,4000a6ec <__jffs2_dbg_acct_sanity_check_nolock+0xa0> JFFS2_ERROR("free %#08x + dirty %#08x + used %#08x + erasing %#08x + bad %#08x + wasted %#08x + unchecked %#08x != total %#08x.\n", c->free_size, c->dirty_size, c->used_size, c->erasing_size, c->bad_size, c->wasted_size, c->unchecked_size, c->flash_size); BUG(); } } 4000a6d4: 01c12083 lw ra,28(sp) 4000a6d8: 01812403 lw s0,24(sp) 4000a6dc: 01412483 lw s1,20(sp) 4000a6e0: 01012903 lw s2,16(sp) 4000a6e4: 02010113 addi sp,sp,32 4000a6e8: 00008067 ret JFFS2_ERROR("eeep, space accounting superblock info is screwed.\n"); 4000a6ec: 400204b7 lui s1,0x40020 <== NOT EXECUTED 4000a6f0: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a6f4: 85c48593 addi a1,s1,-1956 # 4001f85c <__func__.0> <== NOT EXECUTED 4000a6f8: 78450513 addi a0,a0,1924 # 4001f784 <== NOT EXECUTED 4000a6fc: f11ff0ef jal ra,4000a60c <== NOT EXECUTED JFFS2_ERROR("free %#08x + dirty %#08x + used %#08x + erasing %#08x + bad %#08x + wasted %#08x + unchecked %#08x != total %#08x.\n", 4000a700: 03842503 lw a0,56(s0) <== NOT EXECUTED 4000a704: 01842303 lw t1,24(s0) <== NOT EXECUTED 4000a708: 02042683 lw a3,32(s0) <== NOT EXECUTED 4000a70c: 02842603 lw a2,40(s0) <== NOT EXECUTED 4000a710: 02442883 lw a7,36(s0) <== NOT EXECUTED 4000a714: 03042803 lw a6,48(s0) <== NOT EXECUTED 4000a718: 02c42783 lw a5,44(s0) <== NOT EXECUTED 4000a71c: 01c42703 lw a4,28(s0) <== NOT EXECUTED 4000a720: 00a12023 sw a0,0(sp) <== NOT EXECUTED 4000a724: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a728: 85c48593 addi a1,s1,-1956 <== NOT EXECUTED 4000a72c: 00612223 sw t1,4(sp) <== NOT EXECUTED 4000a730: 7d050513 addi a0,a0,2000 # 4001f7d0 <== NOT EXECUTED 4000a734: ed9ff0ef jal ra,4000a60c <== NOT EXECUTED BUG(); 4000a738: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 4000a73c: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a740: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 4000a744: 85c48613 addi a2,s1,-1956 <== NOT EXECUTED 4000a748: 03100593 li a1,49 <== NOT EXECUTED 4000a74c: 75850513 addi a0,a0,1880 # 4001f758 <== NOT EXECUTED 4000a750: 351020ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED JFFS2_ERROR("eeep, space accounting for block at 0x%08x is screwed.\n", jeb->offset); 4000a754: 00c4a603 lw a2,12(s1) <== NOT EXECUTED 4000a758: 40020937 lui s2,0x40020 <== NOT EXECUTED 4000a75c: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a760: 85c90593 addi a1,s2,-1956 # 4001f85c <__func__.0> <== NOT EXECUTED 4000a764: 69850513 addi a0,a0,1688 # 4001f698 <== NOT EXECUTED 4000a768: ea5ff0ef jal ra,4000a60c <== NOT EXECUTED JFFS2_ERROR("free %#08x + dirty %#08x + used %#08x + wasted %#08x + unchecked %#08x != total %#08x.\n", 4000a76c: 0184a683 lw a3,24(s1) <== NOT EXECUTED 4000a770: 0204a603 lw a2,32(s1) <== NOT EXECUTED 4000a774: 03442883 lw a7,52(s0) <== NOT EXECUTED 4000a778: 0104a803 lw a6,16(s1) <== NOT EXECUTED 4000a77c: 01c4a783 lw a5,28(s1) <== NOT EXECUTED 4000a780: 0144a703 lw a4,20(s1) <== NOT EXECUTED 4000a784: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a788: 85c90593 addi a1,s2,-1956 <== NOT EXECUTED 4000a78c: 6e850513 addi a0,a0,1768 # 4001f6e8 <== NOT EXECUTED 4000a790: e7dff0ef jal ra,4000a60c <== NOT EXECUTED BUG(); 4000a794: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 4000a798: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a79c: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 4000a7a0: 85c90613 addi a2,s2,-1956 <== NOT EXECUTED 4000a7a4: 02800593 li a1,40 <== NOT EXECUTED 4000a7a8: 75850513 addi a0,a0,1880 # 4001f758 <== NOT EXECUTED 4000a7ac: 2f5020ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED =============================================================================== 40005824 <__jffs2_ref_totlen>: jeb = &c->blocks[ref->flash_offset / c->sector_size]; 40005824: 00462703 lw a4,4(a2) if (ref->flash_offset == REF_LINK_NODE) { 40005828: 00c62783 lw a5,12(a2) 4000582c: fff00693 li a3,-1 } uint32_t __jffs2_ref_totlen(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, struct jffs2_raw_node_ref *ref) { 40005830: 00060813 mv a6,a2 pr_crit("ref %p @0x%08x is not jeb->last_node (%p @0x%08x)\n", 40005834: ffc77613 andi a2,a4,-4 40005838: 00d78c63 beq a5,a3,40005850 <__jffs2_ref_totlen+0x2c> if (ref->flash_offset == REF_EMPTY_NODE) 4000583c: ffe00693 li a3,-2 40005840: 02d78063 beq a5,a3,40005860 <__jffs2_ref_totlen+0x3c> ref_end = ref_offset(next_ref); 40005844: ffc7f513 andi a0,a5,-4 ret = ref->__totlen; } #endif /* TEST_TOTLEN */ return ret; } 40005848: 40c50533 sub a0,a0,a2 4000584c: 00008067 ret ref = ref->next_in_ino; 40005850: 00882783 lw a5,8(a6) if (!ref) 40005854: 00078663 beqz a5,40005860 <__jffs2_ref_totlen+0x3c> <== NEVER TAKEN if (ref->flash_offset == REF_EMPTY_NODE) 40005858: 0047a783 lw a5,4(a5) 4000585c: fe1ff06f j 4000583c <__jffs2_ref_totlen+0x18> if (!jeb) 40005860: 02058463 beqz a1,40005888 <__jffs2_ref_totlen+0x64> <== NEVER TAKEN if (unlikely(ref != jeb->last_node)) { 40005864: 02c5a683 lw a3,44(a1) 40005868: 02d81e63 bne a6,a3,400058a4 <__jffs2_ref_totlen+0x80> ref_end = jeb->offset + c->sector_size - jeb->free_size; 4000586c: 03452703 lw a4,52(a0) 40005870: 00c5a783 lw a5,12(a1) 40005874: 0205a503 lw a0,32(a1) 40005878: 00e787b3 add a5,a5,a4 4000587c: 40a78533 sub a0,a5,a0 } 40005880: 40c50533 sub a0,a0,a2 40005884: 00008067 ret jeb = &c->blocks[ref->flash_offset / c->sector_size]; 40005888: 03452783 lw a5,52(a0) <== NOT EXECUTED 4000588c: 05452583 lw a1,84(a0) <== NOT EXECUTED 40005890: 02f75733 divu a4,a4,a5 <== NOT EXECUTED 40005894: 03400793 li a5,52 <== NOT EXECUTED 40005898: 02f70733 mul a4,a4,a5 <== NOT EXECUTED 4000589c: 00e585b3 add a1,a1,a4 <== NOT EXECUTED 400058a0: fc5ff06f j 40005864 <__jffs2_ref_totlen+0x40> <== NOT EXECUTED { 400058a4: ff010113 addi sp,sp,-16 <== NOT EXECUTED 400058a8: 00112623 sw ra,12(sp) <== NOT EXECUTED pr_crit("ref %p @0x%08x is not jeb->last_node (%p @0x%08x)\n", 400058ac: 02068e63 beqz a3,400058e8 <__jffs2_ref_totlen+0xc4> <== NOT EXECUTED 400058b0: 0046a703 lw a4,4(a3) <== NOT EXECUTED 400058b4: ffc77713 andi a4,a4,-4 <== NOT EXECUTED 400058b8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400058bc: 00080593 mv a1,a6 <== NOT EXECUTED 400058c0: edc50513 addi a0,a0,-292 # 4001dedc <__func__.4+0x178> <== NOT EXECUTED 400058c4: 954ff0ef jal ra,40004a18 <== NOT EXECUTED BUG(); 400058c8: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 400058cc: 4001e637 lui a2,0x4001e <== NOT EXECUTED 400058d0: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400058d4: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 400058d8: f1c60613 addi a2,a2,-228 # 4001df1c <__func__.0> <== NOT EXECUTED 400058dc: 2c900593 li a1,713 <== NOT EXECUTED 400058e0: db850513 addi a0,a0,-584 # 4001ddb8 <__func__.4+0x54> <== NOT EXECUTED 400058e4: 1bd070ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED pr_crit("ref %p @0x%08x is not jeb->last_node (%p @0x%08x)\n", 400058e8: 00000713 li a4,0 <== NOT EXECUTED 400058ec: fcdff06f j 400058b8 <__jffs2_ref_totlen+0x94> <== NOT EXECUTED =============================================================================== 40004af8 : { 40004af8: fe010113 addi sp,sp,-32 40004afc: 00812c23 sw s0,24(sp) while ((*prev) && (*prev)->nhash <= new->nhash) { 40004b00: 00062403 lw s0,0(a2) { 40004b04: 01212823 sw s2,16(sp) 40004b08: 01312623 sw s3,12(sp) 40004b0c: 00112e23 sw ra,28(sp) 40004b10: 00912a23 sw s1,20(sp) 40004b14: 01412423 sw s4,8(sp) 40004b18: 01512223 sw s5,4(sp) 40004b1c: 00060913 mv s2,a2 40004b20: 00058993 mv s3,a1 while ((*prev) && (*prev)->nhash <= new->nhash) { 40004b24: 06040a63 beqz s0,40004b98 40004b28: 0105a483 lw s1,16(a1) 40004b2c: 00050a93 mv s5,a0 if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) { 40004b30: 01558a13 addi s4,a1,21 40004b34: 0100006f j 40004b44 prev = &((*prev)->next); 40004b38: 00440913 addi s2,s0,4 while ((*prev) && (*prev)->nhash <= new->nhash) { 40004b3c: 00442403 lw s0,4(s0) 40004b40: 04040c63 beqz s0,40004b98 40004b44: 01042783 lw a5,16(s0) 40004b48: 04f4e863 bltu s1,a5,40004b98 if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) { 40004b4c: fe9796e3 bne a5,s1,40004b38 40004b50: 01540513 addi a0,s0,21 40004b54: 000a0593 mv a1,s4 40004b58: 029170ef jal ra,4001c380 40004b5c: fc051ee3 bnez a0,40004b38 <== NEVER TAKEN if (new->version < (*prev)->version) { 40004b60: 0089a703 lw a4,8(s3) 40004b64: 00842783 lw a5,8(s0) 40004b68: 04f76e63 bltu a4,a5,40004bc4 new->next = (*prev)->next; 40004b6c: 00442783 lw a5,4(s0) 40004b70: 00f9a223 sw a5,4(s3) if ((*prev)->raw) 40004b74: 00092503 lw a0,0(s2) 40004b78: 00052583 lw a1,0(a0) 40004b7c: 00058863 beqz a1,40004b8c jffs2_mark_node_obsolete(c, ((*prev)->raw)); 40004b80: 000a8513 mv a0,s5 40004b84: 719000ef jal ra,40005a9c jffs2_free_full_dirent(*prev); 40004b88: 00092503 lw a0,0(s2) 40004b8c: cedff0ef jal ra,40004878 *prev = new; 40004b90: 01392023 sw s3,0(s2) 40004b94: 00c0006f j 40004ba0 new->next = *prev; 40004b98: 0089a223 sw s0,4(s3) *prev = new; 40004b9c: 01392023 sw s3,0(s2) } 40004ba0: 01c12083 lw ra,28(sp) 40004ba4: 01812403 lw s0,24(sp) 40004ba8: 01412483 lw s1,20(sp) 40004bac: 01012903 lw s2,16(sp) 40004bb0: 00c12983 lw s3,12(sp) 40004bb4: 00812a03 lw s4,8(sp) 40004bb8: 00412a83 lw s5,4(sp) 40004bbc: 02010113 addi sp,sp,32 40004bc0: 00008067 ret jffs2_mark_node_obsolete(c, new->raw); 40004bc4: 0009a583 lw a1,0(s3) <== NOT EXECUTED 40004bc8: 000a8513 mv a0,s5 <== NOT EXECUTED 40004bcc: 6d1000ef jal ra,40005a9c <== NOT EXECUTED } 40004bd0: 01812403 lw s0,24(sp) <== NOT EXECUTED 40004bd4: 01c12083 lw ra,28(sp) <== NOT EXECUTED 40004bd8: 01412483 lw s1,20(sp) <== NOT EXECUTED 40004bdc: 01012903 lw s2,16(sp) <== NOT EXECUTED 40004be0: 00812a03 lw s4,8(sp) <== NOT EXECUTED 40004be4: 00412a83 lw s5,4(sp) <== NOT EXECUTED jffs2_free_full_dirent(new); 40004be8: 00098513 mv a0,s3 <== NOT EXECUTED } 40004bec: 00c12983 lw s3,12(sp) <== NOT EXECUTED 40004bf0: 02010113 addi sp,sp,32 <== NOT EXECUTED jffs2_free_full_dirent(new); 40004bf4: c85ff06f j 40004878 <== NOT EXECUTED =============================================================================== 40004d78 : { 40004d78: fd010113 addi sp,sp,-48 40004d7c: 01812423 sw s8,8(sp) if (unlikely(!fn->size)) 40004d80: 00862c03 lw s8,8(a2) { 40004d84: 02112623 sw ra,44(sp) 40004d88: 02812423 sw s0,40(sp) 40004d8c: 02912223 sw s1,36(sp) 40004d90: 03212023 sw s2,32(sp) 40004d94: 01312e23 sw s3,28(sp) 40004d98: 01412c23 sw s4,24(sp) 40004d9c: 01512a23 sw s5,20(sp) 40004da0: 01612823 sw s6,16(sp) 40004da4: 01712623 sw s7,12(sp) 40004da8: 01912223 sw s9,4(sp) if (unlikely(!fn->size)) 40004dac: 020c1e63 bnez s8,40004de8 <== ALWAYS TAKEN return 0; 40004db0: 00000513 li a0,0 } 40004db4: 02c12083 lw ra,44(sp) 40004db8: 02812403 lw s0,40(sp) 40004dbc: 02412483 lw s1,36(sp) 40004dc0: 02012903 lw s2,32(sp) 40004dc4: 01c12983 lw s3,28(sp) 40004dc8: 01812a03 lw s4,24(sp) 40004dcc: 01412a83 lw s5,20(sp) 40004dd0: 01012b03 lw s6,16(sp) 40004dd4: 00c12b83 lw s7,12(sp) 40004dd8: 00812c03 lw s8,8(sp) 40004ddc: 00412c83 lw s9,4(sp) 40004de0: 03010113 addi sp,sp,48 40004de4: 00008067 ret newfrag = new_fragment(fn, fn->ofs, fn->size); 40004de8: 00462c83 lw s9,4(a2) 40004dec: 00060a13 mv s4,a2 40004df0: 00050b13 mv s6,a0 40004df4: 00058b93 mv s7,a1 newfrag = jffs2_alloc_node_frag(); 40004df8: b9dff0ef jal ra,40004994 40004dfc: 00050913 mv s2,a0 if (likely(newfrag)) { 40004e00: 32050e63 beqz a0,4000513c <== NEVER TAKEN next = fragtree->rb_node; 40004e04: 004ba403 lw s0,4(s7) newfrag->node->frags = 1; 40004e08: 00100713 li a4,1 newfrag->ofs = ofs; 40004e0c: 01952c23 sw s9,24(a0) newfrag->size = size; 40004e10: 01852a23 sw s8,20(a0) newfrag->node = fn; 40004e14: 01452823 sw s4,16(a0) newfrag->node->frags = 1; 40004e18: 00ea2623 sw a4,12(s4) this = jffs2_lookup_node_frag(root, newfrag->node->ofs); 40004e1c: 004a2983 lw s3,4(s4) ret = jffs2_add_frag_to_fragtree(c, &f->fragtree, newfrag); 40004e20: 004b8a93 addi s5,s7,4 struct jffs2_node_frag *prev = NULL; 40004e24: 00000713 li a4,0 while(next) { 40004e28: 14040863 beqz s0,40004f78 if (frag->ofs + frag->size <= offset) { 40004e2c: 01842783 lw a5,24(s0) 40004e30: 01442483 lw s1,20(s0) 40004e34: 009784b3 add s1,a5,s1 40004e38: 1299e863 bltu s3,s1,40004f68 if (!prev || frag->ofs > prev->ofs) 40004e3c: 00070663 beqz a4,40004e48 40004e40: 01872683 lw a3,24(a4) 40004e44: 00f6f463 bgeu a3,a5,40004e4c 40004e48: 00040713 mv a4,s0 next = frag->rb.rb_right; 40004e4c: 00442403 lw s0,4(s0) while(next) { 40004e50: fc041ee3 bnez s0,40004e2c if (this) { 40004e54: 12070263 beqz a4,40004f78 <== NEVER TAKEN lastend = this->ofs + this->size; 40004e58: 01872783 lw a5,24(a4) 40004e5c: 01472483 lw s1,20(a4) 40004e60: 00070413 mv s0,a4 40004e64: 009784b3 add s1,a5,s1 if (lastend <= newfrag->ofs) { 40004e68: 229cf863 bgeu s9,s1,40005098 if (newfrag->ofs > this->ofs) { 40004e6c: 2797fa63 bgeu a5,s9,400050e0 mark_ref_normal(newfrag->node->raw); 40004e70: 000a2683 lw a3,0(s4) if (this->node) 40004e74: 01042b83 lw s7,16(s0) mark_ref_normal(newfrag->node->raw); 40004e78: 0046a703 lw a4,4(a3) 40004e7c: 00376713 ori a4,a4,3 40004e80: 00e6a223 sw a4,4(a3) if (this->node) 40004e84: 000b8a63 beqz s7,40004e98 mark_ref_normal(this->node->raw); 40004e88: 000ba683 lw a3,0(s7) 40004e8c: 0046a703 lw a4,4(a3) 40004e90: 00376713 ori a4,a4,3 40004e94: 00e6a223 sw a4,4(a3) if (this->ofs + this->size > newfrag->ofs + newfrag->size) { 40004e98: 019c0c33 add s8,s8,s9 40004e9c: 149c7463 bgeu s8,s1,40004fe4 newfrag = jffs2_alloc_node_frag(); 40004ea0: af5ff0ef jal ra,40004994 <== NOT EXECUTED 40004ea4: 00050b13 mv s6,a0 <== NOT EXECUTED newfrag2 = new_fragment(this->node, newfrag->ofs + newfrag->size, 40004ea8: 418484b3 sub s1,s1,s8 <== NOT EXECUTED if (likely(newfrag)) { 40004eac: 28050863 beqz a0,4000513c <== NOT EXECUTED newfrag->node = fn; 40004eb0: 01752823 sw s7,16(a0) <== NOT EXECUTED if (this->node) 40004eb4: 01042783 lw a5,16(s0) <== NOT EXECUTED newfrag->ofs = ofs; 40004eb8: 01852c23 sw s8,24(a0) <== NOT EXECUTED newfrag->size = size; 40004ebc: 00952a23 sw s1,20(a0) <== NOT EXECUTED if (this->node) 40004ec0: 00078863 beqz a5,40004ed0 <== NOT EXECUTED this->node->frags++; 40004ec4: 00c7a703 lw a4,12(a5) <== NOT EXECUTED 40004ec8: 00170713 addi a4,a4,1 <== NOT EXECUTED 40004ecc: 00e7a623 sw a4,12(a5) <== NOT EXECUTED this->size = newfrag->ofs - this->ofs; 40004ed0: 01842703 lw a4,24(s0) <== NOT EXECUTED 40004ed4: 01892783 lw a5,24(s2) <== NOT EXECUTED jffs2_fragtree_insert(newfrag, this); 40004ed8: 00040593 mv a1,s0 <== NOT EXECUTED 40004edc: 00090513 mv a0,s2 <== NOT EXECUTED this->size = newfrag->ofs - this->ofs; 40004ee0: 40e787b3 sub a5,a5,a4 <== NOT EXECUTED 40004ee4: 00f42a23 sw a5,20(s0) <== NOT EXECUTED jffs2_fragtree_insert(newfrag, this); 40004ee8: b71ff0ef jal ra,40004a58 <== NOT EXECUTED _RBTree_Insert_color( (RBTree_Control *) root, node ); 40004eec: 00090593 mv a1,s2 <== NOT EXECUTED 40004ef0: 000a8513 mv a0,s5 <== NOT EXECUTED 40004ef4: 5180f0ef jal ra,4001440c <_RBTree_Insert_color> <== NOT EXECUTED jffs2_fragtree_insert(newfrag2, newfrag); 40004ef8: 00090593 mv a1,s2 <== NOT EXECUTED 40004efc: 000b0513 mv a0,s6 <== NOT EXECUTED 40004f00: b59ff0ef jal ra,40004a58 <== NOT EXECUTED 40004f04: 000b0593 mv a1,s6 <== NOT EXECUTED 40004f08: 000a8513 mv a0,s5 <== NOT EXECUTED 40004f0c: 5000f0ef jal ra,4001440c <_RBTree_Insert_color> <== NOT EXECUTED if (newfrag->ofs & (PAGE_SIZE-1)) { 40004f10: 01892683 lw a3,24(s2) <== NOT EXECUTED 40004f14: 01469793 slli a5,a3,0x14 40004f18: 08079a63 bnez a5,40004fac if ((newfrag->ofs+newfrag->size) & (PAGE_SIZE-1)) { 40004f1c: 01492783 lw a5,20(s2) 40004f20: 00f686b3 add a3,a3,a5 40004f24: 01469693 slli a3,a3,0x14 40004f28: e80684e3 beqz a3,40004db0 return _RBTree_Successor( node ); 40004f2c: 00090513 mv a0,s2 40004f30: 6f00f0ef jal ra,40014620 <_RBTree_Successor> if (next) { 40004f34: e6050ee3 beqz a0,40004db0 mark_ref_normal(fn->raw); 40004f38: 000a2703 lw a4,0(s4) if (next->node) 40004f3c: 01052683 lw a3,16(a0) mark_ref_normal(fn->raw); 40004f40: 00472783 lw a5,4(a4) 40004f44: 0037e793 ori a5,a5,3 40004f48: 00f72223 sw a5,4(a4) if (next->node) 40004f4c: e60682e3 beqz a3,40004db0 <== NEVER TAKEN mark_ref_normal(next->node->raw); 40004f50: 0006a703 lw a4,0(a3) return 0; 40004f54: 00000513 li a0,0 mark_ref_normal(next->node->raw); 40004f58: 00472783 lw a5,4(a4) 40004f5c: 0037e793 ori a5,a5,3 40004f60: 00f72223 sw a5,4(a4) 40004f64: e51ff06f j 40004db4 } else if (frag->ofs > offset) { 40004f68: f0f9f0e3 bgeu s3,a5,40004e68 next = frag->rb.rb_left; 40004f6c: 00042403 lw s0,0(s0) while(next) { 40004f70: ea041ee3 bnez s0,40004e2c <== ALWAYS TAKEN 40004f74: ee1ff06f j 40004e54 <== NOT EXECUTED if (lastend < newfrag->node->ofs) { 40004f78: 24099e63 bnez s3,400051d4 RB_SET( child, parent, Node ); 40004f7c: 00100793 li a5,1 40004f80: 00092423 sw zero,8(s2) 40004f84: 00092223 sw zero,4(s2) 40004f88: 00092023 sw zero,0(s2) 40004f8c: 00f92623 sw a5,12(s2) *link = child; 40004f90: 012ba223 sw s2,4(s7) _RBTree_Insert_color( (RBTree_Control *) root, node ); 40004f94: 00090593 mv a1,s2 40004f98: 000a8513 mv a0,s5 40004f9c: 4700f0ef jal ra,4001440c <_RBTree_Insert_color> if (newfrag->ofs & (PAGE_SIZE-1)) { 40004fa0: 01892683 lw a3,24(s2) 40004fa4: 01469793 slli a5,a3,0x14 40004fa8: f6078ae3 beqz a5,40004f1c return _RBTree_Predecessor( node ); 40004fac: 00090513 mv a0,s2 40004fb0: 6c40f0ef jal ra,40014674 <_RBTree_Predecessor> mark_ref_normal(fn->raw); 40004fb4: 000a2703 lw a4,0(s4) if (prev->node) 40004fb8: 01052683 lw a3,16(a0) mark_ref_normal(fn->raw); 40004fbc: 00472783 lw a5,4(a4) 40004fc0: 0037e793 ori a5,a5,3 40004fc4: 00f72223 sw a5,4(a4) if (prev->node) 40004fc8: 1c068c63 beqz a3,400051a0 mark_ref_normal(prev->node->raw); 40004fcc: 0006a703 lw a4,0(a3) if ((newfrag->ofs+newfrag->size) & (PAGE_SIZE-1)) { 40004fd0: 01892683 lw a3,24(s2) mark_ref_normal(prev->node->raw); 40004fd4: 00472783 lw a5,4(a4) 40004fd8: 0037e793 ori a5,a5,3 40004fdc: 00f72223 sw a5,4(a4) 40004fe0: f3dff06f j 40004f1c this->size = newfrag->ofs - this->ofs; 40004fe4: 40fc87b3 sub a5,s9,a5 jffs2_fragtree_insert(newfrag, this); 40004fe8: 00040593 mv a1,s0 40004fec: 00090513 mv a0,s2 this->size = newfrag->ofs - this->ofs; 40004ff0: 00f42a23 sw a5,20(s0) jffs2_fragtree_insert(newfrag, this); 40004ff4: a65ff0ef jal ra,40004a58 _RBTree_Insert_color( (RBTree_Control *) root, node ); 40004ff8: 00090593 mv a1,s2 40004ffc: 000a8513 mv a0,s5 40005000: 40c0f0ef jal ra,4001440c <_RBTree_Insert_color> } 40005004: 0140006f j 40005018 _RBTree_Extract( (RBTree_Control *) root, node ); 40005008: 7d90e0ef jal ra,40013fe0 <_RBTree_Extract> jffs2_obsolete_node_frag(c, this); 4000500c: 00040593 mv a1,s0 40005010: 000b0513 mv a0,s6 40005014: 999ff0ef jal ra,400049ac return _RBTree_Successor( node ); 40005018: 00090513 mv a0,s2 4000501c: 6040f0ef jal ra,40014620 <_RBTree_Successor> 40005020: 00050413 mv s0,a0 while ((this = frag_next(newfrag)) && newfrag->ofs + newfrag->size >= this->ofs + this->size) { 40005024: 01892683 lw a3,24(s2) _RBTree_Extract( (RBTree_Control *) root, node ); 40005028: 000a8513 mv a0,s5 4000502c: 00040593 mv a1,s0 40005030: ee0402e3 beqz s0,40004f14 40005034: 01492703 lw a4,20(s2) 40005038: 01842603 lw a2,24(s0) 4000503c: 01442783 lw a5,20(s0) 40005040: 00e68733 add a4,a3,a4 40005044: 00f607b3 add a5,a2,a5 40005048: fcf770e3 bgeu a4,a5,40005008 if (!this || newfrag->ofs + newfrag->size == this->ofs) 4000504c: ecc704e3 beq a4,a2,40004f14 this->size = (this->ofs + this->size) - (newfrag->ofs + newfrag->size); 40005050: 40e787b3 sub a5,a5,a4 40005054: 00f42a23 sw a5,20(s0) this->ofs = newfrag->ofs + newfrag->size; 40005058: 01492783 lw a5,20(s2) if (this->node) 4000505c: 01042703 lw a4,16(s0) this->ofs = newfrag->ofs + newfrag->size; 40005060: 00d786b3 add a3,a5,a3 40005064: 00d42c23 sw a3,24(s0) if (this->node) 40005068: 00070a63 beqz a4,4000507c <== NEVER TAKEN mark_ref_normal(this->node->raw); 4000506c: 00072703 lw a4,0(a4) 40005070: 00472783 lw a5,4(a4) 40005074: 0037e793 ori a5,a5,3 40005078: 00f72223 sw a5,4(a4) mark_ref_normal(newfrag->node->raw); 4000507c: 01092783 lw a5,16(s2) if (newfrag->ofs & (PAGE_SIZE-1)) { 40005080: 01892683 lw a3,24(s2) mark_ref_normal(newfrag->node->raw); 40005084: 0007a703 lw a4,0(a5) 40005088: 00472783 lw a5,4(a4) 4000508c: 0037e793 ori a5,a5,3 40005090: 00f72223 sw a5,4(a4) if (unlikely(ret)) 40005094: e81ff06f j 40004f14 if (lastend && (lastend-1) >> PAGE_SHIFT == newfrag->ofs >> PAGE_SHIFT) { 40005098: 00048a63 beqz s1,400050ac <== NEVER TAKEN 4000509c: fff48713 addi a4,s1,-1 400050a0: 00c75713 srli a4,a4,0xc 400050a4: 00ccd793 srli a5,s9,0xc 400050a8: 10f70063 beq a4,a5,400051a8 rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right); 400050ac: 00040b13 mv s6,s0 if (lastend < newfrag->node->ofs) { 400050b0: 0b34e463 bltu s1,s3,40005158 RB_SET( child, parent, Node ); 400050b4: 00100793 li a5,1 400050b8: 01692423 sw s6,8(s2) 400050bc: 00092223 sw zero,4(s2) 400050c0: 00092023 sw zero,0(s2) 400050c4: 00f92623 sw a5,12(s2) *link = child; 400050c8: 01242223 sw s2,4(s0) _RBTree_Insert_color( (RBTree_Control *) root, node ); 400050cc: 00090593 mv a1,s2 400050d0: 000a8513 mv a0,s5 400050d4: 3380f0ef jal ra,4001440c <_RBTree_Insert_color> if (newfrag->ofs & (PAGE_SIZE-1)) { 400050d8: 01892683 lw a3,24(s2) 400050dc: ec9ff06f j 40004fa4 struct rb_node *victim, struct rb_node *replacement, struct rb_root *root ) { _RBTree_Replace_node( 400050e0: 00090613 mv a2,s2 400050e4: 00040593 mv a1,s0 400050e8: 000a8513 mv a0,s5 400050ec: 6400f0ef jal ra,4001472c <_RBTree_Replace_node> if (newfrag->ofs + newfrag->size >= this->ofs+this->size) { 400050f0: 01492603 lw a2,20(s2) 400050f4: 01842683 lw a3,24(s0) 400050f8: 01442703 lw a4,20(s0) 400050fc: 01892783 lw a5,24(s2) 40005100: 00e685b3 add a1,a3,a4 40005104: 00f607b3 add a5,a2,a5 40005108: f0b7f2e3 bgeu a5,a1,4000500c this->ofs += newfrag->size; 4000510c: 00d606b3 add a3,a2,a3 <== NOT EXECUTED this->size -= newfrag->size; 40005110: 40c70733 sub a4,a4,a2 <== NOT EXECUTED this->ofs += newfrag->size; 40005114: 00d42c23 sw a3,24(s0) <== NOT EXECUTED this->size -= newfrag->size; 40005118: 00e42a23 sw a4,20(s0) <== NOT EXECUTED jffs2_fragtree_insert(this, newfrag); 4000511c: 00090593 mv a1,s2 <== NOT EXECUTED 40005120: 00040513 mv a0,s0 <== NOT EXECUTED 40005124: 935ff0ef jal ra,40004a58 <== NOT EXECUTED _RBTree_Insert_color( (RBTree_Control *) root, node ); 40005128: 00040593 mv a1,s0 <== NOT EXECUTED 4000512c: 000a8513 mv a0,s5 <== NOT EXECUTED 40005130: 2dc0f0ef jal ra,4001440c <_RBTree_Insert_color> <== NOT EXECUTED if (newfrag->ofs & (PAGE_SIZE-1)) { 40005134: 01892683 lw a3,24(s2) <== NOT EXECUTED 40005138: dddff06f j 40004f14 <== NOT EXECUTED JFFS2_ERROR("cannot allocate a jffs2_node_frag object\n"); 4000513c: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 40005140: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40005144: f7058593 addi a1,a1,-144 # 4001df70 <__func__.4> <== NOT EXECUTED 40005148: de850513 addi a0,a0,-536 # 4001dde8 <__func__.4+0x84> <== NOT EXECUTED 4000514c: 8cdff0ef jal ra,40004a18 <== NOT EXECUTED return -ENOMEM; 40005150: ff400513 li a0,-12 <== NOT EXECUTED 40005154: c61ff06f j 40004db4 <== NOT EXECUTED newfrag = jffs2_alloc_node_frag(); 40005158: 83dff0ef jal ra,40004994 <== NOT EXECUTED holefrag= new_fragment(NULL, lastend, newfrag->node->ofs - lastend); 4000515c: 409989b3 sub s3,s3,s1 <== NOT EXECUTED if (likely(newfrag)) { 40005160: 0a050663 beqz a0,4000520c <== NOT EXECUTED RB_SET( child, parent, Node ); 40005164: 00100793 li a5,1 <== NOT EXECUTED 40005168: 00852423 sw s0,8(a0) <== NOT EXECUTED newfrag->ofs = ofs; 4000516c: 00952c23 sw s1,24(a0) <== NOT EXECUTED newfrag->size = size; 40005170: 01352a23 sw s3,20(a0) <== NOT EXECUTED newfrag->node = fn; 40005174: 00052823 sw zero,16(a0) <== NOT EXECUTED 40005178: 00052223 sw zero,4(a0) <== NOT EXECUTED 4000517c: 00052023 sw zero,0(a0) <== NOT EXECUTED 40005180: 00f52623 sw a5,12(a0) <== NOT EXECUTED *link = child; 40005184: 00a42223 sw a0,4(s0) <== NOT EXECUTED rb_link_node(&holefrag->rb, &this->rb, &this->rb.rb_right); 40005188: 00050b13 mv s6,a0 <== NOT EXECUTED struct rb_node **link ) { _RBTree_Initialize_node( node ); _RBTree_Add_child( node, parent, link ); } 4000518c: 00050413 mv s0,a0 <== NOT EXECUTED _RBTree_Insert_color( (RBTree_Control *) root, node ); 40005190: 000b0593 mv a1,s6 40005194: 000a8513 mv a0,s5 40005198: 2740f0ef jal ra,4001440c <_RBTree_Insert_color> if (this) { 4000519c: f19ff06f j 400050b4 if ((newfrag->ofs+newfrag->size) & (PAGE_SIZE-1)) { 400051a0: 01892683 lw a3,24(s2) 400051a4: d79ff06f j 40004f1c if (this->node) 400051a8: 01042783 lw a5,16(s0) 400051ac: 00078a63 beqz a5,400051c0 <== NEVER TAKEN mark_ref_normal(this->node->raw); 400051b0: 0007a703 lw a4,0(a5) 400051b4: 00472783 lw a5,4(a4) 400051b8: 0037e793 ori a5,a5,3 400051bc: 00f72223 sw a5,4(a4) mark_ref_normal(newfrag->node->raw); 400051c0: 000a2703 lw a4,0(s4) 400051c4: 00472783 lw a5,4(a4) 400051c8: 0037e793 ori a5,a5,3 400051cc: 00f72223 sw a5,4(a4) 400051d0: eddff06f j 400050ac newfrag = jffs2_alloc_node_frag(); 400051d4: fc0ff0ef jal ra,40004994 400051d8: 00050413 mv s0,a0 if (likely(newfrag)) { 400051dc: 02050863 beqz a0,4000520c <== NEVER TAKEN RB_SET( child, parent, Node ); 400051e0: 00100793 li a5,1 newfrag->ofs = ofs; 400051e4: 00052c23 sw zero,24(a0) newfrag->size = size; 400051e8: 01352a23 sw s3,20(a0) newfrag->node = fn; 400051ec: 00052823 sw zero,16(a0) 400051f0: 00052423 sw zero,8(a0) 400051f4: 00052223 sw zero,4(a0) 400051f8: 00052023 sw zero,0(a0) 400051fc: 00f52623 sw a5,12(a0) rb_link_node(&holefrag->rb, NULL, &root->rb_node); 40005200: 00050b13 mv s6,a0 *link = child; 40005204: 00aba223 sw a0,4(s7) } 40005208: f89ff06f j 40005190 JFFS2_ERROR("cannot allocate a jffs2_node_frag object\n"); 4000520c: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 40005210: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40005214: f7058593 addi a1,a1,-144 # 4001df70 <__func__.4> <== NOT EXECUTED 40005218: de850513 addi a0,a0,-536 # 4001dde8 <__func__.4+0x84> <== NOT EXECUTED 4000521c: ffcff0ef jal ra,40004a18 <== NOT EXECUTED jffs2_free_node_frag(newfrag); 40005220: 00090513 mv a0,s2 <== NOT EXECUTED 40005224: f78ff0ef jal ra,4000499c <== NOT EXECUTED return -ENOMEM; 40005228: ff400513 li a0,-12 <== NOT EXECUTED 4000522c: b89ff06f j 40004db4 <== NOT EXECUTED =============================================================================== 40005280 : if (!new->ino) 40005280: 00c5a683 lw a3,12(a1) 40005284: 00069a63 bnez a3,40005298 new->ino = ++c->highest_ino; 40005288: 00452683 lw a3,4(a0) 4000528c: 00168693 addi a3,a3,1 40005290: 00d52223 sw a3,4(a0) 40005294: 00d5a623 sw a3,12(a1) prev = &c->inocache_list[new->ino % c->inocache_hashsize]; 40005298: 0c052783 lw a5,192(a0) 4000529c: 0c452603 lw a2,196(a0) 400052a0: 02f6f7b3 remu a5,a3,a5 400052a4: 00279793 slli a5,a5,0x2 400052a8: 00f60633 add a2,a2,a5 while ((*prev) && (*prev)->ino < new->ino) { 400052ac: 00062783 lw a5,0(a2) 400052b0: 00079a63 bnez a5,400052c4 <== NEVER TAKEN 400052b4: 0180006f j 400052cc prev = &(*prev)->next; 400052b8: 01078613 addi a2,a5,16 <== NOT EXECUTED while ((*prev) && (*prev)->ino < new->ino) { 400052bc: 0107a783 lw a5,16(a5) <== NOT EXECUTED 400052c0: 00078663 beqz a5,400052cc <== NOT EXECUTED 400052c4: 00c7a703 lw a4,12(a5) <== NOT EXECUTED 400052c8: fed768e3 bltu a4,a3,400052b8 <== NOT EXECUTED new->next = *prev; 400052cc: 00f5a823 sw a5,16(a1) *prev = new; 400052d0: 00b62023 sw a1,0(a2) } 400052d4: 00008067 ret =============================================================================== 40005930 : */ struct jffs2_raw_node_ref *jffs2_add_physical_node_ref(struct jffs2_sb_info *c, uint32_t ofs, uint32_t len, struct jffs2_inode_cache *ic) { 40005930: ff010113 addi sp,sp,-16 40005934: 00812423 sw s0,8(sp) 40005938: 00050413 mv s0,a0 struct jffs2_eraseblock *jeb; struct jffs2_raw_node_ref *new; jeb = &c->blocks[ofs / c->sector_size]; 4000593c: 03452503 lw a0,52(a0) { 40005940: 00058793 mv a5,a1 jeb = &c->blocks[ofs / c->sector_size]; 40005944: 03400813 li a6,52 40005948: 02a5d5b3 divu a1,a1,a0 { 4000594c: 00912223 sw s1,4(sp) __func__, ofs & ~3, ofs & 3, len); #if 1 /* Allow non-obsolete nodes only to be added at the end of c->nextblock, if c->nextblock is set. Note that wbuf.c will file obsolete nodes even after refiling c->nextblock */ if ((c->nextblock || ((ofs & 3) != REF_OBSOLETE)) 40005950: 05842703 lw a4,88(s0) jeb = &c->blocks[ofs / c->sector_size]; 40005954: 05442483 lw s1,84(s0) { 40005958: 00112623 sw ra,12(sp) 4000595c: 01212023 sw s2,0(sp) jeb = &c->blocks[ofs / c->sector_size]; 40005960: 030585b3 mul a1,a1,a6 40005964: 00b484b3 add s1,s1,a1 if ((c->nextblock || ((ofs & 3) != REF_OBSOLETE)) 40005968: 08070463 beqz a4,400059f0 <== NEVER TAKEN && (jeb != c->nextblock || (ofs & ~3) != jeb->offset + (c->sector_size - jeb->free_size))) { 4000596c: ffc7f593 andi a1,a5,-4 40005970: 00971c63 bne a4,s1,40005988 40005974: 00c4a803 lw a6,12(s1) 40005978: 0204a703 lw a4,32(s1) 4000597c: 01050533 add a0,a0,a6 40005980: 40e50533 sub a0,a0,a4 40005984: 06b50c63 beq a0,a1,400059fc pr_warn("argh. node added in wrong place at 0x%08x(%d)\n", 40005988: 4001e537 lui a0,0x4001e <== NOT EXECUTED 4000598c: 0037f613 andi a2,a5,3 <== NOT EXECUTED 40005990: f8050513 addi a0,a0,-128 # 4001df80 <__func__.4+0x10> <== NOT EXECUTED 40005994: f5dff0ef jal ra,400058f0 <== NOT EXECUTED ofs & ~3, ofs & 3); if (c->nextblock) 40005998: 05842783 lw a5,88(s0) <== NOT EXECUTED 4000599c: 0c078e63 beqz a5,40005a78 <== NOT EXECUTED pr_warn("nextblock 0x%08x", c->nextblock->offset); 400059a0: 00c7a583 lw a1,12(a5) <== NOT EXECUTED 400059a4: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400059a8: fbc50513 addi a0,a0,-68 # 4001dfbc <__func__.4+0x4c> <== NOT EXECUTED 400059ac: f45ff0ef jal ra,400058f0 <== NOT EXECUTED else pr_warn("No nextblock"); pr_cont(", expected at %08x\n", 400059b0: 00c4a783 lw a5,12(s1) <== NOT EXECUTED 400059b4: 03442703 lw a4,52(s0) <== NOT EXECUTED 400059b8: 0204a583 lw a1,32(s1) <== NOT EXECUTED 400059bc: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400059c0: 00e787b3 add a5,a5,a4 <== NOT EXECUTED 400059c4: 40b785b3 sub a1,a5,a1 <== NOT EXECUTED 400059c8: ff050513 addi a0,a0,-16 # 4001dff0 <__func__.4+0x80> <== NOT EXECUTED 400059cc: f25ff0ef jal ra,400058f0 <== NOT EXECUTED jffs2_dbg_acct_paranoia_check_nolock(c, jeb); spin_unlock(&c->erase_completion_lock); return new; } 400059d0: 00c12083 lw ra,12(sp) <== NOT EXECUTED 400059d4: 00812403 lw s0,8(sp) <== NOT EXECUTED return ERR_PTR(-EINVAL); 400059d8: fea00913 li s2,-22 <== NOT EXECUTED } 400059dc: 00412483 lw s1,4(sp) <== NOT EXECUTED 400059e0: 00090513 mv a0,s2 <== NOT EXECUTED 400059e4: 00012903 lw s2,0(sp) <== NOT EXECUTED 400059e8: 01010113 addi sp,sp,16 <== NOT EXECUTED 400059ec: 00008067 ret <== NOT EXECUTED if ((c->nextblock || ((ofs & 3) != REF_OBSOLETE)) 400059f0: 0037f593 andi a1,a5,3 <== NOT EXECUTED 400059f4: 00100813 li a6,1 <== NOT EXECUTED 400059f8: f7059ae3 bne a1,a6,4000596c <== NOT EXECUTED new = jffs2_link_node_ref(c, jeb, ofs, len, ic); 400059fc: 00068713 mv a4,a3 40005a00: 00048593 mv a1,s1 40005a04: 00060693 mv a3,a2 40005a08: 00040513 mv a0,s0 40005a0c: 00078613 mv a2,a5 40005a10: b59ff0ef jal ra,40005568 if (!jeb->free_size && !jeb->dirty_size && !ISDIRTY(jeb->wasted_size)) { 40005a14: 0204a783 lw a5,32(s1) new = jffs2_link_node_ref(c, jeb, ofs, len, ic); 40005a18: 00050913 mv s2,a0 if (!jeb->free_size && !jeb->dirty_size && !ISDIRTY(jeb->wasted_size)) { 40005a1c: 02079a63 bnez a5,40005a50 40005a20: 0184a783 lw a5,24(s1) 40005a24: 02079663 bnez a5,40005a50 <== NEVER TAKEN 40005a28: 01c4a703 lw a4,28(s1) 40005a2c: 0c400793 li a5,196 40005a30: 02e7e063 bltu a5,a4,40005a50 struct list_head *prev = beforethisent->prev; 40005a34: 06442783 lw a5,100(s0) list_add_tail(&jeb->list, &c->clean_list); 40005a38: 06040713 addi a4,s0,96 newent->next = beforethisent; 40005a3c: 00e4a023 sw a4,0(s1) newent->prev = prev; 40005a40: 00f4a223 sw a5,4(s1) beforethisent->prev = newent; 40005a44: 06942223 sw s1,100(s0) prev->next = newent; 40005a48: 0097a023 sw s1,0(a5) c->nextblock = NULL; 40005a4c: 04042c23 sw zero,88(s0) jffs2_dbg_acct_sanity_check_nolock(c,jeb); 40005a50: 00040513 mv a0,s0 40005a54: 00048593 mv a1,s1 40005a58: 3f5040ef jal ra,4000a64c <__jffs2_dbg_acct_sanity_check_nolock> } 40005a5c: 00c12083 lw ra,12(sp) 40005a60: 00812403 lw s0,8(sp) 40005a64: 00412483 lw s1,4(sp) 40005a68: 00090513 mv a0,s2 40005a6c: 00012903 lw s2,0(sp) 40005a70: 01010113 addi sp,sp,16 40005a74: 00008067 ret pr_warn("No nextblock"); 40005a78: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40005a7c: fd850513 addi a0,a0,-40 # 4001dfd8 <__func__.4+0x68> <== NOT EXECUTED 40005a80: e71ff0ef jal ra,400058f0 <== NOT EXECUTED 40005a84: f2dff06f j 400059b0 <== NOT EXECUTED =============================================================================== 40005a88 : rtems_jffs2_flash_control *fc = sb->s_flash_control; 40005a88: 0e452503 lw a0,228(a0) if (fc->trigger_garbage_collection != NULL) { 40005a8c: 02052783 lw a5,32(a0) 40005a90: 00078463 beqz a5,40005a98 <== ALWAYS TAKEN (*fc->trigger_garbage_collection)(fc); 40005a94: 00078067 jr a5 <== NOT EXECUTED jffs2_dbg(1, "jffs2_complete_reservation()\n"); spin_lock(&c->erase_completion_lock); jffs2_garbage_collect_trigger(c); spin_unlock(&c->erase_completion_lock); mutex_unlock(&c->alloc_sem); } 40005a98: 00008067 ret =============================================================================== 4000a4cc : uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, unsigned char *data_in, unsigned char **cpage_out, uint32_t *datalen, uint32_t *cdatalen) { struct super_block *sb = OFNI_BS_2SFFJ(c); rtems_jffs2_compressor_control *cc = sb->s_compressor_control; 4000a4cc: 0e852503 lw a0,232(a0) { 4000a4d0: fe010113 addi sp,sp,-32 4000a4d4: 00812c23 sw s0,24(sp) 4000a4d8: 00912a23 sw s1,20(sp) 4000a4dc: 01212823 sw s2,16(sp) 4000a4e0: 01312623 sw s3,12(sp) 4000a4e4: 00112e23 sw ra,28(sp) 4000a4e8: 00060413 mv s0,a2 4000a4ec: 00068993 mv s3,a3 4000a4f0: 00070493 mv s1,a4 4000a4f4: 00078913 mv s2,a5 int ret; if (cc != NULL) { 4000a4f8: 02050263 beqz a0,4000a51c <== NEVER TAKEN *cpage_out = &cc->buffer[0]; ret = (*cc->compress)(cc, data_in, *cpage_out, datalen, cdatalen); 4000a4fc: 00052783 lw a5,0(a0) *cpage_out = &cc->buffer[0]; 4000a500: 00c50613 addi a2,a0,12 4000a504: 00c6a023 sw a2,0(a3) ret = (*cc->compress)(cc, data_in, *cpage_out, datalen, cdatalen); 4000a508: 00090713 mv a4,s2 4000a50c: 00048693 mv a3,s1 4000a510: 00040593 mv a1,s0 4000a514: 000780e7 jalr a5 } else { ret = JFFS2_COMPR_NONE; } if (ret == JFFS2_COMPR_NONE) { 4000a518: 00051a63 bnez a0,4000a52c *cpage_out = data_in; *datalen = *cdatalen; 4000a51c: 00092783 lw a5,0(s2) *cpage_out = data_in; 4000a520: 0089a023 sw s0,0(s3) *datalen = *cdatalen; 4000a524: 00000513 li a0,0 4000a528: 00f4a023 sw a5,0(s1) } return ret; } 4000a52c: 01c12083 lw ra,28(sp) 4000a530: 01812403 lw s0,24(sp) 4000a534: 01412483 lw s1,20(sp) 4000a538: 01012903 lw s2,16(sp) 4000a53c: 00c12983 lw s3,12(sp) 4000a540: 02010113 addi sp,sp,32 4000a544: 00008067 ret =============================================================================== 4000a930 : /***********************************************************************/ int jffs2_create(struct _inode *dir_i, const char *d_name, size_t d_namelen, int mode) { 4000a930: fd010113 addi sp,sp,-48 4000a934: 02912223 sw s1,36(sp) 4000a938: 03212023 sw s2,32(sp) 4000a93c: 02112623 sw ra,44(sp) 4000a940: 02812423 sw s0,40(sp) 4000a944: 01312e23 sw s3,28(sp) 4000a948: 00050493 mv s1,a0 4000a94c: 00068913 mv s2,a3 struct jffs2_sb_info *c; struct _inode *inode; int ret; struct qstr qstr; qstr.name = d_name; 4000a950: 00b12423 sw a1,8(sp) qstr.len = d_namelen; 4000a954: 00c12623 sw a2,12(sp) ri = jffs2_alloc_raw_inode(); 4000a958: f3df90ef jal ra,40004894 if (!ri) 4000a95c: 10050863 beqz a0,4000aa6c <== NEVER TAKEN c = JFFS2_SB_INFO(dir_i->i_sb); D1(printk(KERN_DEBUG "jffs2_create()\n")); inode = jffs2_new_inode(dir_i, mode, ri); 4000a960: 00050613 mv a2,a0 4000a964: 00090593 mv a1,s2 4000a968: 00050413 mv s0,a0 4000a96c: 00048513 mv a0,s1 c = JFFS2_SB_INFO(dir_i->i_sb); 4000a970: 0404a983 lw s3,64(s1) inode = jffs2_new_inode(dir_i, mode, ri); 4000a974: d18f80ef jal ra,40002e8c if (IS_ERR(inode)) { 4000a978: c1800793 li a5,-1000 inode = jffs2_new_inode(dir_i, mode, ri); 4000a97c: 00050913 mv s2,a0 if (IS_ERR(inode)) { 4000a980: 0ca7e063 bltu a5,a0,4000aa40 } f = JFFS2_INODE_INFO(inode); dir_f = JFFS2_INODE_INFO(dir_i); ret = jffs2_do_create(c, dir_f, f, ri, &qstr); 4000a984: 04850613 addi a2,a0,72 4000a988: 00810713 addi a4,sp,8 4000a98c: 00098513 mv a0,s3 4000a990: 00040693 mv a3,s0 4000a994: 04848593 addi a1,s1,72 4000a998: d29fe0ef jal ra,400096c0 4000a99c: 00050993 mv s3,a0 if (ret) { 4000a9a0: 06051663 bnez a0,4000aa0c <== NEVER TAKEN jffs2_iput(inode); jffs2_free_raw_inode(ri); return ret; } dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); 4000a9a4: 02944683 lbu a3,41(s0) 4000a9a8: 02844603 lbu a2,40(s0) 4000a9ac: 02a44703 lbu a4,42(s0) 4000a9b0: 02b44783 lbu a5,43(s0) 4000a9b4: 00869693 slli a3,a3,0x8 4000a9b8: 00c6e6b3 or a3,a3,a2 4000a9bc: 01071713 slli a4,a4,0x10 4000a9c0: 00d76733 or a4,a4,a3 4000a9c4: 01879793 slli a5,a5,0x18 4000a9c8: 00e7e7b3 or a5,a5,a4 jffs2_free_raw_inode(ri); 4000a9cc: 00040513 mv a0,s0 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); 4000a9d0: 02f4a423 sw a5,40(s1) 4000a9d4: 0204a623 sw zero,44(s1) 4000a9d8: 02f4a023 sw a5,32(s1) 4000a9dc: 0204a223 sw zero,36(s1) jffs2_free_raw_inode(ri); 4000a9e0: ebdf90ef jal ra,4000489c D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d)\n", inode->i_ino, inode->i_mode, inode->i_nlink, f->inocache->pino_nlink)); jffs2_iput(inode); 4000a9e4: 00090513 mv a0,s2 4000a9e8: d59f70ef jal ra,40002740 return 0; } 4000a9ec: 02c12083 lw ra,44(sp) 4000a9f0: 02812403 lw s0,40(sp) 4000a9f4: 02412483 lw s1,36(sp) 4000a9f8: 02012903 lw s2,32(sp) 4000a9fc: 00098513 mv a0,s3 4000aa00: 01c12983 lw s3,28(sp) 4000aa04: 03010113 addi sp,sp,48 4000aa08: 00008067 ret jffs2_iput(inode); 4000aa0c: 00090513 mv a0,s2 <== NOT EXECUTED inode->i_nlink = 0; 4000aa10: 00091623 sh zero,12(s2) <== NOT EXECUTED jffs2_iput(inode); 4000aa14: d2df70ef jal ra,40002740 <== NOT EXECUTED jffs2_free_raw_inode(ri); 4000aa18: 00040513 mv a0,s0 <== NOT EXECUTED 4000aa1c: e81f90ef jal ra,4000489c <== NOT EXECUTED } 4000aa20: 02c12083 lw ra,44(sp) <== NOT EXECUTED 4000aa24: 02812403 lw s0,40(sp) <== NOT EXECUTED 4000aa28: 02412483 lw s1,36(sp) <== NOT EXECUTED 4000aa2c: 02012903 lw s2,32(sp) <== NOT EXECUTED 4000aa30: 00098513 mv a0,s3 <== NOT EXECUTED 4000aa34: 01c12983 lw s3,28(sp) <== NOT EXECUTED 4000aa38: 03010113 addi sp,sp,48 <== NOT EXECUTED 4000aa3c: 00008067 ret <== NOT EXECUTED jffs2_free_raw_inode(ri); 4000aa40: 00040513 mv a0,s0 <== NOT EXECUTED 4000aa44: e59f90ef jal ra,4000489c <== NOT EXECUTED } 4000aa48: 02c12083 lw ra,44(sp) <== NOT EXECUTED 4000aa4c: 02812403 lw s0,40(sp) <== NOT EXECUTED return PTR_ERR(inode); 4000aa50: 00090993 mv s3,s2 <== NOT EXECUTED } 4000aa54: 02412483 lw s1,36(sp) <== NOT EXECUTED 4000aa58: 02012903 lw s2,32(sp) <== NOT EXECUTED 4000aa5c: 00098513 mv a0,s3 <== NOT EXECUTED 4000aa60: 01c12983 lw s3,28(sp) <== NOT EXECUTED 4000aa64: 03010113 addi sp,sp,48 <== NOT EXECUTED 4000aa68: 00008067 ret <== NOT EXECUTED return -ENOMEM; 4000aa6c: ff400993 li s3,-12 <== NOT EXECUTED 4000aa70: f7dff06f j 4000a9ec <== NOT EXECUTED =============================================================================== 4000a548 : int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen) { struct super_block *sb = OFNI_BS_2SFFJ(c); 4000a548: 0ff67e13 andi t3,a2,255 rtems_jffs2_compressor_control *cc = sb->s_compressor_control; /* Older code had a bug where it would write non-zero 'usercompr' fields. Deal with it. */ if ((comprtype & 0xff) <= JFFS2_COMPR_ZLIB) 4000a54c: 00600e93 li t4,6 { 4000a550: 00060893 mv a7,a2 4000a554: 00050313 mv t1,a0 4000a558: 00068593 mv a1,a3 4000a55c: 00070513 mv a0,a4 4000a560: 00080613 mv a2,a6 4000a564: 00078713 mv a4,a5 if ((comprtype & 0xff) <= JFFS2_COMPR_ZLIB) 4000a568: 03cef463 bgeu t4,t3,4000a590 rtems_jffs2_compressor_control *cc = sb->s_compressor_control; 4000a56c: 0e832803 lw a6,232(t1) <== NOT EXECUTED break; case JFFS2_COMPR_ZERO: memset(data_out, 0, datalen); break; default: if (cc != NULL) { 4000a570: 06080063 beqz a6,4000a5d0 <== NOT EXECUTED return (*cc->decompress)(cc, comprtype, cdata_in, data_out, cdatalen, datalen); 4000a574: 00482303 lw t1,4(a6) <== NOT EXECUTED 4000a578: 00060793 mv a5,a2 <== NOT EXECUTED 4000a57c: 00050693 mv a3,a0 <== NOT EXECUTED 4000a580: 00058613 mv a2,a1 <== NOT EXECUTED 4000a584: 00080513 mv a0,a6 <== NOT EXECUTED 4000a588: 00088593 mv a1,a7 <== NOT EXECUTED 4000a58c: 00030067 jr t1 <== NOT EXECUTED { 4000a590: ff010113 addi sp,sp,-16 4000a594: 00112623 sw ra,12(sp) switch (comprtype & 0xff) { 4000a598: 000e1c63 bnez t3,4000a5b0 <== ALWAYS TAKEN memcpy(data_out, cdata_in, datalen); 4000a59c: 255110ef jal ra,4001bff0 <== NOT EXECUTED } else { return -EIO; } } return 0; 4000a5a0: 00000513 li a0,0 <== NOT EXECUTED } 4000a5a4: 00c12083 lw ra,12(sp) <== NOT EXECUTED 4000a5a8: 01010113 addi sp,sp,16 <== NOT EXECUTED 4000a5ac: 00008067 ret <== NOT EXECUTED switch (comprtype & 0xff) { 4000a5b0: 00100793 li a5,1 4000a5b4: 02fe1263 bne t3,a5,4000a5d8 memset(data_out, 0, datalen); 4000a5b8: 00000593 li a1,0 <== NOT EXECUTED 4000a5bc: 35d110ef jal ra,4001c118 <== NOT EXECUTED } 4000a5c0: 00c12083 lw ra,12(sp) <== NOT EXECUTED return 0; 4000a5c4: 00000513 li a0,0 <== NOT EXECUTED } 4000a5c8: 01010113 addi sp,sp,16 <== NOT EXECUTED 4000a5cc: 00008067 ret <== NOT EXECUTED return -EIO; 4000a5d0: ffb00513 li a0,-5 <== NOT EXECUTED } 4000a5d4: 00008067 ret <== NOT EXECUTED rtems_jffs2_compressor_control *cc = sb->s_compressor_control; 4000a5d8: 0e832803 lw a6,232(t1) if (cc != NULL) { 4000a5dc: 02080463 beqz a6,4000a604 <== NEVER TAKEN } 4000a5e0: 00c12083 lw ra,12(sp) return (*cc->decompress)(cc, comprtype, cdata_in, data_out, cdatalen, datalen); 4000a5e4: 00482303 lw t1,4(a6) 4000a5e8: 00060793 mv a5,a2 4000a5ec: 00050693 mv a3,a0 4000a5f0: 00058613 mv a2,a1 4000a5f4: 000e0593 mv a1,t3 4000a5f8: 00080513 mv a0,a6 } 4000a5fc: 01010113 addi sp,sp,16 return (*cc->decompress)(cc, comprtype, cdata_in, data_out, cdatalen, datalen); 4000a600: 00030067 jr t1 return -EIO; 4000a604: ffb00513 li a0,-5 <== NOT EXECUTED 4000a608: f9dff06f j 4000a5a4 <== NOT EXECUTED =============================================================================== 400052d8 : prev = &c->inocache_list[old->ino % c->inocache_hashsize]; 400052d8: 00c5a603 lw a2,12(a1) 400052dc: 0c052783 lw a5,192(a0) 400052e0: 0c452683 lw a3,196(a0) 400052e4: 02f677b3 remu a5,a2,a5 400052e8: 00279793 slli a5,a5,0x2 400052ec: 00f686b3 add a3,a3,a5 while ((*prev) && (*prev)->ino < old->ino) { 400052f0: 0006a783 lw a5,0(a3) 400052f4: 00079a63 bnez a5,40005308 400052f8: 0240006f j 4000531c prev = &(*prev)->next; 400052fc: 01078693 addi a3,a5,16 <== NOT EXECUTED while ((*prev) && (*prev)->ino < old->ino) { 40005300: 0107a783 lw a5,16(a5) <== NOT EXECUTED 40005304: 00078c63 beqz a5,4000531c <== NOT EXECUTED 40005308: 00c7a703 lw a4,12(a5) 4000530c: fec768e3 bltu a4,a2,400052fc if ((*prev) == old) { 40005310: 00f59663 bne a1,a5,4000531c *prev = old->next; 40005314: 0105a783 lw a5,16(a1) 40005318: 00f6a023 sw a5,0(a3) if (old->state != INO_STATE_READING && old->state != INO_STATE_CLEARING) 4000531c: 00a5d783 lhu a5,10(a1) 40005320: 00100713 li a4,1 40005324: ffb78793 addi a5,a5,-5 40005328: 01079793 slli a5,a5,0x10 4000532c: 0107d793 srli a5,a5,0x10 40005330: 00f76463 bltu a4,a5,40005338 } 40005334: 00008067 ret jffs2_free_inode_cache(old); 40005338: 00058513 mv a0,a1 4000533c: e6cff06f j 400049a8 =============================================================================== 40008650 : kfree (f); return ret; } void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f) { 40008650: ff010113 addi sp,sp,-16 40008654: 00912223 sw s1,4(sp) 40008658: 00058493 mv s1,a1 struct jffs2_full_dirent *fd, *fds; int deleted; jffs2_xattr_delete_inode(c, f->inocache); mutex_lock(&f->sem); deleted = f->inocache && !f->inocache->pino_nlink; 4000865c: 0145a583 lw a1,20(a1) { 40008660: 00812423 sw s0,8(sp) 40008664: 01212023 sw s2,0(sp) 40008668: 00112623 sw ra,12(sp) 4000866c: 00050913 mv s2,a0 if (deleted) jffs2_mark_node_obsolete(c, f->metadata->raw); jffs2_free_full_dnode(f->metadata); } jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL); 40008670: 00448413 addi s0,s1,4 deleted = f->inocache && !f->inocache->pino_nlink; 40008674: 04058263 beqz a1,400086b8 <== NEVER TAKEN 40008678: 0145a783 lw a5,20(a1) if (f->inocache && f->inocache->state != INO_STATE_CHECKING) 4000867c: 00a5d703 lhu a4,10(a1) deleted = f->inocache && !f->inocache->pino_nlink; 40008680: 02079863 bnez a5,400086b0 if (f->inocache && f->inocache->state != INO_STATE_CHECKING) 40008684: 00100793 li a5,1 40008688: 0af71a63 bne a4,a5,4000873c if (f->metadata) { 4000868c: 0084a783 lw a5,8(s1) 40008690: 00078c63 beqz a5,400086a8 jffs2_mark_node_obsolete(c, f->metadata->raw); 40008694: 0007a583 lw a1,0(a5) 40008698: 00090513 mv a0,s2 4000869c: c00fd0ef jal ra,40005a9c jffs2_free_full_dnode(f->metadata); 400086a0: 0084a503 lw a0,8(s1) 400086a4: 9e0fc0ef jal ra,40004884 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL); 400086a8: 00090593 mv a1,s2 400086ac: 01c0006f j 400086c8 if (f->inocache && f->inocache->state != INO_STATE_CHECKING) 400086b0: 00100793 li a5,1 400086b4: 08f71a63 bne a4,a5,40008748 if (f->metadata) { 400086b8: 0084a503 lw a0,8(s1) <== NOT EXECUTED 400086bc: 00050463 beqz a0,400086c4 <== NOT EXECUTED jffs2_free_full_dnode(f->metadata); 400086c0: 9c4fc0ef jal ra,40004884 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL); 400086c4: 00000593 li a1,0 400086c8: 00040513 mv a0,s0 400086cc: e09fc0ef jal ra,400054d4 if (f->target) { 400086d0: 0104a503 lw a0,16(s1) 400086d4: 00050663 beqz a0,400086e0 kfree(f->target); 400086d8: 7fd040ef jal ra,4000d6d4 f->target = NULL; 400086dc: 0004a823 sw zero,16(s1) } fds = f->dents; 400086e0: 00c4a403 lw s0,12(s1) while(fds) { 400086e4: 00040a63 beqz s0,400086f8 fd = fds; fds = fd->next; 400086e8: 00040513 mv a0,s0 400086ec: 00442403 lw s0,4(s0) jffs2_free_full_dirent(fd); 400086f0: 988fc0ef jal ra,40004878 while(fds) { 400086f4: fe041ae3 bnez s0,400086e8 } if (f->inocache && f->inocache->state != INO_STATE_CHECKING) { 400086f8: 0144a583 lw a1,20(s1) 400086fc: 02058463 beqz a1,40008724 <== NEVER TAKEN 40008700: 00a5d703 lhu a4,10(a1) 40008704: 00100793 li a5,1 40008708: 00f70e63 beq a4,a5,40008724 jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT); 4000870c: 00300613 li a2,3 40008710: 00090513 mv a0,s2 40008714: b1dfc0ef jal ra,40005230 if (f->inocache->nodes == (void *)f->inocache) 40008718: 0144a583 lw a1,20(s1) 4000871c: 0045a783 lw a5,4(a1) 40008720: 02f58e63 beq a1,a5,4000875c jffs2_del_ino_cache(c, f->inocache); } mutex_unlock(&f->sem); } 40008724: 00c12083 lw ra,12(sp) 40008728: 00812403 lw s0,8(sp) 4000872c: 00412483 lw s1,4(sp) 40008730: 00012903 lw s2,0(sp) 40008734: 01010113 addi sp,sp,16 40008738: 00008067 ret jffs2_set_inocache_state(c, f->inocache, INO_STATE_CLEARING); 4000873c: 00600613 li a2,6 40008740: af1fc0ef jal ra,40005230 40008744: f49ff06f j 4000868c 40008748: 00600613 li a2,6 4000874c: ae5fc0ef jal ra,40005230 if (f->metadata) { 40008750: 0084a503 lw a0,8(s1) 40008754: f60508e3 beqz a0,400086c4 40008758: f69ff06f j 400086c0 } 4000875c: 00812403 lw s0,8(sp) 40008760: 00c12083 lw ra,12(sp) 40008764: 00412483 lw s1,4(sp) jffs2_del_ino_cache(c, f->inocache); 40008768: 00090513 mv a0,s2 } 4000876c: 00012903 lw s2,0(sp) 40008770: 01010113 addi sp,sp,16 jffs2_del_ino_cache(c, f->inocache); 40008774: b65fc06f j 400052d8 =============================================================================== 40008778 : { 40008778: fa010113 addi sp,sp,-96 <== NOT EXECUTED 4000877c: 04912a23 sw s1,84(sp) <== NOT EXECUTED 40008780: 05212823 sw s2,80(sp) <== NOT EXECUTED 40008784: 00050493 mv s1,a0 <== NOT EXECUTED 40008788: 00058913 mv s2,a1 <== NOT EXECUTED struct jffs2_inode_info *f = kzalloc(sizeof(*f), GFP_KERNEL); 4000878c: 00100513 li a0,1 <== NOT EXECUTED 40008790: 01c00593 li a1,28 <== NOT EXECUTED { 40008794: 04112e23 sw ra,92(sp) <== NOT EXECUTED 40008798: 04812c23 sw s0,88(sp) <== NOT EXECUTED struct jffs2_inode_info *f = kzalloc(sizeof(*f), GFP_KERNEL); 4000879c: 3c9040ef jal ra,4000d364 <== NOT EXECUTED if (!f) 400087a0: 04050a63 beqz a0,400087f4 <== NOT EXECUTED f->inocache = ic; 400087a4: 00050413 mv s0,a0 <== NOT EXECUTED ret = jffs2_do_read_inode_internal(c, f, &n); 400087a8: 00050593 mv a1,a0 <== NOT EXECUTED 400087ac: 00c10613 addi a2,sp,12 <== NOT EXECUTED 400087b0: 00048513 mv a0,s1 <== NOT EXECUTED f->inocache = ic; 400087b4: 01242a23 sw s2,20(s0) <== NOT EXECUTED ret = jffs2_do_read_inode_internal(c, f, &n); 400087b8: e68fe0ef jal ra,40006e20 <== NOT EXECUTED 400087bc: 00050793 mv a5,a0 <== NOT EXECUTED jffs2_do_clear_inode(c, f); 400087c0: 00040593 mv a1,s0 <== NOT EXECUTED 400087c4: 00048513 mv a0,s1 <== NOT EXECUTED ret = jffs2_do_read_inode_internal(c, f, &n); 400087c8: 00078493 mv s1,a5 <== NOT EXECUTED jffs2_do_clear_inode(c, f); 400087cc: e85ff0ef jal ra,40008650 <== NOT EXECUTED kfree (f); 400087d0: 00040513 mv a0,s0 <== NOT EXECUTED 400087d4: 701040ef jal ra,4000d6d4 <== NOT EXECUTED } 400087d8: 05c12083 lw ra,92(sp) <== NOT EXECUTED 400087dc: 05812403 lw s0,88(sp) <== NOT EXECUTED 400087e0: 05012903 lw s2,80(sp) <== NOT EXECUTED 400087e4: 00048513 mv a0,s1 <== NOT EXECUTED 400087e8: 05412483 lw s1,84(sp) <== NOT EXECUTED 400087ec: 06010113 addi sp,sp,96 <== NOT EXECUTED 400087f0: 00008067 ret <== NOT EXECUTED return -ENOMEM; 400087f4: ff400493 li s1,-12 <== NOT EXECUTED 400087f8: fe1ff06f j 400087d8 <== NOT EXECUTED =============================================================================== 400096c0 : int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const struct qstr *qstr) { 400096c0: fd010113 addi sp,sp,-48 400096c4: 02812423 sw s0,40(sp) 400096c8: 03212023 sw s2,32(sp) 400096cc: 01412c23 sw s4,24(sp) 400096d0: 01512a23 sw s5,20(sp) 400096d4: 00058a13 mv s4,a1 400096d8: 00060913 mv s2,a2 400096dc: 00068413 mv s0,a3 400096e0: 00070a93 mv s5,a4 int ret; /* Try to reserve enough space for both node and dirent. * Just the node will do for now, though */ ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL, 400096e4: 00000693 li a3,0 400096e8: 01200713 li a4,18 400096ec: 00c10613 addi a2,sp,12 400096f0: 04400593 li a1,68 { 400096f4: 02912223 sw s1,36(sp) 400096f8: 01312e23 sw s3,28(sp) 400096fc: 02112623 sw ra,44(sp) 40009700: 01612823 sw s6,16(sp) 40009704: 00050993 mv s3,a0 ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL, 40009708: b99fc0ef jal ra,400062a0 4000970c: 00050493 mv s1,a0 JFFS2_SUMMARY_INODE_SIZE); jffs2_dbg(1, "%s(): reserved 0x%x bytes\n", __func__, alloclen); if (ret) 40009710: 02050863 beqz a0,40009740 <== ALWAYS TAKEN jffs2_complete_reservation(c); mutex_unlock(&dir_f->sem); return 0; } 40009714: 02c12083 lw ra,44(sp) 40009718: 02812403 lw s0,40(sp) 4000971c: 02012903 lw s2,32(sp) 40009720: 01c12983 lw s3,28(sp) 40009724: 01812a03 lw s4,24(sp) 40009728: 01412a83 lw s5,20(sp) 4000972c: 01012b03 lw s6,16(sp) 40009730: 00048513 mv a0,s1 40009734: 02412483 lw s1,36(sp) 40009738: 03010113 addi sp,sp,48 4000973c: 00008067 ret ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); 40009740: 03c00613 li a2,60 40009744: 00040593 mv a1,s0 ri->data_crc = cpu_to_je32(0); 40009748: 02040e23 sb zero,60(s0) 4000974c: 02040ea3 sb zero,61(s0) 40009750: 02040f23 sb zero,62(s0) 40009754: 02040fa3 sb zero,63(s0) ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); 40009758: 539000ef jal ra,4000a490 4000975c: 00855693 srli a3,a0,0x8 40009760: 01055713 srli a4,a0,0x10 40009764: 01855793 srli a5,a0,0x18 40009768: 04a40023 sb a0,64(s0) 4000976c: 04d400a3 sb a3,65(s0) 40009770: 04e40123 sb a4,66(s0) 40009774: 04f401a3 sb a5,67(s0) fn = jffs2_write_dnode(c, f, ri, NULL, 0, ALLOC_NORMAL); 40009778: 00000713 li a4,0 4000977c: 00000793 li a5,0 40009780: 00000693 li a3,0 40009784: 00040613 mv a2,s0 40009788: 00090593 mv a1,s2 4000978c: 00098513 mv a0,s3 40009790: a08ff0ef jal ra,40008998 40009794: 00050493 mv s1,a0 if (IS_ERR(fn)) { 40009798: c1800b13 li s6,-1000 jffs2_complete_reservation(c); 4000979c: 00098513 mv a0,s3 if (IS_ERR(fn)) { 400097a0: 1e9b6063 bltu s6,s1,40009980 f->metadata = fn; 400097a4: 00992423 sw s1,8(s2) jffs2_complete_reservation(c); 400097a8: ae0fc0ef jal ra,40005a88 ret = jffs2_reserve_space(c, sizeof(*rd)+qstr->len, &alloclen, 400097ac: 004aa583 lw a1,4(s5) 400097b0: 00000693 li a3,0 400097b4: 00c10613 addi a2,sp,12 400097b8: 01858713 addi a4,a1,24 400097bc: 00098513 mv a0,s3 400097c0: 02858593 addi a1,a1,40 400097c4: addfc0ef jal ra,400062a0 400097c8: 00050493 mv s1,a0 if (ret) { 400097cc: f40514e3 bnez a0,40009714 <== NEVER TAKEN rd = jffs2_alloc_raw_dirent(); 400097d0: 8b8fb0ef jal ra,40004888 400097d4: 00050913 mv s2,a0 if (!rd) { 400097d8: 1c050063 beqz a0,40009998 <== NEVER TAKEN rd->totlen = cpu_to_je32(sizeof(*rd) + qstr->len); 400097dc: 004aa783 lw a5,4(s5) rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 400097e0: f8500813 li a6,-123 400097e4: 01090023 sb a6,0(s2) 400097e8: 01900813 li a6,25 rd->totlen = cpu_to_je32(sizeof(*rd) + qstr->len); 400097ec: 02878793 addi a5,a5,40 rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 400097f0: 010900a3 sb a6,1(s2) rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 400097f4: 00100813 li a6,1 rd->totlen = cpu_to_je32(sizeof(*rd) + qstr->len); 400097f8: 0087d513 srli a0,a5,0x8 400097fc: 0107d693 srli a3,a5,0x10 40009800: 0187d713 srli a4,a5,0x18 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40009804: 01090123 sb a6,2(s2) 40009808: fe000813 li a6,-32 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 4000980c: 00800613 li a2,8 40009810: 00090593 mv a1,s2 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40009814: 010901a3 sb a6,3(s2) rd->totlen = cpu_to_je32(sizeof(*rd) + qstr->len); 40009818: 00f90223 sb a5,4(s2) 4000981c: 00a902a3 sb a0,5(s2) 40009820: 00d90323 sb a3,6(s2) 40009824: 00e903a3 sb a4,7(s2) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009828: 00000513 li a0,0 4000982c: 465000ef jal ra,4000a490 rd->pino = cpu_to_je32(dir_f->inocache->ino); 40009830: 014a2703 lw a4,20(s4) rd->version = cpu_to_je32(++dir_f->highest_version); 40009834: 000a2783 lw a5,0(s4) rd->ino = ri->ino; 40009838: 00c44e03 lbu t3,12(s0) rd->pino = cpu_to_je32(dir_f->inocache->ino); 4000983c: 00c74e83 lbu t4,12(a4) 40009840: 00d74603 lbu a2,13(a4) 40009844: 00e74683 lbu a3,14(a4) 40009848: 00f74703 lbu a4,15(a4) rd->ino = ri->ino; 4000984c: 00d44303 lbu t1,13(s0) 40009850: 00e44883 lbu a7,14(s0) 40009854: 00f44803 lbu a6,15(s0) rd->mctime = ri->ctime; 40009858: 02844583 lbu a1,40(s0) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 4000985c: 00855293 srli t0,a0,0x8 40009860: 01055f93 srli t6,a0,0x10 40009864: 01855f13 srli t5,a0,0x18 rd->version = cpu_to_je32(++dir_f->highest_version); 40009868: 00178793 addi a5,a5,1 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 4000986c: 005904a3 sb t0,9(s2) 40009870: 01f90523 sb t6,10(s2) 40009874: 00a90423 sb a0,8(s2) 40009878: 01e905a3 sb t5,11(s2) rd->pino = cpu_to_je32(dir_f->inocache->ino); 4000987c: 01d90623 sb t4,12(s2) 40009880: 00c906a3 sb a2,13(s2) 40009884: 00d90723 sb a3,14(s2) rd->mctime = ri->ctime; 40009888: 02944603 lbu a2,41(s0) rd->pino = cpu_to_je32(dir_f->inocache->ino); 4000988c: 00e907a3 sb a4,15(s2) rd->version = cpu_to_je32(++dir_f->highest_version); 40009890: 00fa2023 sw a5,0(s4) 40009894: 0087df13 srli t5,a5,0x8 40009898: 0107de93 srli t4,a5,0x10 4000989c: 0187d513 srli a0,a5,0x18 rd->mctime = ri->ctime; 400098a0: 02a44683 lbu a3,42(s0) 400098a4: 02b44703 lbu a4,43(s0) rd->version = cpu_to_je32(++dir_f->highest_version); 400098a8: 01e908a3 sb t5,17(s2) 400098ac: 01d90923 sb t4,18(s2) rd->ino = ri->ino; 400098b0: 01c90a23 sb t3,20(s2) 400098b4: 00690aa3 sb t1,21(s2) 400098b8: 01190b23 sb a7,22(s2) 400098bc: 01090ba3 sb a6,23(s2) rd->version = cpu_to_je32(++dir_f->highest_version); 400098c0: 00f90823 sb a5,16(s2) 400098c4: 00a909a3 sb a0,19(s2) rd->mctime = ri->ctime; 400098c8: 00b90c23 sb a1,24(s2) 400098cc: 00c90ca3 sb a2,25(s2) rd->nsize = qstr->len; 400098d0: 004aa783 lw a5,4(s5) rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 400098d4: 02000613 li a2,32 400098d8: 00090593 mv a1,s2 rd->nsize = qstr->len; 400098dc: 00f90e23 sb a5,28(s2) rd->type = DT_REG; 400098e0: 00800793 li a5,8 rd->mctime = ri->ctime; 400098e4: 00d90d23 sb a3,26(s2) 400098e8: 00e90da3 sb a4,27(s2) rd->type = DT_REG; 400098ec: 00f90ea3 sb a5,29(s2) rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 400098f0: 00000513 li a0,0 400098f4: 39d000ef jal ra,4000a490 rd->name_crc = cpu_to_je32(crc32(0, qstr->name, qstr->len)); 400098f8: 004aa603 lw a2,4(s5) 400098fc: 000aa583 lw a1,0(s5) rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 40009900: 00855693 srli a3,a0,0x8 40009904: 01055713 srli a4,a0,0x10 40009908: 01855793 srli a5,a0,0x18 4000990c: 02a90023 sb a0,32(s2) 40009910: 02d900a3 sb a3,33(s2) 40009914: 02e90123 sb a4,34(s2) 40009918: 02f901a3 sb a5,35(s2) rd->name_crc = cpu_to_je32(crc32(0, qstr->name, qstr->len)); 4000991c: 00000513 li a0,0 40009920: 371000ef jal ra,4000a490 fd = jffs2_write_dirent(c, dir_f, rd, qstr->name, qstr->len, ALLOC_NORMAL); 40009924: 004aa703 lw a4,4(s5) 40009928: 000aa683 lw a3,0(s5) rd->name_crc = cpu_to_je32(crc32(0, qstr->name, qstr->len)); 4000992c: 00855593 srli a1,a0,0x8 40009930: 01055613 srli a2,a0,0x10 40009934: 01855793 srli a5,a0,0x18 40009938: 02a90223 sb a0,36(s2) 4000993c: 02b902a3 sb a1,37(s2) 40009940: 02c90323 sb a2,38(s2) 40009944: 02f903a3 sb a5,39(s2) fd = jffs2_write_dirent(c, dir_f, rd, qstr->name, qstr->len, ALLOC_NORMAL); 40009948: 00090613 mv a2,s2 4000994c: 00000793 li a5,0 40009950: 000a0593 mv a1,s4 40009954: 00098513 mv a0,s3 40009958: cb4ff0ef jal ra,40008e0c 4000995c: 00050413 mv s0,a0 jffs2_free_raw_dirent(rd); 40009960: 00090513 mv a0,s2 40009964: f2dfa0ef jal ra,40004890 if (IS_ERR(fd)) { 40009968: 028b6063 bltu s6,s0,40009988 jffs2_add_fd_to_list(c, fd, &dir_f->dents); 4000996c: 00098513 mv a0,s3 40009970: 00ca0613 addi a2,s4,12 40009974: 00040593 mv a1,s0 40009978: 980fb0ef jal ra,40004af8 jffs2_complete_reservation(c); 4000997c: 00098513 mv a0,s3 40009980: 908fc0ef jal ra,40005a88 return 0; 40009984: d91ff06f j 40009714 jffs2_complete_reservation(c); 40009988: 00098513 mv a0,s3 <== NOT EXECUTED 4000998c: 8fcfc0ef jal ra,40005a88 <== NOT EXECUTED return PTR_ERR(fd); 40009990: 00040493 mv s1,s0 <== NOT EXECUTED 40009994: d81ff06f j 40009714 <== NOT EXECUTED jffs2_complete_reservation(c); 40009998: 00098513 mv a0,s3 <== NOT EXECUTED 4000999c: 8ecfc0ef jal ra,40005a88 <== NOT EXECUTED return -ENOMEM; 400099a0: ff400493 li s1,-12 <== NOT EXECUTED 400099a4: d71ff06f j 40009714 <== NOT EXECUTED =============================================================================== 40009b1c : int jffs2_do_link (struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint32_t ino, uint8_t type, const char *name, int namelen, uint32_t time) { 40009b1c: fc010113 addi sp,sp,-64 40009b20: 02912a23 sw s1,52(sp) 40009b24: 03212823 sw s2,48(sp) 40009b28: 03312623 sw s3,44(sp) 40009b2c: 03412423 sw s4,40(sp) 40009b30: 03512223 sw s5,36(sp) 40009b34: 01712e23 sw s7,28(sp) 40009b38: 01812c23 sw s8,24(sp) 40009b3c: 02112e23 sw ra,60(sp) 40009b40: 02812c23 sw s0,56(sp) 40009b44: 03612023 sw s6,32(sp) 40009b48: 01912a23 sw s9,20(sp) 40009b4c: 00050993 mv s3,a0 40009b50: 00058913 mv s2,a1 40009b54: 00060a93 mv s5,a2 40009b58: 00068c13 mv s8,a3 40009b5c: 00070b93 mv s7,a4 40009b60: 00078493 mv s1,a5 40009b64: 00080a13 mv s4,a6 struct jffs2_raw_dirent *rd; struct jffs2_full_dirent *fd; uint32_t alloclen; int ret; rd = jffs2_alloc_raw_dirent(); 40009b68: d21fa0ef jal ra,40004888 if (!rd) 40009b6c: 20050a63 beqz a0,40009d80 <== NEVER TAKEN return -ENOMEM; ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 40009b70: 02848b13 addi s6,s1,40 40009b74: 00050413 mv s0,a0 40009b78: 01848713 addi a4,s1,24 40009b7c: 00000693 li a3,0 40009b80: 00c10613 addi a2,sp,12 40009b84: 000b0593 mv a1,s6 40009b88: 00098513 mv a0,s3 40009b8c: f14fc0ef jal ra,400062a0 40009b90: 00050c93 mv s9,a0 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); if (ret) { 40009b94: 1e051063 bnez a0,40009d74 <== NEVER TAKEN } mutex_lock(&dir_f->sem); /* Build a deletion node */ rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40009b98: f8500813 li a6,-123 40009b9c: 01040023 sb a6,0(s0) 40009ba0: 01900813 li a6,25 40009ba4: 010400a3 sb a6,1(s0) rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40009ba8: 00100813 li a6,1 rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 40009bac: 008b5693 srli a3,s6,0x8 40009bb0: 010b5713 srli a4,s6,0x10 40009bb4: 018b5793 srli a5,s6,0x18 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40009bb8: 01040123 sb a6,2(s0) 40009bbc: fe000813 li a6,-32 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009bc0: 00040593 mv a1,s0 rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40009bc4: 010401a3 sb a6,3(s0) rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 40009bc8: 00d402a3 sb a3,5(s0) 40009bcc: 00e40323 sb a4,6(s0) 40009bd0: 00f403a3 sb a5,7(s0) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009bd4: 00800613 li a2,8 rd->totlen = cpu_to_je32(sizeof(*rd) + namelen); 40009bd8: 01640223 sb s6,4(s0) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009bdc: 0b5000ef jal ra,4000a490 rd->pino = cpu_to_je32(dir_f->inocache->ino); 40009be0: 01492703 lw a4,20(s2) rd->version = cpu_to_je32(++dir_f->highest_version); 40009be4: 00092783 lw a5,0(s2) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009be8: 00855313 srli t1,a0,0x8 rd->pino = cpu_to_je32(dir_f->inocache->ino); 40009bec: 00c74583 lbu a1,12(a4) 40009bf0: 00d74603 lbu a2,13(a4) 40009bf4: 00e74683 lbu a3,14(a4) 40009bf8: 00f74703 lbu a4,15(a4) rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009bfc: 01055893 srli a7,a0,0x10 40009c00: 01855813 srli a6,a0,0x18 rd->version = cpu_to_je32(++dir_f->highest_version); 40009c04: 00178793 addi a5,a5,1 rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)); 40009c08: 00a40423 sb a0,8(s0) 40009c0c: 006404a3 sb t1,9(s0) 40009c10: 01140523 sb a7,10(s0) 40009c14: 010405a3 sb a6,11(s0) rd->pino = cpu_to_je32(dir_f->inocache->ino); 40009c18: 00b40623 sb a1,12(s0) 40009c1c: 00c406a3 sb a2,13(s0) 40009c20: 00d40723 sb a3,14(s0) 40009c24: 00e407a3 sb a4,15(s0) rd->version = cpu_to_je32(++dir_f->highest_version); 40009c28: 00f92023 sw a5,0(s2) 40009c2c: 0087df13 srli t5,a5,0x8 40009c30: 0107de93 srli t4,a5,0x10 40009c34: 0187de13 srli t3,a5,0x18 rd->ino = cpu_to_je32(ino); 40009c38: 008ad313 srli t1,s5,0x8 40009c3c: 010ad893 srli a7,s5,0x10 40009c40: 018ad813 srli a6,s5,0x18 rd->mctime = cpu_to_je32(time); 40009c44: 010a5693 srli a3,s4,0x10 40009c48: 018a5713 srli a4,s4,0x18 40009c4c: 008a5513 srli a0,s4,0x8 rd->version = cpu_to_je32(++dir_f->highest_version); 40009c50: 01e408a3 sb t5,17(s0) 40009c54: 01d40923 sb t4,18(s0) 40009c58: 01c409a3 sb t3,19(s0) rd->ino = cpu_to_je32(ino); 40009c5c: 00640aa3 sb t1,21(s0) 40009c60: 01140b23 sb a7,22(s0) 40009c64: 01040ba3 sb a6,23(s0) rd->nsize = namelen; rd->type = type; rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 40009c68: 00040593 mv a1,s0 rd->version = cpu_to_je32(++dir_f->highest_version); 40009c6c: 00f40823 sb a5,16(s0) rd->mctime = cpu_to_je32(time); 40009c70: 00a40ca3 sb a0,25(s0) 40009c74: 00d40d23 sb a3,26(s0) 40009c78: 00e40da3 sb a4,27(s0) rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 40009c7c: 02000613 li a2,32 rd->ino = cpu_to_je32(ino); 40009c80: 01540a23 sb s5,20(s0) rd->mctime = cpu_to_je32(time); 40009c84: 01440c23 sb s4,24(s0) rd->nsize = namelen; 40009c88: 00940e23 sb s1,28(s0) rd->type = type; 40009c8c: 01840ea3 sb s8,29(s0) rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8)); 40009c90: 00000513 li a0,0 40009c94: 7fc000ef jal ra,4000a490 40009c98: 00855693 srli a3,a0,0x8 40009c9c: 01055713 srli a4,a0,0x10 40009ca0: 01855793 srli a5,a0,0x18 40009ca4: 02a40023 sb a0,32(s0) 40009ca8: 02d400a3 sb a3,33(s0) 40009cac: 02e40123 sb a4,34(s0) 40009cb0: 02f401a3 sb a5,35(s0) rd->name_crc = cpu_to_je32(crc32(0, name, namelen)); 40009cb4: 00048613 mv a2,s1 40009cb8: 000b8593 mv a1,s7 40009cbc: 00000513 li a0,0 40009cc0: 7d0000ef jal ra,4000a490 40009cc4: 00855313 srli t1,a0,0x8 40009cc8: 01055893 srli a7,a0,0x10 40009ccc: 01855813 srli a6,a0,0x18 fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, ALLOC_NORMAL); 40009cd0: 00000793 li a5,0 40009cd4: 00040613 mv a2,s0 rd->name_crc = cpu_to_je32(crc32(0, name, namelen)); 40009cd8: 02a40223 sb a0,36(s0) 40009cdc: 026402a3 sb t1,37(s0) 40009ce0: 03140323 sb a7,38(s0) 40009ce4: 030403a3 sb a6,39(s0) fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, ALLOC_NORMAL); 40009ce8: 00048713 mv a4,s1 40009cec: 000b8693 mv a3,s7 40009cf0: 00090593 mv a1,s2 40009cf4: 00098513 mv a0,s3 40009cf8: 914ff0ef jal ra,40008e0c 40009cfc: 00050593 mv a1,a0 jffs2_free_raw_dirent(rd); 40009d00: 00040513 mv a0,s0 fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, ALLOC_NORMAL); 40009d04: 00058413 mv s0,a1 jffs2_free_raw_dirent(rd); 40009d08: b89fa0ef jal ra,40004890 if (IS_ERR(fd)) { 40009d0c: c1800793 li a5,-1000 40009d10: 0487ea63 bltu a5,s0,40009d64 mutex_unlock(&dir_f->sem); return PTR_ERR(fd); } /* File it. This will mark the old one obsolete. */ jffs2_add_fd_to_list(c, fd, &dir_f->dents); 40009d14: 00098513 mv a0,s3 40009d18: 00c90613 addi a2,s2,12 40009d1c: 00040593 mv a1,s0 40009d20: dd9fa0ef jal ra,40004af8 jffs2_complete_reservation(c); 40009d24: 00098513 mv a0,s3 40009d28: d61fb0ef jal ra,40005a88 mutex_unlock(&dir_f->sem); return 0; } 40009d2c: 03c12083 lw ra,60(sp) 40009d30: 03812403 lw s0,56(sp) 40009d34: 03412483 lw s1,52(sp) 40009d38: 03012903 lw s2,48(sp) 40009d3c: 02c12983 lw s3,44(sp) 40009d40: 02812a03 lw s4,40(sp) 40009d44: 02412a83 lw s5,36(sp) 40009d48: 02012b03 lw s6,32(sp) 40009d4c: 01c12b83 lw s7,28(sp) 40009d50: 01812c03 lw s8,24(sp) 40009d54: 000c8513 mv a0,s9 40009d58: 01412c83 lw s9,20(sp) 40009d5c: 04010113 addi sp,sp,64 40009d60: 00008067 ret jffs2_complete_reservation(c); 40009d64: 00098513 mv a0,s3 <== NOT EXECUTED 40009d68: d21fb0ef jal ra,40005a88 <== NOT EXECUTED return PTR_ERR(fd); 40009d6c: 00040c93 mv s9,s0 <== NOT EXECUTED 40009d70: fbdff06f j 40009d2c <== NOT EXECUTED jffs2_free_raw_dirent(rd); 40009d74: 00040513 mv a0,s0 <== NOT EXECUTED 40009d78: b19fa0ef jal ra,40004890 <== NOT EXECUTED return ret; 40009d7c: fb1ff06f j 40009d2c <== NOT EXECUTED return -ENOMEM; 40009d80: ff400c93 li s9,-12 <== NOT EXECUTED 40009d84: fa9ff06f j 40009d2c <== NOT EXECUTED =============================================================================== 40009e80 : dbg_fsbuild("Very dirty blocks before GC triggered: %d\n", c->vdirty_blocks_gctrigger); } int jffs2_do_mount_fs(struct jffs2_sb_info *c) { 40009e80: fc010113 addi sp,sp,-64 40009e84: 02812c23 sw s0,56(sp) 40009e88: 03212823 sw s2,48(sp) int ret; int i; int size; c->free_size = c->flash_size; c->nr_blocks = c->flash_size / c->sector_size; 40009e8c: 03452403 lw s0,52(a0) c->free_size = c->flash_size; 40009e90: 01852903 lw s2,24(a0) { 40009e94: 02912a23 sw s1,52(sp) #ifndef __ECOS if (jffs2_blocks_use_vmalloc(c)) c->blocks = vzalloc(size); else #endif c->blocks = kzalloc(size, GFP_KERNEL); 40009e98: 03400593 li a1,52 c->nr_blocks = c->flash_size / c->sector_size; 40009e9c: 028954b3 divu s1,s2,s0 { 40009ea0: 03412423 sw s4,40(sp) 40009ea4: 02112e23 sw ra,60(sp) 40009ea8: 03312623 sw s3,44(sp) 40009eac: 03512223 sw s5,36(sp) 40009eb0: 03612023 sw s6,32(sp) 40009eb4: 01712e23 sw s7,28(sp) 40009eb8: 01812c23 sw s8,24(sp) 40009ebc: 00050a13 mv s4,a0 c->free_size = c->flash_size; 40009ec0: 03252423 sw s2,40(a0) c->blocks = kzalloc(size, GFP_KERNEL); 40009ec4: 00100513 li a0,1 40009ec8: 02b485b3 mul a1,s1,a1 c->nr_blocks = c->flash_size / c->sector_size; 40009ecc: 049a2823 sw s1,80(s4) c->blocks = kzalloc(size, GFP_KERNEL); 40009ed0: 494030ef jal ra,4000d364 40009ed4: 04aa2a23 sw a0,84(s4) if (!c->blocks) 40009ed8: 5a050863 beqz a0,4000a488 <== NEVER TAKEN 40009edc: 00050793 mv a5,a0 return -ENOMEM; for (i=0; inr_blocks; i++) { 40009ee0: 00000693 li a3,0 40009ee4: 00000713 li a4,0 40009ee8: 02896263 bltu s2,s0,40009f0c INIT_LIST_HEAD(&c->blocks[i].list); c->blocks[i].offset = i * c->sector_size; 40009eec: 00d7a623 sw a3,12(a5) INIT_LIST_HEAD(&c->blocks[i].list); 40009ef0: 00f7a223 sw a5,4(a5) 40009ef4: 00f7a023 sw a5,0(a5) c->blocks[i].free_size = c->sector_size; 40009ef8: 0287a023 sw s0,32(a5) for (i=0; inr_blocks; i++) { 40009efc: 00170713 addi a4,a4,1 40009f00: 03478793 addi a5,a5,52 40009f04: 008686b3 add a3,a3,s0 40009f08: fe9762e3 bltu a4,s1,40009eec c->flags |= JFFS2_SB_FLAG_SCANNING; 40009f0c: 00ca2f83 lw t6,12(s4) INIT_LIST_HEAD(&c->erase_pending_list); INIT_LIST_HEAD(&c->erasable_pending_wbuf_list); INIT_LIST_HEAD(&c->erase_complete_list); INIT_LIST_HEAD(&c->free_list); INIT_LIST_HEAD(&c->bad_list); INIT_LIST_HEAD(&c->bad_used_list); 40009f10: 0b8a0793 addi a5,s4,184 INIT_LIST_HEAD(&c->bad_list); 40009f14: 0b0a0713 addi a4,s4,176 INIT_LIST_HEAD(&c->clean_list); 40009f18: 060a0f13 addi t5,s4,96 INIT_LIST_HEAD(&c->very_dirty_list); 40009f1c: 068a0e93 addi t4,s4,104 INIT_LIST_HEAD(&c->dirty_list); 40009f20: 070a0e13 addi t3,s4,112 INIT_LIST_HEAD(&c->erasable_list); 40009f24: 078a0313 addi t1,s4,120 INIT_LIST_HEAD(&c->erasing_list); 40009f28: 088a0893 addi a7,s4,136 INIT_LIST_HEAD(&c->erase_checking_list); 40009f2c: 090a0813 addi a6,s4,144 INIT_LIST_HEAD(&c->erase_pending_list); 40009f30: 098a0513 addi a0,s4,152 INIT_LIST_HEAD(&c->erasable_pending_wbuf_list); 40009f34: 080a0593 addi a1,s4,128 INIT_LIST_HEAD(&c->erase_complete_list); 40009f38: 0a0a0613 addi a2,s4,160 INIT_LIST_HEAD(&c->free_list); 40009f3c: 0a8a0693 addi a3,s4,168 c->flags |= JFFS2_SB_FLAG_SCANNING; 40009f40: 002fef93 ori t6,t6,2 INIT_LIST_HEAD(&c->bad_used_list); 40009f44: 0afa2e23 sw a5,188(s4) 40009f48: 0afa2c23 sw a5,184(s4) c->highest_ino = 1; 40009f4c: 00100793 li a5,1 INIT_LIST_HEAD(&c->erase_pending_list); 40009f50: 08aa2e23 sw a0,156(s4) 40009f54: 08aa2c23 sw a0,152(s4) INIT_LIST_HEAD(&c->bad_list); 40009f58: 0aea2a23 sw a4,180(s4) 40009f5c: 0aea2823 sw a4,176(s4) INIT_LIST_HEAD(&c->clean_list); 40009f60: 07ea2223 sw t5,100(s4) 40009f64: 07ea2023 sw t5,96(s4) INIT_LIST_HEAD(&c->very_dirty_list); 40009f68: 07da2623 sw t4,108(s4) 40009f6c: 07da2423 sw t4,104(s4) INIT_LIST_HEAD(&c->dirty_list); 40009f70: 07ca2a23 sw t3,116(s4) 40009f74: 07ca2823 sw t3,112(s4) INIT_LIST_HEAD(&c->erasable_list); 40009f78: 066a2e23 sw t1,124(s4) 40009f7c: 066a2c23 sw t1,120(s4) INIT_LIST_HEAD(&c->erasing_list); 40009f80: 091a2623 sw a7,140(s4) 40009f84: 091a2423 sw a7,136(s4) INIT_LIST_HEAD(&c->erase_checking_list); 40009f88: 090a2a23 sw a6,148(s4) 40009f8c: 090a2823 sw a6,144(s4) INIT_LIST_HEAD(&c->erasable_pending_wbuf_list); 40009f90: 08ba2223 sw a1,132(s4) 40009f94: 08ba2023 sw a1,128(s4) INIT_LIST_HEAD(&c->erase_complete_list); 40009f98: 0aca2223 sw a2,164(s4) 40009f9c: 0aca2023 sw a2,160(s4) INIT_LIST_HEAD(&c->free_list); 40009fa0: 0ada2623 sw a3,172(s4) 40009fa4: 0ada2423 sw a3,168(s4) c->highest_ino = 1; 40009fa8: 00fa2223 sw a5,4(s4) c->summary = NULL; 40009fac: 0c0a2623 sw zero,204(s4) c->flags |= JFFS2_SB_FLAG_SCANNING; 40009fb0: 01fa2623 sw t6,12(s4) ret = jffs2_scan_medium(c); 40009fb4: 000a0513 mv a0,s4 struct jffs2_full_dirent *dead_fds = NULL; 40009fb8: 00012623 sw zero,12(sp) ret = jffs2_scan_medium(c); 40009fbc: 6bd010ef jal ra,4000be78 c->flags &= ~JFFS2_SB_FLAG_SCANNING; 40009fc0: 00ca2703 lw a4,12(s4) ret = jffs2_scan_medium(c); 40009fc4: 00050c13 mv s8,a0 c->flags &= ~JFFS2_SB_FLAG_SCANNING; 40009fc8: ffd77713 andi a4,a4,-3 40009fcc: 00ea2623 sw a4,12(s4) if (ret) 40009fd0: 3c051e63 bnez a0,4000a3ac <== NEVER TAKEN for (; *i < c->inocache_hashsize; (*i)++) { 40009fd4: 0c0a2783 lw a5,192(s4) c->flags |= JFFS2_SB_FLAG_BUILDING; 40009fd8: 00476713 ori a4,a4,4 40009fdc: 00ea2623 sw a4,12(s4) for (; *i < c->inocache_hashsize; (*i)++) { 40009fe0: 48f05e63 blez a5,4000a47c <== NEVER TAKEN 40009fe4: 0c4a2703 lw a4,196(s4) for_each_inode(i, c, ic) { 40009fe8: 00000913 li s2,0 40009fec: 0100006f j 40009ffc for (; *i < c->inocache_hashsize; (*i)++) { 40009ff0: 00190913 addi s2,s2,1 40009ff4: 00470713 addi a4,a4,4 40009ff8: 00f90663 beq s2,a5,4000a004 if (c->inocache_list[*i]) 40009ffc: 00072483 lw s1,0(a4) 4000a000: fe0488e3 beqz s1,40009ff0 <== ALWAYS TAKEN 4000a004: 00000a93 li s5,0 if (fd->type == DT_DIR) { 4000a008: 00400993 li s3,4 if (child_ic->pino_nlink > 1) 4000a00c: 00100b13 li s6,1 for_each_inode(i, c, ic) { 4000a010: 12049463 bnez s1,4000a138 <== NEVER TAKEN for (; *i < c->inocache_hashsize; (*i)++) { 4000a014: 46f05063 blez a5,4000a474 <== NEVER TAKEN 4000a018: 0c4a2703 lw a4,196(s4) for_each_inode(i, c, ic) { 4000a01c: 00000413 li s0,0 4000a020: 0100006f j 4000a030 for (; *i < c->inocache_hashsize; (*i)++) { 4000a024: 00140413 addi s0,s0,1 4000a028: 00470713 addi a4,a4,4 4000a02c: 00f40663 beq s0,a5,4000a038 if (c->inocache_list[*i]) 4000a030: 00072483 lw s1,0(a4) 4000a034: fe0488e3 beqz s1,4000a024 <== ALWAYS TAKEN for_each_inode(i, c, ic) { 4000a038: 18049663 bnez s1,4000a1c4 <== NEVER TAKEN while (dead_fds) { 4000a03c: 00c12403 lw s0,12(sp) 4000a040: 04040063 beqz s0,4000a080 <== ALWAYS TAKEN dead_fds = fd->next; 4000a044: 00442783 lw a5,4(s0) <== NOT EXECUTED ic = jffs2_get_ino_cache(c, fd->ino); 4000a048: 00c42583 lw a1,12(s0) <== NOT EXECUTED 4000a04c: 000a0513 mv a0,s4 <== NOT EXECUTED dead_fds = fd->next; 4000a050: 00f12623 sw a5,12(sp) <== NOT EXECUTED ic = jffs2_get_ino_cache(c, fd->ino); 4000a054: 9e4fb0ef jal ra,40005238 <== NOT EXECUTED 4000a058: 00050593 mv a1,a0 <== NOT EXECUTED if (ic) 4000a05c: 00050863 beqz a0,4000a06c <== NOT EXECUTED jffs2_build_remove_unlinked_inode(c, ic, &dead_fds); 4000a060: 00c10613 addi a2,sp,12 <== NOT EXECUTED 4000a064: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a068: d21ff0ef jal ra,40009d88 <== NOT EXECUTED jffs2_free_full_dirent(fd); 4000a06c: 00040513 mv a0,s0 <== NOT EXECUTED 4000a070: 809fa0ef jal ra,40004878 <== NOT EXECUTED while (dead_fds) { 4000a074: 00c12403 lw s0,12(sp) <== NOT EXECUTED 4000a078: fc0416e3 bnez s0,4000a044 <== NOT EXECUTED 4000a07c: 0c0a2783 lw a5,192(s4) <== NOT EXECUTED if (dir_hardlinks) { 4000a080: 160a8663 beqz s5,4000a1ec <== ALWAYS TAKEN for_each_inode(i, c, ic) { 4000a084: 00000713 li a4,0 <== NOT EXECUTED return NULL; 4000a088: 00000693 li a3,0 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a08c: 14f05e63 blez a5,4000a1e8 <== NOT EXECUTED 4000a090: 0c4a2603 lw a2,196(s4) <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a094: 00000713 li a4,0 <== NOT EXECUTED 4000a098: 0100006f j 4000a0a8 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a09c: 00170713 addi a4,a4,1 <== NOT EXECUTED 4000a0a0: 00460613 addi a2,a2,4 <== NOT EXECUTED 4000a0a4: 14f70263 beq a4,a5,4000a1e8 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a0a8: 00062683 lw a3,0(a2) <== NOT EXECUTED 4000a0ac: fe0688e3 beqz a3,4000a09c <== NOT EXECUTED if (ic->flags & INO_FLAGS_IS_DIR) 4000a0b0: 0096c603 lbu a2,9(a3) # 4009 <== NOT EXECUTED 4000a0b4: 00267613 andi a2,a2,2 <== NOT EXECUTED 4000a0b8: 00060463 beqz a2,4000a0c0 <== NOT EXECUTED ic->pino_nlink = 0; 4000a0bc: 0006aa23 sw zero,20(a3) <== NOT EXECUTED if (ic->next) 4000a0c0: 0106a683 lw a3,16(a3) <== NOT EXECUTED 4000a0c4: fe0696e3 bnez a3,4000a0b0 <== NOT EXECUTED (*i)++; 4000a0c8: 00170693 addi a3,a4,1 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a0cc: 12f6d063 bge a3,a5,4000a1ec <== NOT EXECUTED 4000a0d0: 0c4a2603 lw a2,196(s4) <== NOT EXECUTED 4000a0d4: 00271593 slli a1,a4,0x2 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a0d8: 00068713 mv a4,a3 <== NOT EXECUTED 4000a0dc: 00b60633 add a2,a2,a1 <== NOT EXECUTED 4000a0e0: 0100006f j 4000a0f0 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a0e4: 00170713 addi a4,a4,1 <== NOT EXECUTED 4000a0e8: 00460613 addi a2,a2,4 <== NOT EXECUTED 4000a0ec: 10f70063 beq a4,a5,4000a1ec <== NOT EXECUTED if (c->inocache_list[*i]) 4000a0f0: 00462683 lw a3,4(a2) <== NOT EXECUTED 4000a0f4: fe0688e3 beqz a3,4000a0e4 <== NOT EXECUTED 4000a0f8: fb9ff06f j 4000a0b0 <== NOT EXECUTED if (ic->next) 4000a0fc: 0104a483 lw s1,16(s1) <== NOT EXECUTED 4000a100: 02049c63 bnez s1,4000a138 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a104: 0c0a2783 lw a5,192(s4) <== NOT EXECUTED (*i)++; 4000a108: 00190693 addi a3,s2,1 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a10c: f0f6d4e3 bge a3,a5,4000a014 <== NOT EXECUTED 4000a110: 0c4a2703 lw a4,196(s4) <== NOT EXECUTED 4000a114: 00291613 slli a2,s2,0x2 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a118: 00068913 mv s2,a3 <== NOT EXECUTED 4000a11c: 00c70733 add a4,a4,a2 <== NOT EXECUTED 4000a120: 0100006f j 4000a130 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a124: 00190913 addi s2,s2,1 <== NOT EXECUTED 4000a128: 00470713 addi a4,a4,4 <== NOT EXECUTED 4000a12c: eef904e3 beq s2,a5,4000a014 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a130: 00472483 lw s1,4(a4) <== NOT EXECUTED 4000a134: fe0488e3 beqz s1,4000a124 <== NOT EXECUTED if (ic->scan_dents) { 4000a138: 0004a403 lw s0,0(s1) <== NOT EXECUTED 4000a13c: 00041863 bnez s0,4000a14c <== NOT EXECUTED 4000a140: fbdff06f j 4000a0fc <== NOT EXECUTED for(fd = ic->scan_dents; fd; fd = fd->next) { 4000a144: 00442403 lw s0,4(s0) <== NOT EXECUTED 4000a148: fa040ae3 beqz s0,4000a0fc <== NOT EXECUTED if (!fd->ino) 4000a14c: 00c42583 lw a1,12(s0) <== NOT EXECUTED 4000a150: fe058ae3 beqz a1,4000a144 <== NOT EXECUTED child_ic = jffs2_get_ino_cache(c, fd->ino); 4000a154: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a158: 8e0fb0ef jal ra,40005238 <== NOT EXECUTED if (!child_ic) { 4000a15c: 22050e63 beqz a0,4000a398 <== NOT EXECUTED child_ic->pino_nlink++; 4000a160: 01452783 lw a5,20(a0) <== NOT EXECUTED fd->ic = child_ic; 4000a164: 00a42023 sw a0,0(s0) <== NOT EXECUTED child_ic->pino_nlink++; 4000a168: 00178793 addi a5,a5,1 <== NOT EXECUTED 4000a16c: 00f52a23 sw a5,20(a0) <== NOT EXECUTED if (fd->type == DT_DIR) { 4000a170: 01444703 lbu a4,20(s0) <== NOT EXECUTED 4000a174: fd3718e3 bne a4,s3,4000a144 <== NOT EXECUTED child_ic->flags |= INO_FLAGS_IS_DIR; 4000a178: 00954703 lbu a4,9(a0) <== NOT EXECUTED 4000a17c: 00276713 ori a4,a4,2 <== NOT EXECUTED 4000a180: 00e504a3 sb a4,9(a0) <== NOT EXECUTED if (child_ic->pino_nlink > 1) 4000a184: fcfb70e3 bgeu s6,a5,4000a144 <== NOT EXECUTED *dir_hardlinks = 1; 4000a188: 00100a93 li s5,1 <== NOT EXECUTED 4000a18c: fb9ff06f j 4000a144 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a190: 0c0a2783 lw a5,192(s4) <== NOT EXECUTED (*i)++; 4000a194: 00140693 addi a3,s0,1 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a198: eaf6d2e3 bge a3,a5,4000a03c <== NOT EXECUTED 4000a19c: 0c4a2703 lw a4,196(s4) <== NOT EXECUTED 4000a1a0: 00241613 slli a2,s0,0x2 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a1a4: 00068413 mv s0,a3 <== NOT EXECUTED 4000a1a8: 00c70733 add a4,a4,a2 <== NOT EXECUTED 4000a1ac: 0100006f j 4000a1bc <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a1b0: 00140413 addi s0,s0,1 <== NOT EXECUTED 4000a1b4: 00470713 addi a4,a4,4 <== NOT EXECUTED 4000a1b8: e8f402e3 beq s0,a5,4000a03c <== NOT EXECUTED if (c->inocache_list[*i]) 4000a1bc: 00472483 lw s1,4(a4) <== NOT EXECUTED 4000a1c0: fe0488e3 beqz s1,4000a1b0 <== NOT EXECUTED if (ic->pino_nlink) 4000a1c4: 0144a783 lw a5,20(s1) <== NOT EXECUTED 4000a1c8: 00079a63 bnez a5,4000a1dc <== NOT EXECUTED jffs2_build_remove_unlinked_inode(c, ic, &dead_fds); 4000a1cc: 00c10613 addi a2,sp,12 <== NOT EXECUTED 4000a1d0: 00048593 mv a1,s1 <== NOT EXECUTED 4000a1d4: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a1d8: bb1ff0ef jal ra,40009d88 <== NOT EXECUTED if (ic->next) 4000a1dc: 0104a483 lw s1,16(s1) <== NOT EXECUTED 4000a1e0: fe0492e3 bnez s1,4000a1c4 <== NOT EXECUTED 4000a1e4: fadff06f j 4000a190 <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a1e8: ec0694e3 bnez a3,4000a0b0 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a1ec: 00000993 li s3,0 4000a1f0: 02f05263 blez a5,4000a214 <== NEVER TAKEN 4000a1f4: 0c4a2703 lw a4,196(s4) if (c->inocache_list[*i]) 4000a1f8: 00000993 li s3,0 4000a1fc: 0100006f j 4000a20c for (; *i < c->inocache_hashsize; (*i)++) { 4000a200: 00198993 addi s3,s3,1 4000a204: 00470713 addi a4,a4,4 4000a208: 00f98663 beq s3,a5,4000a214 if (c->inocache_list[*i]) 4000a20c: 00072483 lw s1,0(a4) 4000a210: fe0488e3 beqz s1,4000a200 <== ALWAYS TAKEN if (fd->type == DT_DIR) { 4000a214: 00400913 li s2,4 JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u is also hard linked from dir ino #%u\n", 4000a218: 4001fb37 lui s6,0x4001f 4000a21c: 4001fbb7 lui s7,0x4001f for_each_inode(i, c, ic) { 4000a220: 10049063 bnez s1,4000a320 <== NEVER TAKEN c->flags &= ~JFFS2_SB_FLAG_BUILDING; 4000a224: 00ca2783 lw a5,12(s4) jffs2_rotate_lists(c); 4000a228: 000a0513 mv a0,s4 c->flags &= ~JFFS2_SB_FLAG_BUILDING; 4000a22c: ffb7f793 andi a5,a5,-5 4000a230: 00fa2623 sw a5,12(s4) jffs2_rotate_lists(c); 4000a234: 501020ef jal ra,4000cf34 size = c->flash_size / 50; /* 2% of flash size */ 4000a238: 018a2703 lw a4,24(s4) 4000a23c: 03200693 li a3,50 size += c->nr_blocks * 100; /* And 100 bytes per eraseblock */ 4000a240: 050a2783 lw a5,80(s4) size = c->flash_size / 50; /* 2% of flash size */ 4000a244: 02d75633 divu a2,a4,a3 size += c->nr_blocks * 100; /* And 100 bytes per eraseblock */ 4000a248: 06400513 li a0,100 size += c->sector_size - 1; /* ... and round up */ 4000a24c: 034a2583 lw a1,52(s4) c->resv_blocks_deletion = 2; 4000a250: 00200813 li a6,2 4000a254: 050a02a3 sb a6,69(s4) size += c->sector_size - 1; /* ... and round up */ 4000a258: fff58693 addi a3,a1,-1 c->resv_blocks_gcmerge = c->resv_blocks_deletion + 1; 4000a25c: 00300813 li a6,3 4000a260: 050a0423 sb a6,72(s4) c->resv_blocks_gcbad = 0;//c->resv_blocks_deletion + 2; 4000a264: 040a03a3 sb zero,71(s4) size += c->nr_blocks * 100; /* And 100 bytes per eraseblock */ 4000a268: 02f507b3 mul a5,a0,a5 4000a26c: 00c686b3 add a3,a3,a2 size += c->sector_size - 1; /* ... and round up */ 4000a270: 00d787b3 add a5,a5,a3 c->resv_blocks_write = c->resv_blocks_deletion + (size / c->sector_size); 4000a274: 02b7d7b3 divu a5,a5,a1 c->nospc_dirty_size = c->sector_size + (c->flash_size / 100); 4000a278: 02a75733 divu a4,a4,a0 c->resv_blocks_write = c->resv_blocks_deletion + (size / c->sector_size); 4000a27c: 0ff7f793 andi a5,a5,255 c->resv_blocks_gctrigger = c->resv_blocks_write + 1; 4000a280: 00378613 addi a2,a5,3 4000a284: 0ff67613 andi a2,a2,255 c->vdirty_blocks_gctrigger *= 10; 4000a288: 00261693 slli a3,a2,0x2 c->resv_blocks_write = c->resv_blocks_deletion + (size / c->sector_size); 4000a28c: 00278793 addi a5,a5,2 c->vdirty_blocks_gctrigger *= 10; 4000a290: 00d606b3 add a3,a2,a3 4000a294: 00169693 slli a3,a3,0x1 c->resv_blocks_write = c->resv_blocks_deletion + (size / c->sector_size); 4000a298: 04fa0223 sb a5,68(s4) c->resv_blocks_gctrigger = c->resv_blocks_write + 1; 4000a29c: 04ca0323 sb a2,70(s4) c->vdirty_blocks_gctrigger *= 10; 4000a2a0: 04da04a3 sb a3,73(s4) c->nospc_dirty_size = c->sector_size + (c->flash_size / 100); 4000a2a4: 00b707b3 add a5,a4,a1 4000a2a8: 04fa2623 sw a5,76(s4) out_free: kvfree(c->blocks); return ret; } 4000a2ac: 03c12083 lw ra,60(sp) 4000a2b0: 03812403 lw s0,56(sp) 4000a2b4: 03412483 lw s1,52(sp) 4000a2b8: 03012903 lw s2,48(sp) 4000a2bc: 02c12983 lw s3,44(sp) 4000a2c0: 02812a03 lw s4,40(sp) 4000a2c4: 02412a83 lw s5,36(sp) 4000a2c8: 02012b03 lw s6,32(sp) 4000a2cc: 01c12b83 lw s7,28(sp) 4000a2d0: 000c0513 mv a0,s8 4000a2d4: 01812c03 lw s8,24(sp) 4000a2d8: 04010113 addi sp,sp,64 4000a2dc: 00008067 ret ic->scan_dents = NULL; 4000a2e0: 0004a023 sw zero,0(s1) <== NOT EXECUTED if (ic->next) 4000a2e4: 0104a483 lw s1,16(s1) <== NOT EXECUTED 4000a2e8: 02049c63 bnez s1,4000a320 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a2ec: 0c0a2703 lw a4,192(s4) <== NOT EXECUTED (*i)++; 4000a2f0: 00198693 addi a3,s3,1 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a2f4: f2e6d8e3 bge a3,a4,4000a224 <== NOT EXECUTED 4000a2f8: 0c4a2783 lw a5,196(s4) <== NOT EXECUTED 4000a2fc: 00299613 slli a2,s3,0x2 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a300: 00068993 mv s3,a3 <== NOT EXECUTED 4000a304: 00c787b3 add a5,a5,a2 <== NOT EXECUTED 4000a308: 0100006f j 4000a318 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a30c: 00198993 addi s3,s3,1 <== NOT EXECUTED 4000a310: 00478793 addi a5,a5,4 <== NOT EXECUTED 4000a314: f0e988e3 beq s3,a4,4000a224 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a318: 0047a483 lw s1,4(a5) <== NOT EXECUTED 4000a31c: fe0488e3 beqz s1,4000a30c <== NOT EXECUTED while(ic->scan_dents) { 4000a320: 0004a403 lw s0,0(s1) <== NOT EXECUTED 4000a324: fa040ee3 beqz s0,4000a2e0 <== NOT EXECUTED ic->scan_dents = fd->next; 4000a328: 00442783 lw a5,4(s0) <== NOT EXECUTED 4000a32c: 00f4a023 sw a5,0(s1) <== NOT EXECUTED if (fd->type == DT_DIR) { 4000a330: 01444703 lbu a4,20(s0) <== NOT EXECUTED 4000a334: 03271663 bne a4,s2,4000a360 <== NOT EXECUTED if (!fd->ic) { 4000a338: 00042683 lw a3,0(s0) <== NOT EXECUTED 4000a33c: 04068a63 beqz a3,4000a390 <== NOT EXECUTED BUG_ON(!(fd->ic->flags & INO_FLAGS_IS_DIR)); 4000a340: 0096c783 lbu a5,9(a3) <== NOT EXECUTED 4000a344: 0027f793 andi a5,a5,2 <== NOT EXECUTED 4000a348: 10078663 beqz a5,4000a454 <== NOT EXECUTED JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u is also hard linked from dir ino #%u\n", 4000a34c: 00c4a703 lw a4,12(s1) <== NOT EXECUTED if (dir_hardlinks && fd->ic->pino_nlink) { 4000a350: 000a8663 beqz s5,4000a35c <== NOT EXECUTED 4000a354: 0146a783 lw a5,20(a3) <== NOT EXECUTED 4000a358: 00079c63 bnez a5,4000a370 <== NOT EXECUTED fd->ic->pino_nlink = ic->ino; 4000a35c: 00e6aa23 sw a4,20(a3) <== NOT EXECUTED jffs2_free_full_dirent(fd); 4000a360: 00040513 mv a0,s0 <== NOT EXECUTED 4000a364: d14fa0ef jal ra,40004878 <== NOT EXECUTED while(ic->scan_dents) { 4000a368: 0004a403 lw s0,0(s1) <== NOT EXECUTED 4000a36c: fb9ff06f j 4000a324 <== NOT EXECUTED JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u is also hard linked from dir ino #%u\n", 4000a370: 00c42683 lw a3,12(s0) <== NOT EXECUTED 4000a374: 01540613 addi a2,s0,21 <== NOT EXECUTED 4000a378: 280b0593 addi a1,s6,640 # 4001f280 <__func__.0> <== NOT EXECUTED 4000a37c: 1f0b8513 addi a0,s7,496 # 4001f1f0 <__func__.1+0x14> <== NOT EXECUTED 4000a380: ab9ff0ef jal ra,40009e38 <== NOT EXECUTED fd->ic->pino_nlink = ic->ino; 4000a384: 00042683 lw a3,0(s0) <== NOT EXECUTED 4000a388: 00c4a703 lw a4,12(s1) <== NOT EXECUTED 4000a38c: fd1ff06f j 4000a35c <== NOT EXECUTED 4000a390: 00078413 mv s0,a5 <== NOT EXECUTED while(ic->scan_dents) { 4000a394: f91ff06f j 4000a324 <== NOT EXECUTED jffs2_mark_node_obsolete(c, fd->raw); 4000a398: 00042583 lw a1,0(s0) <== NOT EXECUTED 4000a39c: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a3a0: efcfb0ef jal ra,40005a9c <== NOT EXECUTED fd->ic = NULL; 4000a3a4: 00042023 sw zero,0(s0) <== NOT EXECUTED continue; 4000a3a8: d9dff06f j 4000a144 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a3ac: 0c0a2703 lw a4,192(s4) <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a3b0: 00000493 li s1,0 <== NOT EXECUTED return NULL; 4000a3b4: 00000413 li s0,0 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a3b8: 08e05a63 blez a4,4000a44c <== NOT EXECUTED 4000a3bc: 0c4a2783 lw a5,196(s4) <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a3c0: 00000493 li s1,0 <== NOT EXECUTED 4000a3c4: 0100006f j 4000a3d4 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a3c8: 00148493 addi s1,s1,1 <== NOT EXECUTED 4000a3cc: 00478793 addi a5,a5,4 <== NOT EXECUTED 4000a3d0: 06e48e63 beq s1,a4,4000a44c <== NOT EXECUTED if (c->inocache_list[*i]) 4000a3d4: 0007a403 lw s0,0(a5) <== NOT EXECUTED 4000a3d8: fe0408e3 beqz s0,4000a3c8 <== NOT EXECUTED 4000a3dc: 0100006f j 4000a3ec <== NOT EXECUTED ic->scan_dents = fd->next; 4000a3e0: 00452783 lw a5,4(a0) <== NOT EXECUTED 4000a3e4: 00f42023 sw a5,0(s0) <== NOT EXECUTED jffs2_free_full_dirent(fd); 4000a3e8: c90fa0ef jal ra,40004878 <== NOT EXECUTED while(ic->scan_dents) { 4000a3ec: 00042503 lw a0,0(s0) <== NOT EXECUTED 4000a3f0: fe0518e3 bnez a0,4000a3e0 <== NOT EXECUTED if (ic->next) 4000a3f4: 01042403 lw s0,16(s0) <== NOT EXECUTED 4000a3f8: fe041ae3 bnez s0,4000a3ec <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a3fc: 0c0a2703 lw a4,192(s4) <== NOT EXECUTED (*i)++; 4000a400: 00148693 addi a3,s1,1 <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a404: 02e6d463 bge a3,a4,4000a42c <== NOT EXECUTED 4000a408: 0c4a2783 lw a5,196(s4) <== NOT EXECUTED 4000a40c: 00249613 slli a2,s1,0x2 <== NOT EXECUTED if (c->inocache_list[*i]) 4000a410: 00068493 mv s1,a3 <== NOT EXECUTED 4000a414: 00c787b3 add a5,a5,a2 <== NOT EXECUTED 4000a418: 0047a403 lw s0,4(a5) <== NOT EXECUTED 4000a41c: fc0418e3 bnez s0,4000a3ec <== NOT EXECUTED for (; *i < c->inocache_hashsize; (*i)++) { 4000a420: 00148493 addi s1,s1,1 <== NOT EXECUTED 4000a424: 00478793 addi a5,a5,4 <== NOT EXECUTED 4000a428: fe9718e3 bne a4,s1,4000a418 <== NOT EXECUTED jffs2_free_ino_caches(c); 4000a42c: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a430: f11fa0ef jal ra,40005340 <== NOT EXECUTED jffs2_free_raw_node_refs(c); 4000a434: 000a0513 mv a0,s4 <== NOT EXECUTED 4000a438: f8dfa0ef jal ra,400053c4 <== NOT EXECUTED kvfree(c->blocks); 4000a43c: 054a2503 lw a0,84(s4) <== NOT EXECUTED return ret; 4000a440: ffb00c13 li s8,-5 <== NOT EXECUTED kvfree(c->blocks); 4000a444: 290030ef jal ra,4000d6d4 <== NOT EXECUTED return ret; 4000a448: e65ff06f j 4000a2ac <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a44c: fe0400e3 beqz s0,4000a42c <== NOT EXECUTED 4000a450: f9dff06f j 4000a3ec <== NOT EXECUTED BUG_ON(!(fd->ic->flags & INO_FLAGS_IS_DIR)); 4000a454: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 4000a458: 4001f637 lui a2,0x4001f <== NOT EXECUTED 4000a45c: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000a460: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 4000a464: 28060613 addi a2,a2,640 # 4001f280 <__func__.0> <== NOT EXECUTED 4000a468: 0c400593 li a1,196 <== NOT EXECUTED 4000a46c: 25450513 addi a0,a0,596 # 4001f254 <__func__.1+0x78> <== NOT EXECUTED 4000a470: 631020ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a474: 00000413 li s0,0 <== NOT EXECUTED 4000a478: bc1ff06f j 4000a038 <== NOT EXECUTED for_each_inode(i, c, ic) { 4000a47c: 00000913 li s2,0 <== NOT EXECUTED return NULL; 4000a480: 00000493 li s1,0 <== NOT EXECUTED 4000a484: b81ff06f j 4000a004 <== NOT EXECUTED return -ENOMEM; 4000a488: ff400c13 li s8,-12 <== NOT EXECUTED 4000a48c: e21ff06f j 4000a2ac <== NOT EXECUTED =============================================================================== 4000883c : #include "compr.h" int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t mode, struct jffs2_raw_inode *ri) { 4000883c: fe010113 addi sp,sp,-32 40008840: 00812c23 sw s0,24(sp) 40008844: 01212823 sw s2,16(sp) 40008848: 01312623 sw s3,12(sp) 4000884c: 01412423 sw s4,8(sp) 40008850: 00112e23 sw ra,28(sp) 40008854: 00912a23 sw s1,20(sp) 40008858: 01512223 sw s5,4(sp) 4000885c: 01612023 sw s6,0(sp) 40008860: 00050a13 mv s4,a0 40008864: 00058913 mv s2,a1 40008868: 00060993 mv s3,a2 4000886c: 00068413 mv s0,a3 struct jffs2_inode_cache *ic; ic = jffs2_alloc_inode_cache(); 40008870: 930fc0ef jal ra,400049a0 if (!ic) { 40008874: 10050e63 beqz a0,40008990 <== NEVER TAKEN return -ENOMEM; } memset(ic, 0, sizeof(*ic)); 40008878: 00050493 mv s1,a0 4000887c: 01800613 li a2,24 40008880: 00000593 li a1,0 40008884: 095130ef jal ra,4001c118 f->inocache = ic; f->inocache->pino_nlink = 1; /* Will be overwritten shortly for directories */ 40008888: 00100a93 li s5,1 f->inocache = ic; 4000888c: 00992a23 sw s1,20(s2) f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; f->inocache->state = INO_STATE_PRESENT; 40008890: 00200b13 li s6,2 jffs2_add_ino_cache(c, f->inocache); 40008894: 00048593 mv a1,s1 40008898: 000a0513 mv a0,s4 f->inocache->pino_nlink = 1; /* Will be overwritten shortly for directories */ 4000889c: 0154aa23 sw s5,20(s1) f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; 400088a0: 0094a223 sw s1,4(s1) f->inocache->state = INO_STATE_PRESENT; 400088a4: 01649523 sh s6,10(s1) jffs2_add_ino_cache(c, f->inocache); 400088a8: 9d9fc0ef jal ra,40005280 jffs2_dbg(1, "%s(): Assigned ino# %d\n", __func__, f->inocache->ino); ri->ino = cpu_to_je32(f->inocache->ino); 400088ac: 01492783 lw a5,20(s2) 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)); 400088b0: 00040593 mv a1,s0 400088b4: 00000513 li a0,0 ri->ino = cpu_to_je32(f->inocache->ino); 400088b8: 00c7c603 lbu a2,12(a5) 400088bc: 00d7c683 lbu a3,13(a5) 400088c0: 00e7c703 lbu a4,14(a5) 400088c4: 00f7c783 lbu a5,15(a5) 400088c8: 00c40623 sb a2,12(s0) 400088cc: 00d406a3 sb a3,13(s0) 400088d0: 00f407a3 sb a5,15(s0) ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 400088d4: f8500793 li a5,-123 400088d8: 00f40023 sb a5,0(s0) 400088dc: 01900793 li a5,25 400088e0: 00f400a3 sb a5,1(s0) ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 400088e4: fe000793 li a5,-32 400088e8: 00f401a3 sb a5,3(s0) ri->totlen = cpu_to_je32(PAD(sizeof(*ri))); 400088ec: 04400793 li a5,68 ri->ino = cpu_to_je32(f->inocache->ino); 400088f0: 00e40723 sb a4,14(s0) ri->totlen = cpu_to_je32(PAD(sizeof(*ri))); 400088f4: 00f40223 sb a5,4(s0) ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)); 400088f8: 00800613 li a2,8 ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 400088fc: 01640123 sb s6,2(s0) ri->totlen = cpu_to_je32(PAD(sizeof(*ri))); 40008900: 000402a3 sb zero,5(s0) 40008904: 00040323 sb zero,6(s0) 40008908: 000403a3 sb zero,7(s0) ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)); 4000890c: 385010ef jal ra,4000a490 return osmode & (S_IFMT | S_IRWXU | S_IRWXG | S_IRWXO); 40008910: 0000f7b7 lui a5,0xf 40008914: 1ff78793 addi a5,a5,511 # f1ff 40008918: 00f9f7b3 and a5,s3,a5 4000891c: 00855593 srli a1,a0,0x8 40008920: 01055613 srli a2,a0,0x10 40008924: 01855693 srli a3,a0,0x18 ri->mode = cpu_to_jemode(mode); 40008928: 0087d713 srli a4,a5,0x8 4000892c: 0107d793 srli a5,a5,0x10 ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)); 40008930: 00a40423 sb a0,8(s0) 40008934: 00b404a3 sb a1,9(s0) 40008938: 00c40523 sb a2,10(s0) 4000893c: 00d405a3 sb a3,11(s0) ri->mode = cpu_to_jemode(mode); 40008940: 01340a23 sb s3,20(s0) 40008944: 00e40aa3 sb a4,21(s0) 40008948: 00f40b23 sb a5,22(s0) 4000894c: 00040ba3 sb zero,23(s0) f->highest_version = 1; 40008950: 01592023 sw s5,0(s2) ri->version = cpu_to_je32(f->highest_version); 40008954: 01540823 sb s5,16(s0) 40008958: 000408a3 sb zero,17(s0) 4000895c: 00040923 sb zero,18(s0) 40008960: 000409a3 sb zero,19(s0) return 0; 40008964: 00000513 li a0,0 } 40008968: 01c12083 lw ra,28(sp) 4000896c: 01812403 lw s0,24(sp) 40008970: 01412483 lw s1,20(sp) 40008974: 01012903 lw s2,16(sp) 40008978: 00c12983 lw s3,12(sp) 4000897c: 00812a03 lw s4,8(sp) 40008980: 00412a83 lw s5,4(sp) 40008984: 00012b03 lw s6,0(sp) 40008988: 02010113 addi sp,sp,32 4000898c: 00008067 ret return -ENOMEM; 40008990: ff400513 li a0,-12 <== NOT EXECUTED 40008994: fd5ff06f j 40008968 <== NOT EXECUTED =============================================================================== 400084cc : /* Scan the list of all nodes present for this ino, build map of versions, etc. */ int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t ino, struct jffs2_raw_inode *latest_node) { 400084cc: fe010113 addi sp,sp,-32 400084d0: 01212823 sw s2,16(sp) 400084d4: 4001f937 lui s2,0x4001f 400084d8: 00812c23 sw s0,24(sp) 400084dc: 00912a23 sw s1,20(sp) 400084e0: 01312623 sw s3,12(sp) 400084e4: 01412423 sw s4,8(sp) 400084e8: 01512223 sw s5,4(sp) 400084ec: 00112e23 sw ra,28(sp) 400084f0: 00050a93 mv s5,a0 400084f4: 00058413 mv s0,a1 400084f8: 00060493 mv s1,a2 400084fc: 00068993 mv s3,a3 40008500: 00500a13 li s4,5 40008504: ef490913 addi s2,s2,-268 # 4001eef4 <__func__.0+0xc04> dbg_readinode("read inode #%u\n", ino); retry_inocache: spin_lock(&c->inocache_lock); f->inocache = jffs2_get_ino_cache(c, ino); 40008508: 00048593 mv a1,s1 4000850c: 000a8513 mv a0,s5 40008510: d29fc0ef jal ra,40005238 40008514: 00a42a23 sw a0,20(s0) if (f->inocache) { 40008518: 06050863 beqz a0,40008588 /* Check its state. We may need to wait before we can use it */ switch(f->inocache->state) { 4000851c: 00a55683 lhu a3,10(a0) 40008520: 0eda6a63 bltu s4,a3,40008614 40008524: 00269793 slli a5,a3,0x2 40008528: 012787b3 add a5,a5,s2 4000852c: 0007a783 lw a5,0(a5) 40008530: 00078067 jr a5 case INO_STATE_UNCHECKED: case INO_STATE_CHECKEDABSENT: f->inocache->state = INO_STATE_READING; 40008534: 00500793 li a5,5 40008538: 00f51523 sh a5,10(a0) if (!f->inocache) { JFFS2_ERROR("requested to read a nonexistent ino %u\n", ino); return -ENOENT; } return jffs2_do_read_inode_internal(c, f, latest_node); 4000853c: 00040593 mv a1,s0 } 40008540: 01812403 lw s0,24(sp) 40008544: 01c12083 lw ra,28(sp) 40008548: 01412483 lw s1,20(sp) 4000854c: 01012903 lw s2,16(sp) 40008550: 00812a03 lw s4,8(sp) return jffs2_do_read_inode_internal(c, f, latest_node); 40008554: 00098613 mv a2,s3 40008558: 000a8513 mv a0,s5 } 4000855c: 00c12983 lw s3,12(sp) 40008560: 00412a83 lw s5,4(sp) 40008564: 02010113 addi sp,sp,32 return jffs2_do_read_inode_internal(c, f, latest_node); 40008568: 8b9fe06f j 40006e20 JFFS2_ERROR("Eep. Trying to read_inode #%u when it's already in state %d!\n", ino, f->inocache->state); 4000856c: 4001f5b7 lui a1,0x4001f <== NOT EXECUTED 40008570: 4001f537 lui a0,0x4001f <== NOT EXECUTED 40008574: 00048613 mv a2,s1 <== NOT EXECUTED 40008578: f3458593 addi a1,a1,-204 # 4001ef34 <__func__.10> <== NOT EXECUTED 4000857c: e2050513 addi a0,a0,-480 # 4001ee20 <__func__.0+0xb30> <== NOT EXECUTED 40008580: e20fe0ef jal ra,40006ba0 <== NOT EXECUTED f->inocache = NULL; 40008584: 00042a23 sw zero,20(s0) <== NOT EXECUTED if (!f->inocache && ino == 1) { 40008588: 00100793 li a5,1 4000858c: 04f48263 beq s1,a5,400085d0 JFFS2_ERROR("requested to read a nonexistent ino %u\n", ino); 40008590: 4001f5b7 lui a1,0x4001f <== NOT EXECUTED 40008594: 4001f537 lui a0,0x4001f <== NOT EXECUTED 40008598: 00048613 mv a2,s1 <== NOT EXECUTED 4000859c: f3458593 addi a1,a1,-204 # 4001ef34 <__func__.10> <== NOT EXECUTED 400085a0: eb450513 addi a0,a0,-332 # 4001eeb4 <__func__.0+0xbc4> <== NOT EXECUTED 400085a4: dfcfe0ef jal ra,40006ba0 <== NOT EXECUTED return -ENOENT; 400085a8: ffe00513 li a0,-2 <== NOT EXECUTED } 400085ac: 01c12083 lw ra,28(sp) <== NOT EXECUTED 400085b0: 01812403 lw s0,24(sp) <== NOT EXECUTED 400085b4: 01412483 lw s1,20(sp) <== NOT EXECUTED 400085b8: 01012903 lw s2,16(sp) <== NOT EXECUTED 400085bc: 00c12983 lw s3,12(sp) <== NOT EXECUTED 400085c0: 00812a03 lw s4,8(sp) <== NOT EXECUTED 400085c4: 00412a83 lw s5,4(sp) <== NOT EXECUTED 400085c8: 02010113 addi sp,sp,32 <== NOT EXECUTED 400085cc: 00008067 ret <== NOT EXECUTED f->inocache = jffs2_alloc_inode_cache(); 400085d0: bd0fc0ef jal ra,400049a0 400085d4: 00a42a23 sw a0,20(s0) if (!f->inocache) { 400085d8: 04050e63 beqz a0,40008634 <== NEVER TAKEN memset(f->inocache, 0, sizeof(struct jffs2_inode_cache)); 400085dc: 01800613 li a2,24 400085e0: 00000593 li a1,0 400085e4: 335130ef jal ra,4001c118 f->inocache->ino = f->inocache->pino_nlink = 1; 400085e8: 01442583 lw a1,20(s0) f->inocache->state = INO_STATE_READING; 400085ec: 00500793 li a5,5 jffs2_add_ino_cache(c, f->inocache); 400085f0: 000a8513 mv a0,s5 f->inocache->state = INO_STATE_READING; 400085f4: 00f59523 sh a5,10(a1) f->inocache->ino = f->inocache->pino_nlink = 1; 400085f8: 0095aa23 sw s1,20(a1) 400085fc: 0095a623 sw s1,12(a1) f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; 40008600: 00b5a223 sw a1,4(a1) jffs2_add_ino_cache(c, f->inocache); 40008604: c7dfc0ef jal ra,40005280 if (!f->inocache) { 40008608: 01442783 lw a5,20(s0) 4000860c: f20798e3 bnez a5,4000853c <== ALWAYS TAKEN 40008610: f81ff06f j 40008590 <== NOT EXECUTED BUG(); 40008614: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40008618: 4001f637 lui a2,0x4001f <== NOT EXECUTED 4000861c: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40008620: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40008624: f3460613 addi a2,a2,-204 # 4001ef34 <__func__.10> <== NOT EXECUTED 40008628: 55a00593 li a1,1370 <== NOT EXECUTED 4000862c: 43850513 addi a0,a0,1080 # 4001e438 <__func__.0+0x148> <== NOT EXECUTED 40008630: 471040ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED JFFS2_ERROR("cannot allocate inocache for root inode\n"); 40008634: 4001f5b7 lui a1,0x4001f <== NOT EXECUTED 40008638: 4001f537 lui a0,0x4001f <== NOT EXECUTED 4000863c: f3458593 addi a1,a1,-204 # 4001ef34 <__func__.10> <== NOT EXECUTED 40008640: e7450513 addi a0,a0,-396 # 4001ee74 <__func__.0+0xb84> <== NOT EXECUTED 40008644: d5cfe0ef jal ra,40006ba0 <== NOT EXECUTED return -ENOMEM; 40008648: ff400513 li a0,-12 <== NOT EXECUTED 4000864c: f61ff06f j 400085ac <== NOT EXECUTED =============================================================================== 400099a8 : int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, const char *name, int namelen, struct jffs2_inode_info *dead_f, uint32_t time) { 400099a8: fe010113 addi sp,sp,-32 400099ac: 01212823 sw s2,16(sp) 400099b0: 01312623 sw s3,12(sp) 400099b4: 01412423 sw s4,8(sp) 400099b8: 01512223 sw s5,4(sp) 400099bc: 00112e23 sw ra,28(sp) 400099c0: 00812c23 sw s0,24(sp) 400099c4: 00912a23 sw s1,20(sp) 400099c8: 00068913 mv s2,a3 400099cc: 00050a13 mv s4,a0 400099d0: 00060993 mv s3,a2 400099d4: 00070a93 mv s5,a4 while (len--) { 400099d8: 12068e63 beqz a3,40009b14 <== NEVER TAKEN 400099dc: 00d60733 add a4,a2,a3 400099e0: 00060793 mv a5,a2 uint32_t hash = 0; 400099e4: 00000413 li s0,0 hash ^= *(name++); 400099e8: 0007c803 lbu a6,0(a5) hash = (hash << 4) | (hash >> 28); 400099ec: 00441893 slli a7,s0,0x4 400099f0: 01c45413 srli s0,s0,0x1c 400099f4: 01146433 or s0,s0,a7 hash ^= *(name++); 400099f8: 00178793 addi a5,a5,1 400099fc: 00884433 xor s0,a6,s0 while (len--) { 40009a00: fee794e3 bne a5,a4,400099e8 jffs2_add_fd_to_list(c, fd, &dir_f->dents); mutex_unlock(&dir_f->sem); } else { uint32_t nhash = full_name_hash(NULL, name, namelen); fd = dir_f->dents; 40009a04: 00c5a483 lw s1,12(a1) /* We don't actually want to reserve any space, but we do want to be holding the alloc_sem when we write to flash */ mutex_lock(&c->alloc_sem); mutex_lock(&dir_f->sem); for (fd = dir_f->dents; fd; fd = fd->next) { 40009a08: 00049863 bnez s1,40009a18 <== ALWAYS TAKEN 40009a0c: 0480006f j 40009a54 <== NOT EXECUTED 40009a10: 0044a483 lw s1,4(s1) 40009a14: 04048063 beqz s1,40009a54 <== NEVER TAKEN if (fd->nhash == nhash && 40009a18: 0104a783 lw a5,16(s1) 40009a1c: fe879ae3 bne a5,s0,40009a10 !memcmp(fd->name, name, namelen) && 40009a20: 01548513 addi a0,s1,21 40009a24: 00090613 mv a2,s2 40009a28: 00098593 mv a1,s3 40009a2c: 54c120ef jal ra,4001bf78 !fd->name[namelen]) { 40009a30: 012487b3 add a5,s1,s2 if (fd->nhash == nhash && 40009a34: fc051ee3 bnez a0,40009a10 <== NEVER TAKEN !memcmp(fd->name, name, namelen) && 40009a38: 0157c783 lbu a5,21(a5) 40009a3c: fc079ae3 bnez a5,40009a10 <== NEVER TAKEN jffs2_dbg(1, "Marking old dirent node (ino #%u) @%08x obsolete\n", fd->ino, ref_offset(fd->raw)); jffs2_mark_node_obsolete(c, fd->raw); 40009a40: 0004a583 lw a1,0(s1) 40009a44: 000a0513 mv a0,s4 40009a48: 854fc0ef jal ra,40005a9c /* We don't want to remove it from the list immediately, because that screws up getdents()/seek() semantics even more than they're screwed already. Turn it into a node-less deletion dirent instead -- a placeholder */ fd->raw = NULL; 40009a4c: 0004a023 sw zero,0(s1) fd->ino = 0; 40009a50: 0004a623 sw zero,12(s1) } /* dead_f is NULL if this was a rename not a real unlink */ /* Also catch the !f->inocache case, where there was a dirent pointing to an inode which didn't exist. */ if (dead_f && dead_f->inocache) { 40009a54: 020a8663 beqz s5,40009a80 <== NEVER TAKEN 40009a58: 014aa783 lw a5,20(s5) 40009a5c: 02078263 beqz a5,40009a80 <== NEVER TAKEN mutex_lock(&dead_f->sem); if (S_ISDIR(OFNI_EDONI_2SFFJ(dead_f)->i_mode)) { 40009a60: fc0aa603 lw a2,-64(s5) 40009a64: 0000f737 lui a4,0xf 40009a68: 000046b7 lui a3,0x4 40009a6c: 00c77733 and a4,a4,a2 40009a70: 04d70063 beq a4,a3,40009ab0 jffs2_mark_node_obsolete(c, fd->raw); jffs2_free_full_dirent(fd); } dead_f->inocache->pino_nlink = 0; } else dead_f->inocache->pino_nlink--; 40009a74: 0147a703 lw a4,20(a5) 40009a78: fff70713 addi a4,a4,-1 # efff 40009a7c: 00e7aa23 sw a4,20(a5) /* NB: Caller must set inode nlink if appropriate */ mutex_unlock(&dead_f->sem); } jffs2_complete_reservation(c); 40009a80: 000a0513 mv a0,s4 40009a84: 804fc0ef jal ra,40005a88 return 0; } 40009a88: 01c12083 lw ra,28(sp) 40009a8c: 01812403 lw s0,24(sp) 40009a90: 01412483 lw s1,20(sp) 40009a94: 01012903 lw s2,16(sp) 40009a98: 00c12983 lw s3,12(sp) 40009a9c: 00812a03 lw s4,8(sp) 40009aa0: 00412a83 lw s5,4(sp) 40009aa4: 00000513 li a0,0 40009aa8: 02010113 addi sp,sp,32 40009aac: 00008067 ret while (dead_f->dents) { 40009ab0: 00caa403 lw s0,12(s5) 40009ab4: 04040c63 beqz s0,40009b0c <== ALWAYS TAKEN pr_warn("Deleting inode #%u with active dentry \"%s\"->ino #%u\n", 40009ab8: 4001f4b7 lui s1,0x4001f <== NOT EXECUTED 40009abc: 0240006f j 40009ae0 <== NOT EXECUTED if (fd->raw) 40009ac0: 00042583 lw a1,0(s0) <== NOT EXECUTED jffs2_mark_node_obsolete(c, fd->raw); 40009ac4: 000a0513 mv a0,s4 <== NOT EXECUTED if (fd->raw) 40009ac8: 00058463 beqz a1,40009ad0 <== NOT EXECUTED jffs2_mark_node_obsolete(c, fd->raw); 40009acc: fd1fb0ef jal ra,40005a9c <== NOT EXECUTED jffs2_free_full_dirent(fd); 40009ad0: 00040513 mv a0,s0 <== NOT EXECUTED 40009ad4: da5fa0ef jal ra,40004878 <== NOT EXECUTED while (dead_f->dents) { 40009ad8: 00caa403 lw s0,12(s5) <== NOT EXECUTED 40009adc: 02040663 beqz s0,40009b08 <== NOT EXECUTED dead_f->dents = fd->next; 40009ae0: 00442783 lw a5,4(s0) <== NOT EXECUTED if (fd->ino) { 40009ae4: 00c42683 lw a3,12(s0) <== NOT EXECUTED dead_f->dents = fd->next; 40009ae8: 00faa623 sw a5,12(s5) <== NOT EXECUTED if (fd->ino) { 40009aec: fc068ae3 beqz a3,40009ac0 <== NOT EXECUTED pr_warn("Deleting inode #%u with active dentry \"%s\"->ino #%u\n", 40009af0: 014aa783 lw a5,20(s5) <== NOT EXECUTED 40009af4: 01540613 addi a2,s0,21 <== NOT EXECUTED 40009af8: 18848513 addi a0,s1,392 # 4001f188 <__func__.9+0x1d0> <== NOT EXECUTED 40009afc: 00c7a583 lw a1,12(a5) <== NOT EXECUTED 40009b00: cfdfe0ef jal ra,400087fc <== NOT EXECUTED 40009b04: fbdff06f j 40009ac0 <== NOT EXECUTED dead_f->inocache->pino_nlink = 0; 40009b08: 014aa783 lw a5,20(s5) <== NOT EXECUTED 40009b0c: 0007aa23 sw zero,20(a5) 40009b10: f71ff06f j 40009a80 uint32_t hash = 0; 40009b14: 00000413 li s0,0 <== NOT EXECUTED 40009b18: eedff06f j 40009a04 <== NOT EXECUTED =============================================================================== 4000b400 : { 4000b400: fa010113 addi sp,sp,-96 4000b404: 04812c23 sw s0,88(sp) 4000b408: 05212823 sw s2,80(sp) 4000b40c: 05312623 sw s3,76(sp) 4000b410: 05412423 sw s4,72(sp) 4000b414: 03b12623 sw s11,44(sp) 4000b418: 04112e23 sw ra,92(sp) 4000b41c: 04912a23 sw s1,84(sp) 4000b420: 05512223 sw s5,68(sp) 4000b424: 05612023 sw s6,64(sp) 4000b428: 03712e23 sw s7,60(sp) 4000b42c: 03812c23 sw s8,56(sp) 4000b430: 03912a23 sw s9,52(sp) 4000b434: 03a12823 sw s10,48(sp) 4000b438: 00050d93 mv s11,a0 4000b43c: 00058413 mv s0,a1 while (!list_empty(&c->erase_complete_list) || 4000b440: 0a050913 addi s2,a0,160 int work_done = 0; 4000b444: 00000993 li s3,0 for (i=0; inext == list ); 4000b44c: 0a0dac83 lw s9,160(s11) while (!list_empty(&c->erase_complete_list) || 4000b450: 1f2c8863 beq s9,s2,4000b640 ent->prev->next = ent->next; 4000b454: 004ca603 lw a2,4(s9) 4000b458: 000ca683 lw a3,0(s9) list_move(&jeb->list, &c->erase_checking_list); 4000b45c: 090d8793 addi a5,s11,144 ebuf = kmalloc(PAGE_SIZE, GFP_KERNEL); 4000b460: 00001537 lui a0,0x1 4000b464: 00d62023 sw a3,0(a2) struct list_head *next = afterthisent->next; 4000b468: 090da703 lw a4,144(s11) ent->next->prev = ent->prev; 4000b46c: 00c6a223 sw a2,4(a3) newent->prev = afterthisent; 4000b470: 00fca223 sw a5,4(s9) newent->next = next; 4000b474: 00eca023 sw a4,0(s9) afterthisent->next = newent; 4000b478: 099da823 sw s9,144(s11) next->prev = newent; 4000b47c: 01972223 sw s9,4(a4) #define MTD_FAIL_ADDR_UNKNOWN -1LL static inline int do_mtd_point(size_t *retlen, void **ebuf) { *retlen = 0; 4000b480: 00012a23 sw zero,20(sp) 4000b484: 5f8020ef jal ra,4000da7c 4000b488: 00050c13 mv s8,a0 pr_warn("Failed to allocate page buffer for verifying erase at 0x%08x. Refiling\n", 4000b48c: 00ccab83 lw s7,12(s9) if (!ebuf) { 4000b490: 2c050e63 beqz a0,4000b76c <== NEVER TAKEN for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { 4000b494: 034da603 lw a2,52(s11) 4000b498: 01410d13 addi s10,sp,20 uint32_t readlen = min((uint32_t)PAGE_SIZE, jeb->offset + c->sector_size - ofs); 4000b49c: 000014b7 lui s1,0x1 for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { 4000b4a0: 00cb8633 add a2,s7,a2 if (*datum + 1) { 4000b4a4: fff00a93 li s5,-1 for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { 4000b4a8: 10cbfc63 bgeu s7,a2,4000b5c0 uint32_t readlen = min((uint32_t)PAGE_SIZE, jeb->offset + c->sector_size - ofs); 4000b4ac: 41760b33 sub s6,a2,s7 4000b4b0: 0164f463 bgeu s1,s6,4000b4b8 4000b4b4: 00001b37 lui s6,0x1 ret = jffs2_flash_read(c, ofs, readlen, &retlen, ebuf); 4000b4b8: 000c0713 mv a4,s8 4000b4bc: 000d0693 mv a3,s10 4000b4c0: 000b0613 mv a2,s6 4000b4c4: 000b8593 mv a1,s7 4000b4c8: 000d8513 mv a0,s11 4000b4cc: 4ac000ef jal ra,4000b978 if (ret) { 4000b4d0: 44051863 bnez a0,4000b920 <== NEVER TAKEN if (retlen != readlen) { 4000b4d4: 01412683 lw a3,20(sp) 4000b4d8: 46db1463 bne s6,a3,4000b940 4000b4dc: 00000793 li a5,0 4000b4e0: 00c0006f j 4000b4ec for (i=0; i if (*datum + 1) { 4000b4ec: 00fc06b3 add a3,s8,a5 4000b4f0: 0006a683 lw a3,0(a3) 4000b4f4: ff5688e3 beq a3,s5,4000b4e4 pr_warn("Newly-erased block contained word 0x%lx at offset 0x%08x\n", 4000b4f8: 00fb8633 add a2,s7,a5 <== NOT EXECUTED 4000b4fc: 00068593 mv a1,a3 <== NOT EXECUTED 4000b500: a74a0513 addi a0,s4,-1420 # 4001fa74 <__func__.0+0x218> <== NOT EXECUTED 4000b504: d71ff0ef jal ra,4000b274 <== NOT EXECUTED ofs += readlen; cond_resched(); } ret = 0; fail: kfree(ebuf); 4000b508: 000c0513 mv a0,s8 <== NOT EXECUTED 4000b50c: 1c8020ef jal ra,4000d6d4 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b510: 034da583 lw a1,52(s11) <== NOT EXECUTED 4000b514: 02cda703 lw a4,44(s11) <== NOT EXECUTED c->bad_size += c->sector_size; 4000b518: 030da783 lw a5,48(s11) <== NOT EXECUTED ent->prev->next = ent->next; 4000b51c: 000ca683 lw a3,0(s9) <== NOT EXECUTED 4000b520: 004ca603 lw a2,4(s9) <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b524: 40b70733 sub a4,a4,a1 <== NOT EXECUTED c->bad_size += c->sector_size; 4000b528: 00b787b3 add a5,a5,a1 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b52c: 02eda623 sw a4,44(s11) <== NOT EXECUTED c->bad_size += c->sector_size; 4000b530: 02fda823 sw a5,48(s11) <== NOT EXECUTED 4000b534: 00d62023 sw a3,0(a2) <== NOT EXECUTED struct list_head *next = afterthisent->next; 4000b538: 0b0da703 lw a4,176(s11) <== NOT EXECUTED c->nr_erasing_blocks--; 4000b53c: 040da783 lw a5,64(s11) <== NOT EXECUTED ent->next->prev = ent->prev; 4000b540: 00c6a223 sw a2,4(a3) <== NOT EXECUTED list_move(&jeb->list, &c->bad_list); 4000b544: 0b0d8693 addi a3,s11,176 <== NOT EXECUTED newent->next = next; 4000b548: 00eca023 sw a4,0(s9) <== NOT EXECUTED newent->prev = afterthisent; 4000b54c: 00dca223 sw a3,4(s9) <== NOT EXECUTED afterthisent->next = newent; 4000b550: 0b9da823 sw s9,176(s11) <== NOT EXECUTED next->prev = newent; 4000b554: 01972223 sw s9,4(a4) <== NOT EXECUTED c->nr_erasing_blocks--; 4000b558: fff78793 addi a5,a5,-1 <== NOT EXECUTED 4000b55c: 04fda023 sw a5,64(s11) <== NOT EXECUTED if (!--count) { 4000b560: fff40413 addi s0,s0,-1 work_done++; 4000b564: 00198993 addi s3,s3,1 if (!--count) { 4000b568: ee0412e3 bnez s0,4000b44c } 4000b56c: 05c12083 lw ra,92(sp) 4000b570: 05812403 lw s0,88(sp) 4000b574: 05412483 lw s1,84(sp) 4000b578: 05012903 lw s2,80(sp) 4000b57c: 04812a03 lw s4,72(sp) 4000b580: 04412a83 lw s5,68(sp) 4000b584: 04012b03 lw s6,64(sp) 4000b588: 03c12b83 lw s7,60(sp) 4000b58c: 03812c03 lw s8,56(sp) 4000b590: 03412c83 lw s9,52(sp) 4000b594: 03012d03 lw s10,48(sp) 4000b598: 02c12d83 lw s11,44(sp) 4000b59c: 00098513 mv a0,s3 4000b5a0: 04c12983 lw s3,76(sp) 4000b5a4: 06010113 addi sp,sp,96 4000b5a8: 00008067 ret for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { 4000b5ac: 00cca783 lw a5,12(s9) 4000b5b0: 034da683 lw a3,52(s11) ofs += readlen; 4000b5b4: 016b8bb3 add s7,s7,s6 for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { 4000b5b8: 00d78633 add a2,a5,a3 4000b5bc: eecbe8e3 bltu s7,a2,4000b4ac kfree(ebuf); 4000b5c0: 000c0513 mv a0,s8 4000b5c4: 110020ef jal ra,4000d6d4 /* Write the erase complete marker */ jffs2_dbg(1, "Writing erased marker to block at 0x%08x\n", jeb->offset); bad_offset = jeb->offset; /* Cleanmarker in oob area or no cleanmarker at all ? */ if (jffs2_cleanmarker_oob(c) || c->cleanmarker_size == 0) { 4000b5c8: 014da783 lw a5,20(s11) 4000b5cc: 26079c63 bnez a5,4000b844 <== ALWAYS TAKEN goto filebad; } } /* Everything else got zeroed before the erase */ jeb->free_size = c->sector_size; 4000b5d0: 034da683 lw a3,52(s11) <== NOT EXECUTED mutex_lock(&c->erase_free_sem); spin_lock(&c->erase_completion_lock); c->erasing_size -= c->sector_size; 4000b5d4: 02cda703 lw a4,44(s11) <== NOT EXECUTED c->free_size += c->sector_size; 4000b5d8: 028da783 lw a5,40(s11) <== NOT EXECUTED jeb->free_size = c->sector_size; 4000b5dc: 02dca023 sw a3,32(s9) <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b5e0: 40d70733 sub a4,a4,a3 <== NOT EXECUTED c->free_size += c->sector_size; 4000b5e4: 00d787b3 add a5,a5,a3 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b5e8: 02eda623 sw a4,44(s11) <== NOT EXECUTED c->free_size += c->sector_size; 4000b5ec: 02fda423 sw a5,40(s11) <== NOT EXECUTED ent->prev->next = ent->next; 4000b5f0: 004ca603 lw a2,4(s9) 4000b5f4: 000ca683 lw a3,0(s9) /* Account for cleanmarker now, if it's in-band */ if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); list_move_tail(&jeb->list, &c->free_list); c->nr_erasing_blocks--; 4000b5f8: 040da703 lw a4,64(s11) c->nr_free_blocks++; 4000b5fc: 03cda783 lw a5,60(s11) 4000b600: 00d62023 sw a3,0(a2) ent->next->prev = ent->prev; 4000b604: 00c6a223 sw a2,4(a3) struct list_head *prev = beforethisent->prev; 4000b608: 0acda683 lw a3,172(s11) list_move_tail(&jeb->list, &c->free_list); 4000b60c: 0a8d8613 addi a2,s11,168 newent->next = beforethisent; 4000b610: 00cca023 sw a2,0(s9) newent->prev = prev; 4000b614: 00dca223 sw a3,4(s9) beforethisent->prev = newent; 4000b618: 0b9da623 sw s9,172(s11) prev->next = newent; 4000b61c: 0196a023 sw s9,0(a3) c->nr_erasing_blocks--; 4000b620: fff70713 addi a4,a4,-1 c->nr_free_blocks++; 4000b624: 00178793 addi a5,a5,1 c->nr_erasing_blocks--; 4000b628: 04eda023 sw a4,64(s11) c->nr_free_blocks++; 4000b62c: 02fdae23 sw a5,60(s11) jffs2_dbg_acct_sanity_check_nolock(c, jeb); 4000b630: 000c8593 mv a1,s9 4000b634: 000d8513 mv a0,s11 4000b638: 814ff0ef jal ra,4000a64c <__jffs2_dbg_acct_sanity_check_nolock> jffs2_dbg_acct_paranoia_check_nolock(c, jeb); spin_unlock(&c->erase_completion_lock); mutex_unlock(&c->erase_free_sem); wake_up(&c->erase_wait); 4000b63c: f25ff06f j 4000b560 return ( list->next == list ); 4000b640: 098dac83 lw s9,152(s11) !list_empty(&c->erase_pending_list)) { 4000b644: 098d8493 addi s1,s11,152 while (!list_empty(&c->erase_complete_list) || 4000b648: f39482e3 beq s1,s9,4000b56c ent->prev->next = ent->next; 4000b64c: 004ca303 lw t1,4(s9) 4000b650: 000ca883 lw a7,0(s9) c->wasted_size -= jeb->wasted_size; 4000b654: 01ccaf83 lw t6,28(s9) c->free_size -= jeb->free_size; 4000b658: 020caf03 lw t5,32(s9) c->used_size -= jeb->used_size; 4000b65c: 014cae83 lw t4,20(s9) c->dirty_size -= jeb->dirty_size; 4000b660: 018cae03 lw t3,24(s9) c->erasing_size += c->sector_size; 4000b664: 02cda503 lw a0,44(s11) c->wasted_size -= jeb->wasted_size; 4000b668: 024da583 lw a1,36(s11) c->free_size -= jeb->free_size; 4000b66c: 028da603 lw a2,40(s11) c->used_size -= jeb->used_size; 4000b670: 01cda683 lw a3,28(s11) c->dirty_size -= jeb->dirty_size; 4000b674: 020da703 lw a4,32(s11) c->erasing_size += c->sector_size; 4000b678: 034da283 lw t0,52(s11) 4000b67c: 01132023 sw a7,0(t1) ent->next->prev = ent->prev; 4000b680: 0068a223 sw t1,4(a7) 4000b684: 00550533 add a0,a0,t0 c->wasted_size -= jeb->wasted_size; 4000b688: 41f585b3 sub a1,a1,t6 c->used_size -= jeb->used_size; 4000b68c: 41d686b3 sub a3,a3,t4 c->dirty_size -= jeb->dirty_size; 4000b690: 41c70733 sub a4,a4,t3 c->free_size -= jeb->free_size; 4000b694: 41e60633 sub a2,a2,t5 c->erasing_size += c->sector_size; 4000b698: 02ada623 sw a0,44(s11) c->wasted_size -= jeb->wasted_size; 4000b69c: 02bda223 sw a1,36(s11) c->used_size -= jeb->used_size; 4000b6a0: 00ddae23 sw a3,28(s11) c->dirty_size -= jeb->dirty_size; 4000b6a4: 02eda023 sw a4,32(s11) c->free_size -= jeb->free_size; 4000b6a8: 02cda423 sw a2,40(s11) jffs2_free_jeb_node_refs(c, jeb); 4000b6ac: 000c8593 mv a1,s9 4000b6b0: 000d8513 mv a0,s11 jeb->wasted_size = jeb->used_size = jeb->dirty_size = jeb->free_size = 0; 4000b6b4: 020ca023 sw zero,32(s9) 4000b6b8: 000cac23 sw zero,24(s9) 4000b6bc: 000caa23 sw zero,20(s9) 4000b6c0: 000cae23 sw zero,28(s9) jffs2_free_jeb_node_refs(c, jeb); 4000b6c4: bf1ff0ef jal ra,4000b2b4 struct list_head *next = afterthisent->next; 4000b6c8: 088da703 lw a4,136(s11) list_add(&jeb->list, &c->erasing_list); 4000b6cc: 088d8693 addi a3,s11,136 newent->prev = afterthisent; 4000b6d0: 00dca223 sw a3,4(s9) newent->next = next; 4000b6d4: 00eca023 sw a4,0(s9) afterthisent->next = newent; 4000b6d8: 099da423 sw s9,136(s11) next->prev = newent; 4000b6dc: 01972223 sw s9,4(a4) ret = jffs2_flash_erase(c, jeb); 4000b6e0: 000c8593 mv a1,s9 4000b6e4: 000d8513 mv a0,s11 4000b6e8: 4f4000ef jal ra,4000bbdc if (!ret) { 4000b6ec: 10050863 beqz a0,4000b7fc <== ALWAYS TAKEN if (ret == -ENOMEM || ret == -EAGAIN) { 4000b6f0: 00c50713 addi a4,a0,12 # 100c <_ISR_Stack_size+0xc> <== NOT EXECUTED 4000b6f4: 00100693 li a3,1 <== NOT EXECUTED 4000b6f8: 0ae6fe63 bgeu a3,a4,4000b7b4 <== NOT EXECUTED if (ret == -EROFS) 4000b6fc: fe200713 li a4,-30 <== NOT EXECUTED bad_offset = jeb->offset; 4000b700: 00cca583 lw a1,12(s9) <== NOT EXECUTED if (ret == -EROFS) 4000b704: 12e50863 beq a0,a4,4000b834 <== NOT EXECUTED pr_warn("Erase at 0x%08x failed immediately: errno %d\n", 4000b708: 400207b7 lui a5,0x40020 <== NOT EXECUTED 4000b70c: 00050613 mv a2,a0 <== NOT EXECUTED 4000b710: b9078513 addi a0,a5,-1136 # 4001fb90 <__func__.0+0x334> <== NOT EXECUTED 4000b714: b61ff0ef jal ra,4000b274 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b718: 034da503 lw a0,52(s11) <== NOT EXECUTED 4000b71c: 02cda683 lw a3,44(s11) <== NOT EXECUTED c->bad_size += c->sector_size; 4000b720: 030da703 lw a4,48(s11) <== NOT EXECUTED ent->prev->next = ent->next; 4000b724: 000ca603 lw a2,0(s9) <== NOT EXECUTED 4000b728: 004ca583 lw a1,4(s9) <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b72c: 40a686b3 sub a3,a3,a0 <== NOT EXECUTED c->bad_size += c->sector_size; 4000b730: 00a70733 add a4,a4,a0 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b734: 02dda623 sw a3,44(s11) <== NOT EXECUTED c->bad_size += c->sector_size; 4000b738: 02eda823 sw a4,48(s11) <== NOT EXECUTED 4000b73c: 00c5a023 sw a2,0(a1) <== NOT EXECUTED struct list_head *next = afterthisent->next; 4000b740: 0b0da683 lw a3,176(s11) <== NOT EXECUTED c->nr_erasing_blocks--; 4000b744: 040da703 lw a4,64(s11) <== NOT EXECUTED ent->next->prev = ent->prev; 4000b748: 00b62223 sw a1,4(a2) <== NOT EXECUTED list_move(&jeb->list, &c->bad_list); 4000b74c: 0b0d8613 addi a2,s11,176 <== NOT EXECUTED newent->next = next; 4000b750: 00dca023 sw a3,0(s9) <== NOT EXECUTED newent->prev = afterthisent; 4000b754: 00cca223 sw a2,4(s9) <== NOT EXECUTED afterthisent->next = newent; 4000b758: 0b9da823 sw s9,176(s11) <== NOT EXECUTED next->prev = newent; 4000b75c: 0196a223 sw s9,4(a3) <== NOT EXECUTED c->nr_erasing_blocks--; 4000b760: fff70793 addi a5,a4,-1 <== NOT EXECUTED 4000b764: 04fda023 sw a5,64(s11) <== NOT EXECUTED #define init_waitqueue_head(wait) do{} while (0) #define add_wait_queue(wait,new_wait) do{} while (0) #define remove_wait_queue(wait,old_wait) do{} while (0) #define DECLARE_WAITQUEUE(wait,current) do{} while (0) static inline void wake_up(wait_queue_head_t *erase_wait) { } 4000b768: ce5ff06f j 4000b44c <== NOT EXECUTED pr_warn("Failed to allocate page buffer for verifying erase at 0x%08x. Refiling\n", 4000b76c: 40020537 lui a0,0x40020 <== NOT EXECUTED 4000b770: 000b8593 mv a1,s7 <== NOT EXECUTED 4000b774: 98450513 addi a0,a0,-1660 # 4001f984 <__func__.0+0x128> <== NOT EXECUTED 4000b778: afdff0ef jal ra,4000b274 <== NOT EXECUTED rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000b77c: 0e4da503 lw a0,228(s11) <== NOT EXECUTED if (fc->trigger_garbage_collection != NULL) { 4000b780: 02052783 lw a5,32(a0) <== NOT EXECUTED 4000b784: 00078463 beqz a5,4000b78c <== NOT EXECUTED (*fc->trigger_garbage_collection)(fc); 4000b788: 000780e7 jalr a5 <== NOT EXECUTED ent->prev->next = ent->next; 4000b78c: 004ca683 lw a3,4(s9) <== NOT EXECUTED 4000b790: 000ca703 lw a4,0(s9) <== NOT EXECUTED 4000b794: 00e6a023 sw a4,0(a3) <== NOT EXECUTED struct list_head *next = afterthisent->next; 4000b798: 0a0da783 lw a5,160(s11) <== NOT EXECUTED ent->next->prev = ent->prev; 4000b79c: 00d72223 sw a3,4(a4) <== NOT EXECUTED newent->prev = afterthisent; 4000b7a0: 012ca223 sw s2,4(s9) <== NOT EXECUTED newent->next = next; 4000b7a4: 00fca023 sw a5,0(s9) <== NOT EXECUTED afterthisent->next = newent; 4000b7a8: 0b9da023 sw s9,160(s11) <== NOT EXECUTED next->prev = newent; 4000b7ac: 0197a223 sw s9,4(a5) <== NOT EXECUTED mutex_lock(&c->erase_free_sem); spin_lock(&c->erase_completion_lock); jffs2_garbage_collect_trigger(c); list_move(&jeb->list, &c->erase_complete_list); spin_unlock(&c->erase_completion_lock); mutex_unlock(&c->erase_free_sem); 4000b7b0: db1ff06f j 4000b560 <== NOT EXECUTED ent->prev->next = ent->next; 4000b7b4: 000ca683 lw a3,0(s9) <== NOT EXECUTED 4000b7b8: 004ca503 lw a0,4(s9) <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b7bc: 034da703 lw a4,52(s11) <== NOT EXECUTED 4000b7c0: 02cda603 lw a2,44(s11) <== NOT EXECUTED 4000b7c4: 00d52023 sw a3,0(a0) <== NOT EXECUTED struct list_head *next = afterthisent->next; 4000b7c8: 098da583 lw a1,152(s11) <== NOT EXECUTED ent->next->prev = ent->prev; 4000b7cc: 00a6a223 sw a0,4(a3) <== NOT EXECUTED c->dirty_size += c->sector_size; 4000b7d0: 020da683 lw a3,32(s11) <== NOT EXECUTED newent->next = next; 4000b7d4: 00bca023 sw a1,0(s9) <== NOT EXECUTED newent->prev = afterthisent; 4000b7d8: 009ca223 sw s1,4(s9) <== NOT EXECUTED afterthisent->next = newent; 4000b7dc: 099dac23 sw s9,152(s11) <== NOT EXECUTED next->prev = newent; 4000b7e0: 0195a223 sw s9,4(a1) <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b7e4: 40e60633 sub a2,a2,a4 <== NOT EXECUTED c->dirty_size += c->sector_size; 4000b7e8: 00e686b3 add a3,a3,a4 <== NOT EXECUTED c->erasing_size -= c->sector_size; 4000b7ec: 02cda623 sw a2,44(s11) <== NOT EXECUTED c->dirty_size += c->sector_size; 4000b7f0: 02dda023 sw a3,32(s11) <== NOT EXECUTED jeb->dirty_size = c->sector_size; 4000b7f4: 00ecac23 sw a4,24(s9) <== NOT EXECUTED return; 4000b7f8: c55ff06f j 4000b44c <== NOT EXECUTED ent->prev->next = ent->next; 4000b7fc: 004ca683 lw a3,4(s9) 4000b800: 000ca703 lw a4,0(s9) rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000b804: 0e4da503 lw a0,228(s11) 4000b808: 00e6a023 sw a4,0(a3) ent->next->prev = ent->prev; 4000b80c: 00d72223 sw a3,4(a4) struct list_head *prev = beforethisent->prev; 4000b810: 0a4da703 lw a4,164(s11) if (fc->trigger_garbage_collection != NULL) { 4000b814: 02052683 lw a3,32(a0) newent->next = beforethisent; 4000b818: 012ca023 sw s2,0(s9) newent->prev = prev; 4000b81c: 00eca223 sw a4,4(s9) beforethisent->prev = newent; 4000b820: 0b9da223 sw s9,164(s11) prev->next = newent; 4000b824: 01972023 sw s9,0(a4) 4000b828: c20682e3 beqz a3,4000b44c <== ALWAYS TAKEN (*fc->trigger_garbage_collection)(fc); 4000b82c: 000680e7 jalr a3 <== NOT EXECUTED 4000b830: c1dff06f j 4000b44c <== NOT EXECUTED pr_warn("Erase at 0x%08x failed immediately: -EROFS. Is the sector locked?\n", 4000b834: 400207b7 lui a5,0x40020 <== NOT EXECUTED 4000b838: b4078513 addi a0,a5,-1216 # 4001fb40 <__func__.0+0x2e4> <== NOT EXECUTED 4000b83c: a39ff0ef jal ra,4000b274 <== NOT EXECUTED 4000b840: ed9ff06f j 4000b718 <== NOT EXECUTED struct jffs2_unknown_node marker = { 4000b844: 00002737 lui a4,0x2 4000b848: 000026b7 lui a3,0x2 4000b84c: 00370713 addi a4,a4,3 # 2003 4000b850: 98568693 addi a3,a3,-1659 # 1985 <_ISR_Stack_size+0x985> jffs2_prealloc_raw_node_refs(c, jeb, 1); 4000b854: 00100613 li a2,1 4000b858: 000c8593 mv a1,s9 4000b85c: 000d8513 mv a0,s11 struct jffs2_unknown_node marker = { 4000b860: 00d11a23 sh a3,20(sp) 4000b864: 00e11b23 sh a4,22(sp) 4000b868: 00f12c23 sw a5,24(sp) marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4)); 4000b86c: 01410d13 addi s10,sp,20 struct jffs2_unknown_node marker = { 4000b870: 00012e23 sw zero,28(sp) jffs2_prealloc_raw_node_refs(c, jeb, 1); 4000b874: 838f90ef jal ra,400048ac marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4)); 4000b878: 00800613 li a2,8 4000b87c: 000d0593 mv a1,s10 4000b880: 00000513 li a0,0 4000b884: c0dfe0ef jal ra,4000a490 ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen); 4000b888: 00cca683 lw a3,12(s9) marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4)); 4000b88c: 00050313 mv t1,a0 vecs[0].iov_len = sizeof(marker); 4000b890: 00c00493 li s1,12 ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen); 4000b894: 00810793 addi a5,sp,8 4000b898: 00000713 li a4,0 4000b89c: 00100613 li a2,1 4000b8a0: 00c10593 addi a1,sp,12 4000b8a4: 000d8513 mv a0,s11 marker.hdr_crc = cpu_to_je32(crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4)); 4000b8a8: 00612e23 sw t1,28(sp) vecs[0].iov_base = (unsigned char *) ▮ 4000b8ac: 01a12623 sw s10,12(sp) vecs[0].iov_len = sizeof(marker); 4000b8b0: 00912823 sw s1,16(sp) ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen); 4000b8b4: 0f4000ef jal ra,4000b9a8 if (ret || retlen != sizeof(marker)) { 4000b8b8: 0a051463 bnez a0,4000b960 <== NEVER TAKEN 4000b8bc: 00812683 lw a3,8(sp) 4000b8c0: 00968e63 beq a3,s1,4000b8dc pr_warn("Short write to newly-erased block at 0x%08x: Wanted %zd, got %zd\n", 4000b8c4: 00cca583 lw a1,12(s9) <== NOT EXECUTED 4000b8c8: 40020537 lui a0,0x40020 <== NOT EXECUTED 4000b8cc: 00c00613 li a2,12 <== NOT EXECUTED 4000b8d0: af450513 addi a0,a0,-1292 # 4001faf4 <__func__.0+0x298> <== NOT EXECUTED 4000b8d4: 9a1ff0ef jal ra,4000b274 <== NOT EXECUTED goto filebad; 4000b8d8: c39ff06f j 4000b510 <== NOT EXECUTED jeb->free_size = c->sector_size; 4000b8dc: 034da603 lw a2,52(s11) c->erasing_size -= c->sector_size; 4000b8e0: 02cda703 lw a4,44(s11) c->free_size += c->sector_size; 4000b8e4: 028da783 lw a5,40(s11) if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) 4000b8e8: 014da683 lw a3,20(s11) c->erasing_size -= c->sector_size; 4000b8ec: 40c70733 sub a4,a4,a2 jeb->free_size = c->sector_size; 4000b8f0: 02cca023 sw a2,32(s9) c->free_size += c->sector_size; 4000b8f4: 00c787b3 add a5,a5,a2 c->erasing_size -= c->sector_size; 4000b8f8: 02eda623 sw a4,44(s11) c->free_size += c->sector_size; 4000b8fc: 02fda423 sw a5,40(s11) if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) 4000b900: ce0688e3 beqz a3,4000b5f0 <== NEVER TAKEN jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); 4000b904: 00cca603 lw a2,12(s9) 4000b908: 00000713 li a4,0 4000b90c: 000c8593 mv a1,s9 4000b910: 00366613 ori a2,a2,3 4000b914: 000d8513 mv a0,s11 4000b918: c51f90ef jal ra,40005568 4000b91c: cd5ff06f j 4000b5f0 pr_warn("Read of newly-erased block at 0x%08x failed: %d. Putting on bad_list\n", 4000b920: 400207b7 lui a5,0x40020 <== NOT EXECUTED 4000b924: 00050613 mv a2,a0 <== NOT EXECUTED 4000b928: 000b8593 mv a1,s7 <== NOT EXECUTED 4000b92c: 9d878513 addi a0,a5,-1576 # 4001f9d8 <__func__.0+0x17c> <== NOT EXECUTED 4000b930: 945ff0ef jal ra,4000b274 <== NOT EXECUTED kfree(ebuf); 4000b934: 000c0513 mv a0,s8 <== NOT EXECUTED 4000b938: 59d010ef jal ra,4000d6d4 <== NOT EXECUTED return ret; 4000b93c: bd5ff06f j 4000b510 <== NOT EXECUTED pr_warn("Short read from newly-erased block at 0x%08x. Wanted %d, got %zd\n", 4000b940: 400207b7 lui a5,0x40020 <== NOT EXECUTED 4000b944: 000b0613 mv a2,s6 <== NOT EXECUTED 4000b948: 000b8593 mv a1,s7 <== NOT EXECUTED 4000b94c: a2878513 addi a0,a5,-1496 # 4001fa28 <__func__.0+0x1cc> <== NOT EXECUTED 4000b950: 925ff0ef jal ra,4000b274 <== NOT EXECUTED kfree(ebuf); 4000b954: 000c0513 mv a0,s8 <== NOT EXECUTED 4000b958: 57d010ef jal ra,4000d6d4 <== NOT EXECUTED return ret; 4000b95c: bb5ff06f j 4000b510 <== NOT EXECUTED pr_warn("Write clean marker to block at 0x%08x failed: %d\n", 4000b960: 00cca583 lw a1,12(s9) <== NOT EXECUTED 4000b964: 400207b7 lui a5,0x40020 <== NOT EXECUTED 4000b968: 00050613 mv a2,a0 <== NOT EXECUTED 4000b96c: ab878513 addi a0,a5,-1352 # 4001fab8 <__func__.0+0x25c> <== NOT EXECUTED 4000b970: 905ff0ef jal ra,4000b274 <== NOT EXECUTED 4000b974: b9dff06f j 4000b510 <== NOT EXECUTED =============================================================================== 4000b9a8 : } int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct iovec *vecs, unsigned long count, loff_t to, size_t * retlen) { 4000b9a8: ec010113 addi sp,sp,-320 4000b9ac: 11912a23 sw s9,276(sp) 4000b9b0: 12112e23 sw ra,316(sp) 4000b9b4: 12812c23 sw s0,312(sp) 4000b9b8: 12912a23 sw s1,308(sp) 4000b9bc: 13212823 sw s2,304(sp) 4000b9c0: 13312623 sw s3,300(sp) 4000b9c4: 13412423 sw s4,296(sp) 4000b9c8: 13512223 sw s5,292(sp) 4000b9cc: 13612023 sw s6,288(sp) 4000b9d0: 11712e23 sw s7,284(sp) 4000b9d4: 11812c23 sw s8,280(sp) 4000b9d8: 11a12823 sw s10,272(sp) 4000b9dc: 11b12623 sw s11,268(sp) 4000b9e0: 00078c93 mv s9,a5 unsigned long i; size_t totlen = 0, thislen; int ret = 0; for (i = 0; i < count; i++) { 4000b9e4: 1e060263 beqz a2,4000bbc8 <== NEVER TAKEN 4000b9e8: 00060d93 mv s11,a2 4000b9ec: 00050b13 mv s6,a0 4000b9f0: 00058c13 mv s8,a1 4000b9f4: 00068d13 mv s10,a3 4000b9f8: 00458493 addi s1,a1,4 size_t totlen = 0, thislen; 4000b9fc: 00000a93 li s5,0 for (i = 0; i < count; i++) { 4000ba00: 00000993 li s3,0 if (((vecs[i].iov_len & (sizeof (int) - 1))) || (((unsigned long) vecs[i]. iov_base & (sizeof (unsigned long) - 1)))) { // are there iov's after this one? Or is it so much we'd need // to do multiple writes anyway? if ((i + 1) < count || vecs[i].iov_len > 256) { 4000ba04: 10000b93 li s7,256 4000ba08: 04c0006f j 4000ba54 (((unsigned long) vecs[i]. 4000ba0c: ffc4a703 lw a4,-4(s1) # ffc return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000ba10: 000d0593 mv a1,s10 4000ba14: 00040693 mv a3,s0 iov_base & (sizeof (unsigned long) - 1)))) { 4000ba18: 00377813 andi a6,a4,3 if (((vecs[i].iov_len & (sizeof (int) - 1))) || 4000ba1c: 04081c63 bnez a6,4000ba74 rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000ba20: 0e4b2503 lw a0,228(s6) # 10e4 <_ISR_Stack_size+0xe4> return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000ba24: 00070613 mv a2,a4 4000ba28: 00c52783 lw a5,12(a0) 4000ba2c: 000780e7 jalr a5 4000ba30: 00050a13 mv s4,a0 for (i = 0; i < count; i++) { 4000ba34: 00198993 addi s3,s3,1 } // else } else ret = jffs2_flash_write(c, to, vecs[i].iov_len, &thislen, vecs[i].iov_base); totlen += thislen; 4000ba38: 008a8ab3 add s5,s5,s0 if (ret || thislen != vecs[i].iov_len) 4000ba3c: 060a1e63 bnez s4,4000bab8 <== NEVER TAKEN 4000ba40: 0004a703 lw a4,0(s1) break; to += vecs[i].iov_len; 4000ba44: 008d0d33 add s10,s10,s0 for (i = 0; i < count; i++) { 4000ba48: 00848493 addi s1,s1,8 if (ret || thislen != vecs[i].iov_len) 4000ba4c: 06871663 bne a4,s0,4000bab8 for (i = 0; i < count; i++) { 4000ba50: 073d8463 beq s11,s3,4000bab8 if (((vecs[i].iov_len & (sizeof (int) - 1))) || 4000ba54: 0004a403 lw s0,0(s1) memcpy(buf, vecs[i].iov_base, lentowrite); 4000ba58: 00010513 mv a0,sp if ((i + 1) < count || vecs[i].iov_len > 256) { 4000ba5c: 00198793 addi a5,s3,1 lentowrite += sizeof (int) - 1; 4000ba60: 00340913 addi s2,s0,3 lentowrite &= ~(sizeof (int) - 1); 4000ba64: ffc97913 andi s2,s2,-4 if (((vecs[i].iov_len & (sizeof (int) - 1))) || 4000ba68: 00347713 andi a4,s0,3 memcpy(buf, vecs[i].iov_base, lentowrite); 4000ba6c: 00090613 mv a2,s2 if (((vecs[i].iov_len & (sizeof (int) - 1))) || 4000ba70: f8070ee3 beqz a4,4000ba0c if ((i + 1) < count || vecs[i].iov_len > 256) { 4000ba74: 09b7e663 bltu a5,s11,4000bb00 4000ba78: 088be463 bltu s7,s0,4000bb00 memcpy(buf, vecs[i].iov_base, lentowrite); 4000ba7c: ffc4a583 lw a1,-4(s1) 4000ba80: 570100ef jal ra,4001bff0 rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000ba84: 0e4b2503 lw a0,228(s6) return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000ba88: 000d0593 mv a1,s10 4000ba8c: 00090693 mv a3,s2 4000ba90: 00c52703 lw a4,12(a0) 4000ba94: 00010613 mv a2,sp 4000ba98: 000700e7 jalr a4 4000ba9c: 0004a403 lw s0,0(s1) 4000baa0: 00050a13 mv s4,a0 if (thislen > vecs[i].iov_len) 4000baa4: f88978e3 bgeu s2,s0,4000ba34 4000baa8: 00090413 mv s0,s2 <== NOT EXECUTED for (i = 0; i < count; i++) { 4000baac: 00198993 addi s3,s3,1 <== NOT EXECUTED totlen += thislen; 4000bab0: 008a8ab3 add s5,s5,s0 <== NOT EXECUTED if (ret || thislen != vecs[i].iov_len) 4000bab4: f80a06e3 beqz s4,4000ba40 <== NOT EXECUTED } writev_out: if (retlen) 4000bab8: 000c8463 beqz s9,4000bac0 <== NEVER TAKEN *retlen = totlen; 4000babc: 015ca023 sw s5,0(s9) return ret; } 4000bac0: 13c12083 lw ra,316(sp) 4000bac4: 13812403 lw s0,312(sp) 4000bac8: 13412483 lw s1,308(sp) 4000bacc: 13012903 lw s2,304(sp) 4000bad0: 12c12983 lw s3,300(sp) 4000bad4: 12412a83 lw s5,292(sp) 4000bad8: 12012b03 lw s6,288(sp) 4000badc: 11c12b83 lw s7,284(sp) 4000bae0: 11812c03 lw s8,280(sp) 4000bae4: 11412c83 lw s9,276(sp) 4000bae8: 11012d03 lw s10,272(sp) 4000baec: 10c12d83 lw s11,268(sp) 4000baf0: 000a0513 mv a0,s4 4000baf4: 12812a03 lw s4,296(sp) 4000baf8: 14010113 addi sp,sp,320 4000bafc: 00008067 ret for (j = i; j < count; j++) 4000bb00: 0bb9f863 bgeu s3,s11,4000bbb0 4000bb04: 00399993 slli s3,s3,0x3 4000bb08: 013c09b3 add s3,s8,s3 4000bb0c: 00098713 mv a4,s3 4000bb10: 00040693 mv a3,s0 4000bb14: 00000a13 li s4,0 4000bb18: 00c0006f j 4000bb24 totvecsize += vecs[j].iov_len; 4000bb1c: 00472683 lw a3,4(a4) <== NOT EXECUTED 4000bb20: 00178793 addi a5,a5,1 <== NOT EXECUTED 4000bb24: 00da0a33 add s4,s4,a3 for (j = i; j < count; j++) 4000bb28: 00870713 addi a4,a4,8 4000bb2c: fefd98e3 bne s11,a5,4000bb1c sizetomalloc = totvecsize + sizeof (int) - 1; 4000bb30: 003a0913 addi s2,s4,3 sizetomalloc &= ~(sizeof (int) - 1); 4000bb34: ffc97913 andi s2,s2,-4 cbuf = (char *) malloc(sizetomalloc); 4000bb38: 00090513 mv a0,s2 4000bb3c: 741010ef jal ra,4000da7c 4000bb40: 00050493 mv s1,a0 if (!cbuf) { 4000bb44: 08050863 beqz a0,4000bbd4 <== NEVER TAKEN 4000bb48: 003d9793 slli a5,s11,0x3 4000bb4c: 00fc0c33 add s8,s8,a5 4000bb50: 00050793 mv a5,a0 4000bb54: 0080006f j 4000bb5c memcpy(cbufptr, vecs[j].iov_base, 4000bb58: 0049a403 lw s0,4(s3) <== NOT EXECUTED 4000bb5c: 0009a583 lw a1,0(s3) 4000bb60: 00078513 mv a0,a5 4000bb64: 00040613 mv a2,s0 4000bb68: 488100ef jal ra,4001bff0 for (j = i; j < count; j++) { 4000bb6c: 00898993 addi s3,s3,8 cbufptr += vecs[j].iov_len; 4000bb70: 008507b3 add a5,a0,s0 for (j = i; j < count; j++) { 4000bb74: ff3c12e3 bne s8,s3,4000bb58 totlen += thislen; 4000bb78: 03496863 bltu s2,s4,4000bba8 4000bb7c: 014a8ab3 add s5,s5,s4 rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000bb80: 0e4b2503 lw a0,228(s6) return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000bb84: 00090693 mv a3,s2 4000bb88: 00048613 mv a2,s1 4000bb8c: 00c52783 lw a5,12(a0) 4000bb90: 000d0593 mv a1,s10 4000bb94: 000780e7 jalr a5 4000bb98: 00050a13 mv s4,a0 free(cbuf); 4000bb9c: 00048513 mv a0,s1 4000bba0: 335010ef jal ra,4000d6d4 goto writev_out; 4000bba4: f15ff06f j 4000bab8 totlen += thislen; 4000bba8: 00090a13 mv s4,s2 <== NOT EXECUTED 4000bbac: fd1ff06f j 4000bb7c <== NOT EXECUTED cbuf = (char *) malloc(sizetomalloc); 4000bbb0: 00000513 li a0,0 <== NOT EXECUTED 4000bbb4: 6c9010ef jal ra,4000da7c <== NOT EXECUTED 4000bbb8: 00050493 mv s1,a0 <== NOT EXECUTED if (!cbuf) { 4000bbbc: 00050c63 beqz a0,4000bbd4 <== NOT EXECUTED cbuf = (char *) malloc(sizetomalloc); 4000bbc0: 00000913 li s2,0 <== NOT EXECUTED 4000bbc4: fbdff06f j 4000bb80 <== NOT EXECUTED size_t totlen = 0, thislen; 4000bbc8: 00000a93 li s5,0 <== NOT EXECUTED for (i = 0; i < count; i++) { 4000bbcc: 00000a13 li s4,0 <== NOT EXECUTED 4000bbd0: ee9ff06f j 4000bab8 <== NOT EXECUTED ret = -ENOMEM; 4000bbd4: ff400a13 li s4,-12 <== NOT EXECUTED 4000bbd8: ee1ff06f j 4000bab8 <== NOT EXECUTED =============================================================================== 4000b990 : int jffs2_flash_write(struct jffs2_sb_info * c, cyg_uint32 write_buffer_offset, const size_t size, size_t * return_size, unsigned char *read_buffer) { const struct super_block *sb = OFNI_BS_2SFFJ(c); rtems_jffs2_flash_control *fc = sb->s_flash_control; 4000b990: 0e452503 lw a0,228(a0) <== NOT EXECUTED *return_size = size; return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000b994: 00c52803 lw a6,12(a0) <== NOT EXECUTED *return_size = size; 4000b998: 00c6a023 sw a2,0(a3) <== NOT EXECUTED return (*fc->write)(fc, write_buffer_offset, read_buffer, size); 4000b99c: 00060693 mv a3,a2 <== NOT EXECUTED 4000b9a0: 00070613 mv a2,a4 <== NOT EXECUTED 4000b9a4: 00080067 jr a6 <== NOT EXECUTED =============================================================================== 40005340 : for (i=0; i < c->inocache_hashsize; i++) { 40005340: 0c052683 lw a3,192(a0) 40005344: 06d05e63 blez a3,400053c0 <== NEVER TAKEN this = c->inocache_list[i]; 40005348: 0c452703 lw a4,196(a0) { 4000534c: fe010113 addi sp,sp,-32 40005350: 00912a23 sw s1,20(sp) 40005354: 01312623 sw s3,12(sp) 40005358: 00112e23 sw ra,28(sp) 4000535c: 00812c23 sw s0,24(sp) 40005360: 01212823 sw s2,16(sp) 40005364: 00050993 mv s3,a0 for (i=0; i < c->inocache_hashsize; i++) { 40005368: 00000493 li s1,0 this = c->inocache_list[i]; 4000536c: 00249913 slli s2,s1,0x2 40005370: 012707b3 add a5,a4,s2 40005374: 0007a403 lw s0,0(a5) while (this) { 40005378: 02040063 beqz s0,40005398 next = this->next; 4000537c: 00040513 mv a0,s0 40005380: 01042403 lw s0,16(s0) jffs2_free_inode_cache(this); 40005384: e24ff0ef jal ra,400049a8 while (this) { 40005388: fe041ae3 bnez s0,4000537c <== NEVER TAKEN c->inocache_list[i] = NULL; 4000538c: 0c49a703 lw a4,196(s3) 40005390: 0c09a683 lw a3,192(s3) 40005394: 012707b3 add a5,a4,s2 40005398: 0007a023 sw zero,0(a5) for (i=0; i < c->inocache_hashsize; i++) { 4000539c: 00148493 addi s1,s1,1 400053a0: fcd4c6e3 blt s1,a3,4000536c } 400053a4: 01c12083 lw ra,28(sp) 400053a8: 01812403 lw s0,24(sp) 400053ac: 01412483 lw s1,20(sp) 400053b0: 01012903 lw s2,16(sp) 400053b4: 00c12983 lw s3,12(sp) 400053b8: 02010113 addi sp,sp,32 400053bc: 00008067 ret 400053c0: 00008067 ret <== NOT EXECUTED =============================================================================== 4000b2b4 : jffs2_del_ino_cache(c, ic); } } void jffs2_free_jeb_node_refs(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) { 4000b2b4: fd010113 addi sp,sp,-48 4000b2b8: 02812423 sw s0,40(sp) struct jffs2_raw_node_ref *block, *ref; jffs2_dbg(1, "Freeing all node refs for eraseblock offset 0x%08x\n", jeb->offset); block = ref = jeb->first_node; 4000b2bc: 0285a403 lw s0,40(a1) { 4000b2c0: 01412c23 sw s4,24(sp) 4000b2c4: 02112623 sw ra,44(sp) 4000b2c8: 02912223 sw s1,36(sp) 4000b2cc: 03212023 sw s2,32(sp) 4000b2d0: 01312e23 sw s3,28(sp) 4000b2d4: 01512a23 sw s5,20(sp) 4000b2d8: 01612823 sw s6,16(sp) 4000b2dc: 01712623 sw s7,12(sp) 4000b2e0: 00058a13 mv s4,a1 while (ref) { 4000b2e4: 0a040063 beqz s0,4000b384 4000b2e8: 00050b13 mv s6,a0 4000b2ec: 00040b93 mv s7,s0 if (ref->flash_offset == REF_LINK_NODE) { 4000b2f0: fff00993 li s3,-1 ref = ref->next_in_ino; jffs2_free_refblock(block); block = ref; continue; } if (ref->flash_offset != REF_EMPTY_NODE && ref->next_in_ino) 4000b2f4: ffe00a93 li s5,-2 JFFS2_WARNING("inode_cache/xattr_datum/xattr_ref" 4000b2f8: 40020937 lui s2,0x40020 4000b2fc: 400204b7 lui s1,0x40020 if (ref->flash_offset == REF_LINK_NODE) { 4000b300: 00442783 lw a5,4(s0) 4000b304: 07378863 beq a5,s3,4000b374 if (ref->flash_offset != REF_EMPTY_NODE && ref->next_in_ino) 4000b308: 07578063 beq a5,s5,4000b368 4000b30c: 00042783 lw a5,0(s0) 4000b310: 04078c63 beqz a5,4000b368 <== ALWAYS TAKEN if (SECTOR_ADDR((*prev)->flash_offset) == jeb->offset) { 4000b314: 034b2803 lw a6,52(s6) <== NOT EXECUTED 4000b318: 00ca2883 lw a7,12(s4) <== NOT EXECUTED prev = &ref->next_in_ino; 4000b31c: 00040613 mv a2,s0 <== NOT EXECUTED if (SECTOR_ADDR((*prev)->flash_offset) == jeb->offset) { 4000b320: 41000833 neg a6,a6 <== NOT EXECUTED struct jffs2_inode_cache *ic = NULL; 4000b324: 00000593 li a1,0 <== NOT EXECUTED if (!(*prev)->next_in_ino) { 4000b328: 0007a683 lw a3,0(a5) <== NOT EXECUTED 4000b32c: 02068063 beqz a3,4000b34c <== NOT EXECUTED if (SECTOR_ADDR((*prev)->flash_offset) == jeb->offset) { 4000b330: 0047a703 lw a4,4(a5) <== NOT EXECUTED 4000b334: 00e87733 and a4,a6,a4 <== NOT EXECUTED 4000b338: 09170063 beq a4,a7,4000b3b8 <== NOT EXECUTED prev = &((*prev)->next_in_ino); 4000b33c: 00078613 mv a2,a5 <== NOT EXECUTED 4000b340: 00068793 mv a5,a3 <== NOT EXECUTED if (!(*prev)->next_in_ino) { 4000b344: 0007a683 lw a3,0(a5) <== NOT EXECUTED 4000b348: fe0694e3 bnez a3,4000b330 <== NOT EXECUTED prev = &ic->nodes; 4000b34c: 00478613 addi a2,a5,4 <== NOT EXECUTED continue; 4000b350: 00078593 mv a1,a5 <== NOT EXECUTED 4000b354: 0047a783 lw a5,4(a5) <== NOT EXECUTED 4000b358: fd1ff06f j 4000b328 <== NOT EXECUTED if (!ic) { 4000b35c: 08058463 beqz a1,4000b3e4 <== NOT EXECUTED if (ic->nodes == (void *)ic && ic->pino_nlink == 0) 4000b360: 0045a783 lw a5,4(a1) <== NOT EXECUTED 4000b364: 06b78463 beq a5,a1,4000b3cc <== NOT EXECUTED jffs2_remove_node_refs_from_ino_list(c, ref, jeb); /* else it was a non-inode node or already removed, so don't bother */ ref++; 4000b368: 00840413 addi s0,s0,8 if (ref->flash_offset == REF_LINK_NODE) { 4000b36c: 00442783 lw a5,4(s0) 4000b370: f9379ce3 bne a5,s3,4000b308 ref = ref->next_in_ino; 4000b374: 00042403 lw s0,0(s0) jffs2_free_refblock(block); 4000b378: 000b8513 mv a0,s7 4000b37c: e14f90ef jal ra,40004990 while (ref) { 4000b380: 06041c63 bnez s0,4000b3f8 } jeb->first_node = jeb->last_node = NULL; } 4000b384: 02c12083 lw ra,44(sp) 4000b388: 02812403 lw s0,40(sp) jeb->first_node = jeb->last_node = NULL; 4000b38c: 020a2623 sw zero,44(s4) 4000b390: 020a2423 sw zero,40(s4) } 4000b394: 02412483 lw s1,36(sp) 4000b398: 02012903 lw s2,32(sp) 4000b39c: 01c12983 lw s3,28(sp) 4000b3a0: 01812a03 lw s4,24(sp) 4000b3a4: 01412a83 lw s5,20(sp) 4000b3a8: 01012b03 lw s6,16(sp) 4000b3ac: 00c12b83 lw s7,12(sp) 4000b3b0: 03010113 addi sp,sp,48 4000b3b4: 00008067 ret *prev = this->next_in_ino; 4000b3b8: 00d62023 sw a3,0(a2) <== NOT EXECUTED this->next_in_ino = NULL; 4000b3bc: 0007a023 sw zero,0(a5) <== NOT EXECUTED if (this == ref) 4000b3c0: f8878ee3 beq a5,s0,4000b35c <== NOT EXECUTED if (!(*prev)->next_in_ino) { 4000b3c4: 00062783 lw a5,0(a2) <== NOT EXECUTED 4000b3c8: f61ff06f j 4000b328 <== NOT EXECUTED if (ic->nodes == (void *)ic && ic->pino_nlink == 0) 4000b3cc: 0145a783 lw a5,20(a1) <== NOT EXECUTED 4000b3d0: f8079ce3 bnez a5,4000b368 <== NOT EXECUTED jffs2_del_ino_cache(c, ic); 4000b3d4: 000b0513 mv a0,s6 <== NOT EXECUTED 4000b3d8: f01f90ef jal ra,400052d8 <== NOT EXECUTED ref++; 4000b3dc: 00840413 addi s0,s0,8 <== NOT EXECUTED while (ref) { 4000b3e0: f8dff06f j 4000b36c <== NOT EXECUTED JFFS2_WARNING("inode_cache/xattr_datum/xattr_ref" 4000b3e4: bc890593 addi a1,s2,-1080 # 4001fbc8 <__func__.0> <== NOT EXECUTED 4000b3e8: 92848513 addi a0,s1,-1752 # 4001f928 <__func__.0+0xcc> <== NOT EXECUTED 4000b3ec: e89ff0ef jal ra,4000b274 <== NOT EXECUTED ref++; 4000b3f0: 00840413 addi s0,s0,8 <== NOT EXECUTED while (ref) { 4000b3f4: f79ff06f j 4000b36c <== NOT EXECUTED 4000b3f8: 00040b93 mv s7,s0 4000b3fc: f05ff06f j 4000b300 =============================================================================== 400053c4 : for (i=0; inr_blocks; i++) { 400053c4: 05052683 lw a3,80(a0) 400053c8: 0a068a63 beqz a3,4000547c <== NEVER TAKEN { 400053cc: fe010113 addi sp,sp,-32 400053d0: 00812c23 sw s0,24(sp) 400053d4: 00912a23 sw s1,20(sp) 400053d8: 01212823 sw s2,16(sp) 400053dc: 01412423 sw s4,8(sp) this = c->blocks[i].first_node; 400053e0: 05452783 lw a5,84(a0) { 400053e4: 00112e23 sw ra,28(sp) 400053e8: 01312623 sw s3,12(sp) 400053ec: 00050413 mv s0,a0 this = c->blocks[i].first_node; 400053f0: 00000493 li s1,0 for (i=0; inr_blocks; i++) { 400053f4: 00000a13 li s4,0 if (this[REFS_PER_BLOCK].flash_offset == REF_LINK_NODE) 400053f8: fff00913 li s2,-1 400053fc: 0280006f j 40005424 jffs2_free_refblock(this); 40005400: d90ff0ef jal ra,40004990 <== NOT EXECUTED c->blocks[i].first_node = c->blocks[i].last_node = NULL; 40005404: 05442783 lw a5,84(s0) <== NOT EXECUTED 40005408: 05042683 lw a3,80(s0) <== NOT EXECUTED 4000540c: 00978733 add a4,a5,s1 <== NOT EXECUTED 40005410: 02072623 sw zero,44(a4) 40005414: 02072423 sw zero,40(a4) for (i=0; inr_blocks; i++) { 40005418: 001a0a13 addi s4,s4,1 4000541c: 03448493 addi s1,s1,52 40005420: 02da7663 bgeu s4,a3,4000544c this = c->blocks[i].first_node; 40005424: 00978733 add a4,a5,s1 40005428: 02872503 lw a0,40(a4) while (this) { 4000542c: fe0502e3 beqz a0,40005410 <== NEVER TAKEN if (this[REFS_PER_BLOCK].flash_offset == REF_LINK_NODE) 40005430: 0f452783 lw a5,244(a0) 40005434: fd2796e3 bne a5,s2,40005400 next = this[REFS_PER_BLOCK].next_in_ino; 40005438: 0f052983 lw s3,240(a0) jffs2_free_refblock(this); 4000543c: d54ff0ef jal ra,40004990 while (this) { 40005440: 02098663 beqz s3,4000546c 40005444: 00098513 mv a0,s3 40005448: fe9ff06f j 40005430 } 4000544c: 01c12083 lw ra,28(sp) 40005450: 01812403 lw s0,24(sp) 40005454: 01412483 lw s1,20(sp) 40005458: 01012903 lw s2,16(sp) 4000545c: 00c12983 lw s3,12(sp) 40005460: 00812a03 lw s4,8(sp) 40005464: 02010113 addi sp,sp,32 40005468: 00008067 ret c->blocks[i].first_node = c->blocks[i].last_node = NULL; 4000546c: 05442783 lw a5,84(s0) 40005470: 05042683 lw a3,80(s0) 40005474: 00978733 add a4,a5,s1 40005478: f99ff06f j 40005410 4000547c: 00008067 ret <== NOT EXECUTED =============================================================================== 40003564 : { 40003564: f5010113 addi sp,sp,-176 40003568: 09a12023 sw s10,128(sp) if (!c->unchecked_size) 4000356c: 03852d03 lw s10,56(a0) { 40003570: 0a912223 sw s1,164(sp) 40003574: 0a112623 sw ra,172(sp) 40003578: 0a812423 sw s0,168(sp) 4000357c: 0b212023 sw s2,160(sp) 40003580: 09312e23 sw s3,156(sp) 40003584: 09412c23 sw s4,152(sp) 40003588: 09512a23 sw s5,148(sp) 4000358c: 09612823 sw s6,144(sp) 40003590: 09712623 sw s7,140(sp) 40003594: 09812423 sw s8,136(sp) 40003598: 09912223 sw s9,132(sp) 4000359c: 07b12e23 sw s11,124(sp) 400035a0: 00050493 mv s1,a0 if (ic->state != INO_STATE_CHECKEDABSENT && 400035a4: 00100693 li a3,1 if (!c->unchecked_size) 400035a8: 140d0a63 beqz s10,400036fc <== ALWAYS TAKEN want_ino = c->check_ino; 400035ac: 0084a703 lw a4,8(s1) <== NOT EXECUTED for (bucket = c->check_ino % c->inocache_hashsize ; bucket < c->inocache_hashsize; bucket++) { 400035b0: 0c04a883 lw a7,192(s1) <== NOT EXECUTED 400035b4: 03177333 remu t1,a4,a7 <== NOT EXECUTED 400035b8: 05135663 bge t1,a7,40003604 <== NOT EXECUTED 400035bc: 0c44a503 lw a0,196(s1) <== NOT EXECUTED 400035c0: 00231793 slli a5,t1,0x2 <== NOT EXECUTED 400035c4: 00f50533 add a0,a0,a5 <== NOT EXECUTED for (ic = c->inocache_list[bucket]; ic; ic = ic->next) { 400035c8: 00052403 lw s0,0(a0) <== NOT EXECUTED 400035cc: 02040463 beqz s0,400035f4 <== NOT EXECUTED if (ic->ino < want_ino) 400035d0: 00c42583 lw a1,12(s0) <== NOT EXECUTED 400035d4: 00e5ec63 bltu a1,a4,400035ec <== NOT EXECUTED if (ic->state != INO_STATE_CHECKEDABSENT && 400035d8: 00a45603 lhu a2,10(s0) <== NOT EXECUTED 400035dc: ffe60793 addi a5,a2,-2 <== NOT EXECUTED 400035e0: 01079793 slli a5,a5,0x10 <== NOT EXECUTED 400035e4: 0107d793 srli a5,a5,0x10 <== NOT EXECUTED 400035e8: 08f6e663 bltu a3,a5,40003674 <== NOT EXECUTED for (ic = c->inocache_list[bucket]; ic; ic = ic->next) { 400035ec: 01042403 lw s0,16(s0) <== NOT EXECUTED 400035f0: fe0410e3 bnez s0,400035d0 <== NOT EXECUTED for (bucket = c->check_ino % c->inocache_hashsize ; bucket < c->inocache_hashsize; bucket++) { 400035f4: 00130313 addi t1,t1,1 <== NOT EXECUTED 400035f8: 00450513 addi a0,a0,4 <== NOT EXECUTED want_ino = 0; 400035fc: 00000713 li a4,0 <== NOT EXECUTED for (bucket = c->check_ino % c->inocache_hashsize ; bucket < c->inocache_hashsize; bucket++) { 40003600: fc6894e3 bne a7,t1,400035c8 <== NOT EXECUTED c->check_ino = ((c->highest_ino + c->inocache_hashsize + 1) & 40003604: 0044a783 lw a5,4(s1) <== NOT EXECUTED ~c->inocache_hashsize) - 1; 40003608: fff8c713 not a4,a7 <== NOT EXECUTED pr_crit("Checked all inodes but still 0x%x bytes of unchecked space?\n", 4000360c: 4001d537 lui a0,0x4001d <== NOT EXECUTED c->check_ino = ((c->highest_ino + c->inocache_hashsize + 1) & 40003610: 00178793 addi a5,a5,1 <== NOT EXECUTED 40003614: 011787b3 add a5,a5,a7 <== NOT EXECUTED 40003618: 00e7f7b3 and a5,a5,a4 <== NOT EXECUTED ~c->inocache_hashsize) - 1; 4000361c: fff78793 addi a5,a5,-1 <== NOT EXECUTED c->check_ino = ((c->highest_ino + c->inocache_hashsize + 1) & 40003620: 00f4a423 sw a5,8(s1) <== NOT EXECUTED pr_crit("Checked all inodes but still 0x%x bytes of unchecked space?\n", 40003624: 000d0593 mv a1,s10 <== NOT EXECUTED 40003628: 4e850513 addi a0,a0,1256 # 4001d4e8 <== NOT EXECUTED 4000362c: b09ff0ef jal ra,40003134 <== NOT EXECUTED return -ENOSPC; 40003630: fe400d93 li s11,-28 <== NOT EXECUTED } 40003634: 0ac12083 lw ra,172(sp) 40003638: 0a812403 lw s0,168(sp) 4000363c: 0a412483 lw s1,164(sp) 40003640: 0a012903 lw s2,160(sp) 40003644: 09c12983 lw s3,156(sp) 40003648: 09812a03 lw s4,152(sp) 4000364c: 09412a83 lw s5,148(sp) 40003650: 09012b03 lw s6,144(sp) 40003654: 08c12b83 lw s7,140(sp) 40003658: 08812c03 lw s8,136(sp) 4000365c: 08412c83 lw s9,132(sp) 40003660: 08012d03 lw s10,128(sp) 40003664: 000d8513 mv a0,s11 40003668: 07c12d83 lw s11,124(sp) 4000366c: 0b010113 addi sp,sp,176 40003670: 00008067 ret if (!ic->pino_nlink) { 40003674: 01442783 lw a5,20(s0) <== NOT EXECUTED c->check_ino = ic->ino + c->inocache_hashsize; 40003678: 00b888b3 add a7,a7,a1 <== NOT EXECUTED 4000367c: 0114a423 sw a7,8(s1) <== NOT EXECUTED if (!ic->pino_nlink) { 40003680: f20784e3 beqz a5,400035a8 <== NOT EXECUTED switch(ic->state) { 40003684: 00400793 li a5,4 <== NOT EXECUTED 40003688: 40f60c63 beq a2,a5,40003aa0 <== NOT EXECUTED 4000368c: 02c7ec63 bltu a5,a2,400036c4 <== NOT EXECUTED 40003690: 40061863 bnez a2,40003aa0 <== NOT EXECUTED ic->state = INO_STATE_CHECKING; 40003694: 00100793 li a5,1 <== NOT EXECUTED 40003698: 00f41523 sh a5,10(s0) <== NOT EXECUTED ret = jffs2_do_crccheck_inode(c, ic); 4000369c: 00040593 mv a1,s0 <== NOT EXECUTED 400036a0: 00048513 mv a0,s1 <== NOT EXECUTED 400036a4: 0d4050ef jal ra,40008778 <== NOT EXECUTED 400036a8: 00050d93 mv s11,a0 <== NOT EXECUTED if (ret) 400036ac: 02051663 bnez a0,400036d8 <== NOT EXECUTED jffs2_set_inocache_state(c, ic, INO_STATE_CHECKEDABSENT); 400036b0: 00300613 li a2,3 <== NOT EXECUTED 400036b4: 00040593 mv a1,s0 <== NOT EXECUTED 400036b8: 00048513 mv a0,s1 <== NOT EXECUTED 400036bc: 375010ef jal ra,40005230 <== NOT EXECUTED return ret; 400036c0: f75ff06f j 40003634 <== NOT EXECUTED switch(ic->state) { 400036c4: 00500793 li a5,5 <== NOT EXECUTED 400036c8: 3af61863 bne a2,a5,40003a78 <== NOT EXECUTED c->check_ino = ic->ino; 400036cc: 00b4a423 sw a1,8(s1) <== NOT EXECUTED return 0; 400036d0: 00000d93 li s11,0 <== NOT EXECUTED 400036d4: f61ff06f j 40003634 <== NOT EXECUTED pr_warn("Returned error for crccheck of ino #%u. Expect badness...\n", 400036d8: 00c42583 lw a1,12(s0) <== NOT EXECUTED 400036dc: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400036e0: 59850513 addi a0,a0,1432 # 4001d598 <== NOT EXECUTED 400036e4: a51ff0ef jal ra,40003134 <== NOT EXECUTED jffs2_set_inocache_state(c, ic, INO_STATE_CHECKEDABSENT); 400036e8: 00300613 li a2,3 <== NOT EXECUTED 400036ec: 00040593 mv a1,s0 <== NOT EXECUTED 400036f0: 00048513 mv a0,s1 <== NOT EXECUTED 400036f4: 33d010ef jal ra,40005230 <== NOT EXECUTED return ret; 400036f8: f3dff06f j 40003634 <== NOT EXECUTED if (!list_empty(&c->erase_complete_list) || 400036fc: 0a04a703 lw a4,160(s1) 40003700: 0a048793 addi a5,s1,160 40003704: 08f70e63 beq a4,a5,400037a0 if (jffs2_erase_pending_blocks(c, 1)) 40003708: 00100593 li a1,1 4000370c: 00048513 mv a0,s1 40003710: 4f1070ef jal ra,4000b400 40003714: 0a051663 bnez a0,400037c0 <== ALWAYS TAKEN jeb = c->gcblock; 40003718: 05c4a903 lw s2,92(s1) if (!jeb) 4000371c: 0e090c63 beqz s2,40003814 if (!jeb->used_size) { 40003720: 01492783 lw a5,20(s2) 40003724: 0a078263 beqz a5,400037c8 <== NEVER TAKEN raw = jeb->gc_node; 40003728: 03092983 lw s3,48(s2) while(ref_obsolete(raw)) { 4000372c: 00100613 li a2,1 static inline struct jffs2_raw_node_ref *ref_next(struct jffs2_raw_node_ref *ref) { ref++; /* Link to another block of refs */ if (ref->flash_offset == REF_LINK_NODE) { 40003730: fff00693 li a3,-1 40003734: 0049a783 lw a5,4(s3) if (!ref) return ref; } /* End of chain */ if (ref->flash_offset == REF_EMPTY_NODE) 40003738: ffe00713 li a4,-2 4000373c: 0037f793 andi a5,a5,3 40003740: 1ec79c63 bne a5,a2,40003938 if (ref->flash_offset == REF_LINK_NODE) { 40003744: 00c9a783 lw a5,12(s3) 40003748: 06d78463 beq a5,a3,400037b0 ref++; 4000374c: 00898993 addi s3,s3,8 if (ref->flash_offset == REF_EMPTY_NODE) 40003750: fee796e3 bne a5,a4,4000373c pr_warn("eep. End of raw list while still supposedly nodes to GC\n"); 40003754: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003758: 61c50513 addi a0,a0,1564 # 4001d61c <== NOT EXECUTED 4000375c: 9d9ff0ef jal ra,40003134 <== NOT EXECUTED pr_warn("erase block at 0x%08x. free_size 0x%08x, dirty_size 0x%08x, used_size 0x%08x\n", 40003760: 01892683 lw a3,24(s2) <== NOT EXECUTED 40003764: 02092603 lw a2,32(s2) <== NOT EXECUTED 40003768: 00c92583 lw a1,12(s2) <== NOT EXECUTED 4000376c: 01492703 lw a4,20(s2) <== NOT EXECUTED 40003770: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003774: 66050513 addi a0,a0,1632 # 4001d660 <== NOT EXECUTED 40003778: 9bdff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 4000377c: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003780: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003784: 4001d537 lui a0,0x4001d <== NOT EXECUTED jeb->gc_node = raw; 40003788: 02092823 sw zero,48(s2) <== NOT EXECUTED BUG(); 4000378c: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003790: d6460613 addi a2,a2,-668 # 4001dd64 <__func__.4> <== NOT EXECUTED 40003794: 13300593 li a1,307 <== NOT EXECUTED 40003798: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 4000379c: 305090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED if (!list_empty(&c->erase_complete_list) || 400037a0: 0984a703 lw a4,152(s1) !list_empty(&c->erase_pending_list)) { 400037a4: 09848793 addi a5,s1,152 if (!list_empty(&c->erase_complete_list) || 400037a8: f6f710e3 bne a4,a5,40003708 400037ac: f6dff06f j 40003718 ref = ref->next_in_ino; 400037b0: 0089a983 lw s3,8(s3) if (!ref) 400037b4: fa0980e3 beqz s3,40003754 <== NEVER TAKEN if (ref->flash_offset == REF_EMPTY_NODE) 400037b8: 0049a783 lw a5,4(s3) 400037bc: f95ff06f j 40003750 return 0; 400037c0: 00000d93 li s11,0 400037c4: e71ff06f j 40003634 if (c->gcblock && !c->gcblock->used_size) { 400037c8: 05c4a783 lw a5,92(s1) <== NOT EXECUTED int ret = 0, inum, nlink; 400037cc: 00000d93 li s11,0 <== NOT EXECUTED if (c->gcblock && !c->gcblock->used_size) { 400037d0: 0147a703 lw a4,20(a5) 400037d4: e60710e3 bnez a4,40003634 <== ALWAYS TAKEN /* Insert an entry _before_ the specified entry */ static __inline__ void list_add_tail( struct list_head *newent, struct list_head *beforethisent ) { struct list_head *prev = beforethisent->prev; 400037d8: 09c4a603 lw a2,156(s1) <== NOT EXECUTED rtems_jffs2_flash_control *fc = sb->s_flash_control; 400037dc: 0e44a503 lw a0,228(s1) <== NOT EXECUTED c->nr_erasing_blocks++; 400037e0: 0404a703 lw a4,64(s1) <== NOT EXECUTED list_add_tail(&c->gcblock->list, &c->erase_pending_list); 400037e4: 09848693 addi a3,s1,152 <== NOT EXECUTED newent->prev = prev; newent->next = beforethisent; 400037e8: 00d7a023 sw a3,0(a5) <== NOT EXECUTED newent->prev = prev; 400037ec: 00c7a223 sw a2,4(a5) <== NOT EXECUTED if (fc->trigger_garbage_collection != NULL) { 400037f0: 02052683 lw a3,32(a0) <== NOT EXECUTED beforethisent->prev = newent; 400037f4: 08f4ae23 sw a5,156(s1) <== NOT EXECUTED prev->next = newent; 400037f8: 00f62023 sw a5,0(a2) <== NOT EXECUTED c->nr_erasing_blocks++; 400037fc: 00170793 addi a5,a4,1 <== NOT EXECUTED c->gcblock = NULL; 40003800: 0404ae23 sw zero,92(s1) <== NOT EXECUTED c->nr_erasing_blocks++; 40003804: 04f4a023 sw a5,64(s1) <== NOT EXECUTED 40003808: e20686e3 beqz a3,40003634 <== NOT EXECUTED (*fc->trigger_garbage_collection)(fc); 4000380c: 000680e7 jalr a3 <== NOT EXECUTED 40003810: e25ff06f j 40003634 <== NOT EXECUTED 40003814: 8e41a703 lw a4,-1820(gp) # 40042fbc <_Watchdog_Ticks_since_boot> /* Is this list empty? */ static __inline__ int list_empty( struct list_head *list ) { return ( list->next == list ); 40003818: 0b84af83 lw t6,184(s1) if (!list_empty(&c->bad_used_list) && c->nr_free_blocks > c->resv_blocks_gcbad) { 4000381c: 0b848893 addi a7,s1,184 int n = jiffies % 128; 40003820: 07f77713 andi a4,a4,127 } else if (n < 50 && !list_empty(&c->erasable_list)) { 40003824: 03100f13 li t5,49 } else if (n < 126 && !list_empty(&c->dirty_list)) { 40003828: 07048513 addi a0,s1,112 } else if (!list_empty(&c->clean_list)) { 4000382c: 06048593 addi a1,s1,96 } else if (n < 110 && !list_empty(&c->very_dirty_list)) { 40003830: 06848613 addi a2,s1,104 40003834: 06d00e93 li t4,109 } else if (n < 126 && !list_empty(&c->dirty_list)) { 40003838: 07d00e13 li t3,125 } else if (n < 50 && !list_empty(&c->erasable_list)) { 4000383c: 07848693 addi a3,s1,120 } else if (!list_empty(&c->erasable_pending_wbuf_list)) { 40003840: 08048313 addi t1,s1,128 if (!list_empty(&c->bad_used_list) && c->nr_free_blocks > c->resv_blocks_gcbad) { 40003844: 011f8863 beq t6,a7,40003854 40003848: 0474c783 lbu a5,71(s1) <== NOT EXECUTED 4000384c: 03c4a283 lw t0,60(s1) <== NOT EXECUTED 40003850: 2457e463 bltu a5,t0,40003a98 <== NOT EXECUTED } else if (n < 50 && !list_empty(&c->erasable_list)) { 40003854: 06ef4663 blt t5,a4,400038c0 40003858: 0784a283 lw t0,120(s1) 4000385c: 00068793 mv a5,a3 40003860: 08569063 bne a3,t0,400038e0 } else if (n < 110 && !list_empty(&c->very_dirty_list)) { 40003864: 0684a283 lw t0,104(s1) 40003868: 00060793 mv a5,a2 4000386c: 06561a63 bne a2,t0,400038e0 } else if (n < 126 && !list_empty(&c->dirty_list)) { 40003870: 0704a283 lw t0,112(s1) 40003874: 00050793 mv a5,a0 40003878: 06551463 bne a0,t0,400038e0 } else if (!list_empty(&c->clean_list)) { 4000387c: 0604a283 lw t0,96(s1) 40003880: 00058793 mv a5,a1 40003884: 04b29e63 bne t0,a1,400038e0 } else if (!list_empty(&c->very_dirty_list)) { 40003888: 0684a283 lw t0,104(s1) 4000388c: 00060793 mv a5,a2 40003890: 04561863 bne a2,t0,400038e0 } else if (!list_empty(&c->erasable_list)) { 40003894: 0784a283 lw t0,120(s1) 40003898: 00068793 mv a5,a3 4000389c: 04569263 bne a3,t0,400038e0 } else if (!list_empty(&c->erasable_pending_wbuf_list)) { 400038a0: 0804a783 lw a5,128(s1) 400038a4: fa6790e3 bne a5,t1,40003844 if (c->nr_erasing_blocks) { 400038a8: 0404a883 lw a7,64(s1) return -EIO; 400038ac: 011038b3 snez a7,a7 400038b0: 411008b3 neg a7,a7 400038b4: ffa8fd93 andi s11,a7,-6 400038b8: ffbd8d93 addi s11,s11,-5 400038bc: d79ff06f j 40003634 } else if (n < 110 && !list_empty(&c->very_dirty_list)) { 400038c0: faeed2e3 bge t4,a4,40003864 <== NOT EXECUTED } else if (n < 126 && !list_empty(&c->dirty_list)) { 400038c4: faee56e3 bge t3,a4,40003870 <== NOT EXECUTED } else if (!list_empty(&c->clean_list)) { 400038c8: 0604a283 lw t0,96(s1) <== NOT EXECUTED 400038cc: 00058793 mv a5,a1 <== NOT EXECUTED 400038d0: 00559863 bne a1,t0,400038e0 <== NOT EXECUTED } else if (!list_empty(&c->dirty_list)) { 400038d4: 0704a283 lw t0,112(s1) <== NOT EXECUTED 400038d8: 00050793 mv a5,a0 <== NOT EXECUTED 400038dc: fa5506e3 beq a0,t0,40003888 <== NOT EXECUTED ret = list_entry(nextlist->next, struct jffs2_eraseblock, list); 400038e0: 0007a903 lw s2,0(a5) ent->prev->next = ent->next; 400038e4: 00492683 lw a3,4(s2) 400038e8: 00092703 lw a4,0(s2) ret->gc_node = ret->first_node; 400038ec: 02892783 lw a5,40(s2) 400038f0: 00e6a023 sw a4,0(a3) ent->next->prev = ent->prev; 400038f4: 00d72223 sw a3,4(a4) c->gcblock = ret; 400038f8: 0524ae23 sw s2,92(s1) ret->gc_node = ret->first_node; 400038fc: 02f92823 sw a5,48(s2) if (!ret->gc_node) { 40003900: 1c078663 beqz a5,40003acc <== NEVER TAKEN if (ret->wasted_size) { 40003904: 01c92783 lw a5,28(s2) 40003908: e0078ce3 beqz a5,40003720 <== ALWAYS TAKEN ret->dirty_size += ret->wasted_size; 4000390c: 01892603 lw a2,24(s2) <== NOT EXECUTED c->wasted_size -= ret->wasted_size; 40003910: 0244a683 lw a3,36(s1) <== NOT EXECUTED c->dirty_size += ret->wasted_size; 40003914: 0204a703 lw a4,32(s1) <== NOT EXECUTED ret->dirty_size += ret->wasted_size; 40003918: 00f60633 add a2,a2,a5 <== NOT EXECUTED 4000391c: 00c92c23 sw a2,24(s2) <== NOT EXECUTED c->wasted_size -= ret->wasted_size; 40003920: 40f686b3 sub a3,a3,a5 <== NOT EXECUTED c->dirty_size += ret->wasted_size; 40003924: 00f707b3 add a5,a4,a5 <== NOT EXECUTED c->wasted_size -= ret->wasted_size; 40003928: 02d4a223 sw a3,36(s1) <== NOT EXECUTED c->dirty_size += ret->wasted_size; 4000392c: 02f4a023 sw a5,32(s1) <== NOT EXECUTED ret->wasted_size = 0; 40003930: 00092e23 sw zero,28(s2) <== NOT EXECUTED 40003934: dedff06f j 40003720 <== NOT EXECUTED gcblock_dirty = jeb->dirty_size; 40003938: 01892703 lw a4,24(s2) if (!raw->next_in_ino) { 4000393c: 0009aa03 lw s4,0(s3) jeb->gc_node = raw; 40003940: 03392823 sw s3,48(s2) gcblock_dirty = jeb->dirty_size; 40003944: 00e12423 sw a4,8(sp) if (!raw->next_in_ino) { 40003948: 0c0a0863 beqz s4,40003a18 <== NEVER TAKEN 4000394c: 000a0a93 mv s5,s4 return ref; } static inline struct jffs2_inode_cache *jffs2_raw_ref_to_ic(struct jffs2_raw_node_ref *raw) { while(raw->next_in_ino) 40003950: 000a2a03 lw s4,0(s4) 40003954: fe0a1ce3 bnez s4,4000394c <== NEVER TAKEN switch(ic->state) { 40003958: 00aad403 lhu s0,10(s5) 4000395c: 00400713 li a4,4 40003960: 08e40263 beq s0,a4,400039e4 40003964: 06876863 bltu a4,s0,400039d4 40003968: 00100693 li a3,1 4000396c: 0686fc63 bgeu a3,s0,400039e4 40003970: 00300693 li a3,3 40003974: 00d41663 bne s0,a3,40003980 if (ref_flags(raw) == REF_PRISTINE) 40003978: 00200693 li a3,2 4000397c: 0ad78c63 beq a5,a3,40003a34 f = jffs2_gc_fetch_inode(c, inum, !nlink); 40003980: 014aa603 lw a2,20(s5) 40003984: 00caa583 lw a1,12(s5) 40003988: 00048513 mv a0,s1 4000398c: 00163613 seqz a2,a2 40003990: f24ff0ef jal ra,400030b4 if (IS_ERR(f)) { 40003994: c1800793 li a5,-1000 f = jffs2_gc_fetch_inode(c, inum, !nlink); 40003998: 00050413 mv s0,a0 if (IS_ERR(f)) { 4000399c: 3ea7eae3 bltu a5,a0,40004590 if (!f) { 400039a0: 3e0504e3 beqz a0,40004588 <== NEVER TAKEN if (c->gcblock != jeb) { 400039a4: 05c4a783 lw a5,92(s1) int ret = 0; 400039a8: 00000d93 li s11,0 if (c->gcblock != jeb) { 400039ac: 16f90e63 beq s2,a5,40003b28 jffs2_gc_release_inode(c, f); 400039b0: 00040593 mv a1,s0 400039b4: 00048513 mv a0,s1 400039b8: ef4ff0ef jal ra,400030ac if (jeb->dirty_size == gcblock_dirty && !ref_obsolete(jeb->gc_node)) { 400039bc: 01892783 lw a5,24(s2) 400039c0: 00812703 lw a4,8(sp) 400039c4: 12e78c63 beq a5,a4,40003afc if (c->gcblock && !c->gcblock->used_size) { 400039c8: 05c4a783 lw a5,92(s1) 400039cc: c60784e3 beqz a5,40003634 400039d0: e01ff06f j 400037d0 switch(ic->state) { 400039d4: 00500793 li a5,5 <== NOT EXECUTED 400039d8: 00000d93 li s11,0 <== NOT EXECUTED 400039dc: c4f40ce3 beq s0,a5,40003634 <== NOT EXECUTED 400039e0: fa1ff06f j 40003980 <== NOT EXECUTED pr_crit("Inode #%u already in state %d in jffs2_garbage_collect_pass()!\n", 400039e4: 00caa583 lw a1,12(s5) <== NOT EXECUTED 400039e8: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400039ec: 00040613 mv a2,s0 <== NOT EXECUTED 400039f0: 6b850513 addi a0,a0,1720 # 4001d6b8 <== NOT EXECUTED 400039f4: f40ff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 400039f8: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 400039fc: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003a00: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003a04: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003a08: d6460613 addi a2,a2,-668 # 4001dd64 <__func__.4> <== NOT EXECUTED 40003a0c: 18d00593 li a1,397 <== NOT EXECUTED 40003a10: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003a14: 08d090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED if (ref_flags(raw) == REF_PRISTINE) { 40003a18: 00200713 li a4,2 <== NOT EXECUTED 40003a1c: 04e78263 beq a5,a4,40003a60 <== NOT EXECUTED jffs2_mark_node_obsolete(c, raw); 40003a20: 00098593 mv a1,s3 <== NOT EXECUTED 40003a24: 00048513 mv a0,s1 <== NOT EXECUTED 40003a28: 074020ef jal ra,40005a9c <== NOT EXECUTED int ret = 0, inum, nlink; 40003a2c: 00000d93 li s11,0 <== NOT EXECUTED 40003a30: f99ff06f j 400039c8 <== NOT EXECUTED ic->state = INO_STATE_GC; 40003a34: 00ea9523 sh a4,10(s5) ret = jffs2_garbage_collect_pristine(c, ic, raw); 40003a38: 00098613 mv a2,s3 40003a3c: 000a8593 mv a1,s5 40003a40: 00048513 mv a0,s1 40003a44: f30ff0ef jal ra,40003174 if (ret != -EBADFD) { 40003a48: ffff87b7 lui a5,0xffff8 ic->state = INO_STATE_CHECKEDABSENT; 40003a4c: 008a9523 sh s0,10(s5) if (ret != -EBADFD) { 40003a50: 00178793 addi a5,a5,1 # ffff8001 ret = jffs2_garbage_collect_pristine(c, ic, raw); 40003a54: 00050d93 mv s11,a0 if (ret != -EBADFD) { 40003a58: f6f512e3 bne a0,a5,400039bc 40003a5c: f25ff06f j 40003980 <== NOT EXECUTED jffs2_garbage_collect_pristine(c, NULL, raw); 40003a60: 00098613 mv a2,s3 <== NOT EXECUTED 40003a64: 00000593 li a1,0 <== NOT EXECUTED 40003a68: 00048513 mv a0,s1 <== NOT EXECUTED 40003a6c: f08ff0ef jal ra,40003174 <== NOT EXECUTED int ret = 0, inum, nlink; 40003a70: 00000d93 li s11,0 <== NOT EXECUTED 40003a74: f55ff06f j 400039c8 <== NOT EXECUTED BUG(); 40003a78: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003a7c: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003a80: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003a84: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003a88: d6460613 addi a2,a2,-668 # 4001dd64 <__func__.4> <== NOT EXECUTED 40003a8c: 0e400593 li a1,228 <== NOT EXECUTED 40003a90: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003a94: 00d090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED 40003a98: 00088793 mv a5,a7 <== NOT EXECUTED 40003a9c: e45ff06f j 400038e0 <== NOT EXECUTED pr_warn("Inode #%u is in state %d during CRC check phase!\n", 40003aa0: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003aa4: 53050513 addi a0,a0,1328 # 4001d530 <== NOT EXECUTED 40003aa8: e8cff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 40003aac: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003ab0: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003ab4: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003ab8: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003abc: d6460613 addi a2,a2,-668 # 4001dd64 <__func__.4> <== NOT EXECUTED 40003ac0: 0d300593 li a1,211 <== NOT EXECUTED 40003ac4: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003ac8: 7d8090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED pr_warn("Eep. ret->gc_node for block at 0x%08x is NULL\n", 40003acc: 00c92583 lw a1,12(s2) <== NOT EXECUTED 40003ad0: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003ad4: 5e050513 addi a0,a0,1504 # 4001d5e0 <== NOT EXECUTED 40003ad8: e5cff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 40003adc: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003ae0: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003ae4: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003ae8: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003aec: d5060613 addi a2,a2,-688 # 4001dd50 <__func__.3> <== NOT EXECUTED 40003af0: 06a00593 li a1,106 <== NOT EXECUTED 40003af4: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003af8: 7a8090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED if (jeb->dirty_size == gcblock_dirty && !ref_obsolete(jeb->gc_node)) { 40003afc: 03092703 lw a4,48(s2) <== NOT EXECUTED 40003b00: 00100793 li a5,1 <== NOT EXECUTED 40003b04: 00472583 lw a1,4(a4) <== NOT EXECUTED 40003b08: 0035f713 andi a4,a1,3 <== NOT EXECUTED 40003b0c: eaf70ee3 beq a4,a5,400039c8 <== NOT EXECUTED pr_err("Error garbage collecting node at %08x!\n", 40003b10: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003b14: ffc5f593 andi a1,a1,-4 <== NOT EXECUTED 40003b18: c8850513 addi a0,a0,-888 # 4001dc88 <== NOT EXECUTED 40003b1c: e18ff0ef jal ra,40003134 <== NOT EXECUTED ret = -ENOSPC; 40003b20: fe400d93 li s11,-28 <== NOT EXECUTED 40003b24: ea5ff06f j 400039c8 <== NOT EXECUTED if (ref_obsolete(raw)) { 40003b28: 0049a783 lw a5,4(s3) 40003b2c: 00100713 li a4,1 40003b30: 0037f793 andi a5,a5,3 40003b34: e6e78ee3 beq a5,a4,400039b0 if (f->metadata && f->metadata->raw == raw) { 40003b38: 00852a83 lw s5,8(a0) 40003b3c: 000a8663 beqz s5,40003b48 40003b40: 000aa783 lw a5,0(s5) 40003b44: 24f98ae3 beq s3,a5,40004598 for (frag = frag_first(&f->fragtree); frag; frag = frag_next(frag)) { 40003b48: 00440b13 addi s6,s0,4 return _RBTree_Predecessor( node ); } static inline struct rb_node *rb_first( struct rb_root *root ) { return _RBTree_Minimum( (RBTree_Control *) root ); 40003b4c: 000b0513 mv a0,s6 40003b50: 291100ef jal ra,400145e0 <_RBTree_Minimum> 40003b54: 00050b93 mv s7,a0 static inline struct jffs2_node_frag *frag_first(struct rb_root *root) { struct rb_node *node = rb_first(root); if (!node) 40003b58: 04050e63 beqz a0,40003bb4 40003b5c: 00000a93 li s5,0 40003b60: 00000c13 li s8,0 40003b64: 0140006f j 40003b78 return _RBTree_Successor( node ); 40003b68: 000b8513 mv a0,s7 40003b6c: 2b5100ef jal ra,40014620 <_RBTree_Successor> 40003b70: 00050b93 mv s7,a0 40003b74: 04050e63 beqz a0,40003bd0 <== NEVER TAKEN if (frag->node && frag->node->raw == raw) { 40003b78: 010ba783 lw a5,16(s7) 40003b7c: fe0786e3 beqz a5,40003b68 <== NEVER TAKEN 40003b80: 0007a703 lw a4,0(a5) 40003b84: fee992e3 bne s3,a4,40003b68 end = frag->ofs + frag->size; 40003b88: 018ba683 lw a3,24(s7) 40003b8c: 014ba803 lw a6,20(s7) if (!nrfrags++) 40003b90: 001c0713 addi a4,s8,1 end = frag->ofs + frag->size; 40003b94: 01068d33 add s10,a3,a6 if (!nrfrags++) 40003b98: 000c1463 bnez s8,40003ba0 <== NEVER TAKEN start = frag->ofs; 40003b9c: 00068a93 mv s5,a3 if (nrfrags == frag->node->frags) 40003ba0: 00c7a683 lw a3,12(a5) 40003ba4: 4ad708e3 beq a4,a3,40004854 40003ba8: 00070c13 mv s8,a4 <== NOT EXECUTED 40003bac: 00078a13 mv s4,a5 <== NOT EXECUTED 40003bb0: fb9ff06f j 40003b68 <== NOT EXECUTED for (fd = f->dents; fd; fd=fd->next) { 40003bb4: 00c42783 lw a5,12(s0) 40003bb8: 00078a13 mv s4,a5 40003bbc: 1e0a0a63 beqz s4,40003db0 <== NEVER TAKEN if (fd->raw == raw) 40003bc0: 000a2583 lw a1,0(s4) 40003bc4: 1cb98663 beq s3,a1,40003d90 for (fd = f->dents; fd; fd=fd->next) { 40003bc8: 004a2a03 lw s4,4(s4) 40003bcc: ff1ff06f j 40003bbc if (fn) { 40003bd0: fe0a02e3 beqz s4,40003bb4 <== NOT EXECUTED if (ref_flags(raw) == REF_PRISTINE) { 40003bd4: 0049a783 lw a5,4(s3) 40003bd8: 00200713 li a4,2 40003bdc: 0037f793 andi a5,a5,3 40003be0: 12e784e3 beq a5,a4,40004508 if((start >> PAGE_SHIFT) < ((end-1) >> PAGE_SHIFT)) { 40003be4: fffd0c13 addi s8,s10,-1 40003be8: 00cad793 srli a5,s5,0xc 40003bec: 00cc5713 srli a4,s8,0xc 40003bf0: 60e7f263 bgeu a5,a4,400041f4 int ret; jffs2_dbg(1, "Writing replacement hole node for ino #%u from offset 0x%x to 0x%x\n", f->inocache->ino, start, end); memset(&ri, 0, sizeof(ri)); 40003bf4: 02c10993 addi s3,sp,44 <== NOT EXECUTED 40003bf8: 04400613 li a2,68 <== NOT EXECUTED 40003bfc: 00000593 li a1,0 <== NOT EXECUTED 40003c00: 00098513 mv a0,s3 <== NOT EXECUTED 40003c04: 514180ef jal ra,4001c118 <== NOT EXECUTED if(fn->frags > 1) { 40003c08: 00ca2783 lw a5,12(s4) <== NOT EXECUTED 40003c0c: 00100c13 li s8,1 <== NOT EXECUTED memset(&ri, 0, sizeof(ri)); 40003c10: 04400c93 li s9,68 <== NOT EXECUTED 40003c14: 02810b93 addi s7,sp,40 <== NOT EXECUTED if(fn->frags > 1) { 40003c18: 4efc7463 bgeu s8,a5,40004100 <== NOT EXECUTED size_t readlen; uint32_t crc; /* It's partially obsoleted by a later write. So we have to write it out again with the _same_ version as before */ ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(ri), &readlen, (char *)&ri); 40003c1c: 000a2783 lw a5,0(s4) <== NOT EXECUTED 40003c20: 02810b93 addi s7,sp,40 <== NOT EXECUTED 40003c24: 04400613 li a2,68 <== NOT EXECUTED 40003c28: 0047a583 lw a1,4(a5) <== NOT EXECUTED 40003c2c: 00098713 mv a4,s3 <== NOT EXECUTED 40003c30: 000b8693 mv a3,s7 <== NOT EXECUTED 40003c34: ffc5f593 andi a1,a1,-4 <== NOT EXECUTED 40003c38: 00048513 mv a0,s1 <== NOT EXECUTED 40003c3c: 53d070ef jal ra,4000b978 <== NOT EXECUTED if (readlen != sizeof(ri) || ret) { 40003c40: 02812603 lw a2,40(sp) <== NOT EXECUTED ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(ri), &readlen, (char *)&ri); 40003c44: 00050593 mv a1,a0 <== NOT EXECUTED if (readlen != sizeof(ri) || ret) { 40003c48: 59961e63 bne a2,s9,400041e4 <== NOT EXECUTED 40003c4c: 58051c63 bnez a0,400041e4 <== NOT EXECUTED pr_warn("Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %zd. Data will be lost by writing new hole node\n", ret, readlen); goto fill; } if (je16_to_cpu(ri.nodetype) != JFFS2_NODETYPE_INODE) { 40003c50: 02e15683 lhu a3,46(sp) <== NOT EXECUTED 40003c54: 0000e737 lui a4,0xe <== NOT EXECUTED 40003c58: 00270713 addi a4,a4,2 # e002 <== NOT EXECUTED 40003c5c: 56e69063 bne a3,a4,400041bc <== NOT EXECUTED pr_warn("%s(): Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n", __func__, ref_offset(fn->raw), je16_to_cpu(ri.nodetype), JFFS2_NODETYPE_INODE); return -EIO; } if (je32_to_cpu(ri.totlen) != sizeof(ri)) { 40003c60: 03012683 lw a3,48(sp) <== NOT EXECUTED 40003c64: 52c69663 bne a3,a2,40004190 <== NOT EXECUTED pr_warn("%s(): Node at 0x%08x had totlen 0x%x instead of expected 0x%zx\n", __func__, ref_offset(fn->raw), je32_to_cpu(ri.totlen), sizeof(ri)); return -EIO; } crc = crc32(0, &ri, sizeof(ri)-8); 40003c68: 03c00613 li a2,60 <== NOT EXECUTED 40003c6c: 00098593 mv a1,s3 <== NOT EXECUTED 40003c70: 021060ef jal ra,4000a490 <== NOT EXECUTED if (crc != je32_to_cpu(ri.node_crc)) { 40003c74: 06c12683 lw a3,108(sp) <== NOT EXECUTED crc = crc32(0, &ri, sizeof(ri)-8); 40003c78: 00050713 mv a4,a0 <== NOT EXECUTED if (crc != je32_to_cpu(ri.node_crc)) { 40003c7c: 4ed51863 bne a0,a3,4000416c <== NOT EXECUTED /* FIXME: We could possibly deal with this by writing new holes for each frag */ pr_warn("Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n", start, end, f->inocache->ino); goto fill; } if (ri.compr != JFFS2_COMPR_ZERO) { 40003c80: 06414783 lbu a5,100(sp) <== NOT EXECUTED 40003c84: 45879063 bne a5,s8,400040c4 <== NOT EXECUTED } static inline struct rb_node *rb_last( struct rb_root *root ) { return _RBTree_Maximum( (RBTree_Control *) root ); 40003c88: 000b0513 mv a0,s6 <== NOT EXECUTED 40003c8c: 175100ef jal ra,40014600 <_RBTree_Maximum> <== NOT EXECUTED static inline struct jffs2_node_frag *frag_last(struct rb_root *root) { struct rb_node *node = rb_last(root); if (!node) 40003c90: 42050663 beqz a0,400040bc <== NOT EXECUTED frag = frag_last(&f->fragtree); if (frag) /* Fetch the inode length from the fragtree rather then * from i_size since i_size may have not been updated yet */ ilen = frag->ofs + frag->size; 40003c94: 01852703 lw a4,24(a0) <== NOT EXECUTED 40003c98: 01452783 lw a5,20(a0) <== NOT EXECUTED 40003c9c: 00f707b3 add a5,a4,a5 <== NOT EXECUTED return osmode & (S_IFMT | S_IRWXU | S_IRWXG | S_IRWXO); 40003ca0: fc042703 lw a4,-64(s0) <== NOT EXECUTED else ilen = JFFS2_F_I_SIZE(f); ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40003ca4: fc645e83 lhu t4,-58(s0) <== NOT EXECUTED ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40003ca8: fc845e03 lhu t3,-56(s0) <== NOT EXECUTED ri.isize = cpu_to_je32(ilen); ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 40003cac: fd042303 lw t1,-48(s0) <== NOT EXECUTED ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40003cb0: fe042883 lw a7,-32(s0) <== NOT EXECUTED ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40003cb4: fd842803 lw a6,-40(s0) <== NOT EXECUTED 40003cb8: 0000f6b7 lui a3,0xf <== NOT EXECUTED 40003cbc: 1ff68693 addi a3,a3,511 # f1ff <== NOT EXECUTED 40003cc0: 00d77733 and a4,a4,a3 <== NOT EXECUTED ri.data_crc = cpu_to_je32(0); ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40003cc4: 03c00613 li a2,60 <== NOT EXECUTED 40003cc8: 00098593 mv a1,s3 <== NOT EXECUTED 40003ccc: 00000513 li a0,0 <== NOT EXECUTED ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); 40003cd0: 04e12023 sw a4,64(sp) <== NOT EXECUTED ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40003cd4: 05d11223 sh t4,68(sp) <== NOT EXECUTED ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40003cd8: 05c11323 sh t3,70(sp) <== NOT EXECUTED ri.isize = cpu_to_je32(ilen); 40003cdc: 04f12423 sw a5,72(sp) <== NOT EXECUTED ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 40003ce0: 04612623 sw t1,76(sp) <== NOT EXECUTED ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40003ce4: 05112a23 sw a7,84(sp) <== NOT EXECUTED ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40003ce8: 05012823 sw a6,80(sp) <== NOT EXECUTED ri.data_crc = cpu_to_je32(0); 40003cec: 06012423 sw zero,104(sp) <== NOT EXECUTED ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40003cf0: 7a0060ef jal ra,4000a490 <== NOT EXECUTED 40003cf4: 00050793 mv a5,a0 <== NOT EXECUTED ret = jffs2_reserve_space_gc(c, sizeof(ri), &alloclen, 40003cf8: 01200693 li a3,18 <== NOT EXECUTED 40003cfc: 000b8613 mv a2,s7 <== NOT EXECUTED 40003d00: 04400593 li a1,68 <== NOT EXECUTED 40003d04: 00048513 mv a0,s1 <== NOT EXECUTED ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40003d08: 06f12623 sw a5,108(sp) <== NOT EXECUTED ret = jffs2_reserve_space_gc(c, sizeof(ri), &alloclen, 40003d0c: 50c020ef jal ra,40006218 <== NOT EXECUTED 40003d10: 00050d93 mv s11,a0 <== NOT EXECUTED JFFS2_SUMMARY_INODE_SIZE); if (ret) { 40003d14: 38051863 bnez a0,400040a4 <== NOT EXECUTED pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_hole failed: %d\n", sizeof(ri), ret); return ret; } new_fn = jffs2_write_dnode(c, f, &ri, NULL, 0, ALLOC_GC); 40003d18: 00200793 li a5,2 <== NOT EXECUTED 40003d1c: 00098613 mv a2,s3 <== NOT EXECUTED 40003d20: 00000713 li a4,0 <== NOT EXECUTED 40003d24: 00000693 li a3,0 <== NOT EXECUTED 40003d28: 00040593 mv a1,s0 <== NOT EXECUTED 40003d2c: 00048513 mv a0,s1 <== NOT EXECUTED 40003d30: 469040ef jal ra,40008998 <== NOT EXECUTED if (IS_ERR(new_fn)) { 40003d34: c1800793 li a5,-1000 <== NOT EXECUTED new_fn = jffs2_write_dnode(c, f, &ri, NULL, 0, ALLOC_GC); 40003d38: 00050993 mv s3,a0 <== NOT EXECUTED if (IS_ERR(new_fn)) { 40003d3c: 34a7e863 bltu a5,a0,4000408c <== NOT EXECUTED pr_warn("Error writing new hole node: %ld\n", PTR_ERR(new_fn)); return PTR_ERR(new_fn); } if (je32_to_cpu(ri.version) == f->highest_version) { 40003d40: 03c12703 lw a4,60(sp) <== NOT EXECUTED 40003d44: 00042783 lw a5,0(s0) <== NOT EXECUTED 40003d48: 30f70863 beq a4,a5,40004058 <== NOT EXECUTED __func__, fn->frags, je32_to_cpu(ri.version), f->highest_version, je32_to_cpu(ri.ino)); }); /* This is a partially-overlapped hole node. Mark it REF_NORMAL not REF_PRISTINE */ mark_ref_normal(new_fn->raw); 40003d4c: 00052703 lw a4,0(a0) <== NOT EXECUTED for (frag = jffs2_lookup_node_frag(&f->fragtree, fn->ofs); 40003d50: 004a2583 lw a1,4(s4) <== NOT EXECUTED 40003d54: 000b0513 mv a0,s6 <== NOT EXECUTED mark_ref_normal(new_fn->raw); 40003d58: 00472783 lw a5,4(a4) <== NOT EXECUTED 40003d5c: 0037e793 ori a5,a5,3 <== NOT EXECUTED 40003d60: 00f72223 sw a5,4(a4) <== NOT EXECUTED for (frag = jffs2_lookup_node_frag(&f->fragtree, fn->ofs); 40003d64: 71c010ef jal ra,40005480 <== NOT EXECUTED 40003d68: 0a050463 beqz a0,40003e10 <== NOT EXECUTED frag; frag = frag_next(frag)) { if (frag->ofs > fn->size + fn->ofs) 40003d6c: 008a2783 lw a5,8(s4) <== NOT EXECUTED 40003d70: 004a2683 lw a3,4(s4) <== NOT EXECUTED 40003d74: 01852703 lw a4,24(a0) <== NOT EXECUTED 40003d78: 00d787b3 add a5,a5,a3 <== NOT EXECUTED 40003d7c: 08e7ea63 bltu a5,a4,40003e10 <== NOT EXECUTED break; if (frag->node == fn) { 40003d80: 01052783 lw a5,16(a0) <== NOT EXECUTED 40003d84: 07478663 beq a5,s4,40003df0 <== NOT EXECUTED return _RBTree_Successor( node ); 40003d88: 099100ef jal ra,40014620 <_RBTree_Successor> <== NOT EXECUTED 40003d8c: fddff06f j 40003d68 <== NOT EXECUTED if (fd && fd->ino) { 40003d90: 00ca2703 lw a4,12(s4) 40003d94: 0a071263 bnez a4,40003e38 <== ALWAYS TAKEN struct jffs2_full_dirent **fdp = &f->dents; 40003d98: 00c40713 addi a4,s0,12 <== NOT EXECUTED while (*fdp) { 40003d9c: 20078463 beqz a5,40003fa4 <== NOT EXECUTED if ((*fdp) == fd) { 40003da0: 1efa0263 beq s4,a5,40003f84 <== NOT EXECUTED fdp = &(*fdp)->next; 40003da4: 00478713 addi a4,a5,4 <== NOT EXECUTED 40003da8: 0047a783 lw a5,4(a5) <== NOT EXECUTED 40003dac: ff1ff06f j 40003d9c <== NOT EXECUTED pr_warn("Raw node at 0x%08x wasn't in node lists for ino #%u\n", 40003db0: 01442783 lw a5,20(s0) <== NOT EXECUTED 40003db4: 0049a583 lw a1,4(s3) <== NOT EXECUTED 40003db8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003dbc: 00c7a603 lw a2,12(a5) <== NOT EXECUTED 40003dc0: ffc5f593 andi a1,a1,-4 <== NOT EXECUTED 40003dc4: cbc50513 addi a0,a0,-836 # 4001dcbc <== NOT EXECUTED 40003dc8: b6cff0ef jal ra,40003134 <== NOT EXECUTED if (ref_obsolete(raw)) { 40003dcc: 0049a783 lw a5,4(s3) <== NOT EXECUTED 40003dd0: 00100713 li a4,1 <== NOT EXECUTED 40003dd4: 0037f793 andi a5,a5,3 <== NOT EXECUTED 40003dd8: 18e79063 bne a5,a4,40003f58 <== NOT EXECUTED pr_warn("But it's obsolete so we don't mind too much\n"); 40003ddc: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003de0: c5050513 addi a0,a0,-944 # 4001dc50 <== NOT EXECUTED 40003de4: b50ff0ef jal ra,40003134 <== NOT EXECUTED int ret = 0; 40003de8: 00000d93 li s11,0 <== NOT EXECUTED 40003dec: bc5ff06f j 400039b0 <== NOT EXECUTED frag->node = new_fn; new_fn->frags++; 40003df0: 00c9a783 lw a5,12(s3) <== NOT EXECUTED frag->node = new_fn; 40003df4: 01352823 sw s3,16(a0) <== NOT EXECUTED new_fn->frags++; 40003df8: 00178793 addi a5,a5,1 <== NOT EXECUTED 40003dfc: 00f9a623 sw a5,12(s3) <== NOT EXECUTED fn->frags--; 40003e00: 00ca2783 lw a5,12(s4) <== NOT EXECUTED 40003e04: fff78793 addi a5,a5,-1 <== NOT EXECUTED 40003e08: 00fa2623 sw a5,12(s4) <== NOT EXECUTED 40003e0c: f7dff06f j 40003d88 <== NOT EXECUTED } } if (fn->frags) { 40003e10: 00ca2783 lw a5,12(s4) <== NOT EXECUTED 40003e14: 1e079063 bnez a5,40003ff4 <== NOT EXECUTED pr_warn("%s(): Old node still has frags!\n", __func__); BUG(); } if (!new_fn->frags) { 40003e18: 00c9a783 lw a5,12(s3) <== NOT EXECUTED 40003e1c: 1a078463 beqz a5,40003fc4 <== NOT EXECUTED pr_warn("%s(): New node has no frags!\n", __func__); BUG(); } jffs2_mark_node_obsolete(c, fn->raw); 40003e20: 000a2583 lw a1,0(s4) <== NOT EXECUTED 40003e24: 00048513 mv a0,s1 <== NOT EXECUTED 40003e28: 475010ef jal ra,40005a9c <== NOT EXECUTED jffs2_free_full_dnode(fn); 40003e2c: 000a0513 mv a0,s4 <== NOT EXECUTED 40003e30: 255000ef jal ra,40004884 <== NOT EXECUTED return 0; 40003e34: b7dff06f j 400039b0 <== NOT EXECUTED rd.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40003e38: 000027b7 lui a5,0x2 40003e3c: 98578793 addi a5,a5,-1659 # 1985 <_ISR_Stack_size+0x985> 40003e40: 02f11623 sh a5,44(sp) rd.nsize = strlen(fd->name); 40003e44: 015a0a93 addi s5,s4,21 rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40003e48: ffffe7b7 lui a5,0xffffe 40003e4c: 00178793 addi a5,a5,1 # ffffe001 rd.nsize = strlen(fd->name); 40003e50: 000a8513 mv a0,s5 rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT); 40003e54: 02f11723 sh a5,46(sp) rd.nsize = strlen(fd->name); 40003e58: 7d4180ef jal ra,4001c62c rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize); 40003e5c: 0ff57713 andi a4,a0,255 rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4)); 40003e60: 02c10993 addi s3,sp,44 rd.nsize = strlen(fd->name); 40003e64: 00050793 mv a5,a0 rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize); 40003e68: 02870713 addi a4,a4,40 rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4)); 40003e6c: 00800613 li a2,8 40003e70: 00098593 mv a1,s3 40003e74: 00000513 li a0,0 rd.nsize = strlen(fd->name); 40003e78: 04f10423 sb a5,72(sp) rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize); 40003e7c: 02e12823 sw a4,48(sp) rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4)); 40003e80: 610060ef jal ra,4000a490 rd.pino = cpu_to_je32(f->inocache->ino); 40003e84: 01442703 lw a4,20(s0) rd.version = cpu_to_je32(++f->highest_version); 40003e88: 00042783 lw a5,0(s0) rd.ino = cpu_to_je32(fd->ino); 40003e8c: 00ca2603 lw a2,12(s4) rd.pino = cpu_to_je32(f->inocache->ino); 40003e90: 00c72703 lw a4,12(a4) rd.version = cpu_to_je32(++f->highest_version); 40003e94: 00178793 addi a5,a5,1 if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f)) 40003e98: fd842683 lw a3,-40(s0) rd.pino = cpu_to_je32(f->inocache->ino); 40003e9c: 02e12c23 sw a4,56(sp) rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4)); 40003ea0: 02a12a23 sw a0,52(sp) if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f)) 40003ea4: fe042703 lw a4,-32(s0) rd.version = cpu_to_je32(++f->highest_version); 40003ea8: 00f42023 sw a5,0(s0) 40003eac: 02f12e23 sw a5,60(sp) rd.ino = cpu_to_je32(fd->ino); 40003eb0: 04c12023 sw a2,64(sp) if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f)) 40003eb4: fe442783 lw a5,-28(s0) 40003eb8: 0ce68063 beq a3,a4,40003f78 40003ebc: 00000713 li a4,0 <== NOT EXECUTED 40003ec0: 04e12223 sw a4,68(sp) rd.type = fd->type; 40003ec4: 014a4783 lbu a5,20(s4) rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8)); 40003ec8: 02000613 li a2,32 40003ecc: 00098593 mv a1,s3 40003ed0: 00000513 li a0,0 rd.type = fd->type; 40003ed4: 04f104a3 sb a5,73(sp) rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8)); 40003ed8: 5b8060ef jal ra,4000a490 rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize)); 40003edc: 04814603 lbu a2,72(sp) rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8)); 40003ee0: 00050793 mv a5,a0 rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize)); 40003ee4: 000a8593 mv a1,s5 40003ee8: 00000513 li a0,0 rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8)); 40003eec: 04f12623 sw a5,76(sp) rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize)); 40003ef0: 5a0060ef jal ra,4000a490 ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &alloclen, 40003ef4: 04814583 lbu a1,72(sp) rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize)); 40003ef8: 00050793 mv a5,a0 ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &alloclen, 40003efc: 02810613 addi a2,sp,40 40003f00: 01858693 addi a3,a1,24 40003f04: 00048513 mv a0,s1 40003f08: 02858593 addi a1,a1,40 rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize)); 40003f0c: 04f12823 sw a5,80(sp) ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &alloclen, 40003f10: 308020ef jal ra,40006218 40003f14: 00050d93 mv s11,a0 if (ret) { 40003f18: 12051263 bnez a0,4000403c <== NEVER TAKEN new_fd = jffs2_write_dirent(c, f, &rd, fd->name, rd.nsize, ALLOC_GC); 40003f1c: 04814703 lbu a4,72(sp) 40003f20: 00200793 li a5,2 40003f24: 00098613 mv a2,s3 40003f28: 000a8693 mv a3,s5 40003f2c: 00040593 mv a1,s0 40003f30: 00048513 mv a0,s1 40003f34: 6d9040ef jal ra,40008e0c if (IS_ERR(new_fd)) { 40003f38: c1800793 li a5,-1000 new_fd = jffs2_write_dirent(c, f, &rd, fd->name, rd.nsize, ALLOC_GC); 40003f3c: 00050993 mv s3,a0 if (IS_ERR(new_fd)) { 40003f40: 0ea7e263 bltu a5,a0,40004024 jffs2_add_fd_to_list(c, new_fd, &f->dents); 40003f44: 00050593 mv a1,a0 40003f48: 00c40613 addi a2,s0,12 40003f4c: 00048513 mv a0,s1 40003f50: 3a9000ef jal ra,40004af8 ret = jffs2_garbage_collect_dirent(c, jeb, f, fd); 40003f54: a5dff06f j 400039b0 BUG(); 40003f58: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003f5c: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40003f60: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003f64: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003f68: d3460613 addi a2,a2,-716 # 4001dd34 <__func__.2> <== NOT EXECUTED 40003f6c: 24800593 li a1,584 <== NOT EXECUTED 40003f70: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003f74: 32c090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f)) 40003f78: fdc42683 lw a3,-36(s0) 40003f7c: f4f690e3 bne a3,a5,40003ebc 40003f80: f41ff06f j 40003ec0 *fdp = fd->next; 40003f84: 004a2783 lw a5,4(s4) <== NOT EXECUTED 40003f88: 00f72023 sw a5,0(a4) <== NOT EXECUTED jffs2_mark_node_obsolete(c, fd->raw); 40003f8c: 00048513 mv a0,s1 <== NOT EXECUTED 40003f90: 30d010ef jal ra,40005a9c <== NOT EXECUTED jffs2_free_full_dirent(fd); 40003f94: 000a0513 mv a0,s4 <== NOT EXECUTED 40003f98: 0e1000ef jal ra,40004878 <== NOT EXECUTED ret = jffs2_garbage_collect_deletion_dirent(c, jeb, f, fd); 40003f9c: 00000d93 li s11,0 <== NOT EXECUTED 40003fa0: a11ff06f j 400039b0 <== NOT EXECUTED pr_warn("Deletion dirent \"%s\" not found in list for ino #%u\n", 40003fa4: 01442783 lw a5,20(s0) <== NOT EXECUTED 40003fa8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003fac: 015a0593 addi a1,s4,21 <== NOT EXECUTED 40003fb0: 00c7a603 lw a2,12(a5) <== NOT EXECUTED 40003fb4: c1050513 addi a0,a0,-1008 # 4001dc10 <== NOT EXECUTED 40003fb8: 97cff0ef jal ra,40003134 <== NOT EXECUTED 40003fbc: 000a2583 lw a1,0(s4) <== NOT EXECUTED 40003fc0: fcdff06f j 40003f8c <== NOT EXECUTED pr_warn("%s(): New node has no frags!\n", __func__); 40003fc4: 4001e437 lui s0,0x4001e <== NOT EXECUTED 40003fc8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003fcc: d1840593 addi a1,s0,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 40003fd0: ac450513 addi a0,a0,-1340 # 4001dac4 <== NOT EXECUTED 40003fd4: 960ff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 40003fd8: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40003fdc: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40003fe0: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40003fe4: d1840613 addi a2,s0,-744 <== NOT EXECUTED 40003fe8: 48b00593 li a1,1163 <== NOT EXECUTED 40003fec: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40003ff0: 2b0090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED pr_warn("%s(): Old node still has frags!\n", __func__); 40003ff4: 4001e437 lui s0,0x4001e <== NOT EXECUTED 40003ff8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40003ffc: d1840593 addi a1,s0,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 40004000: a9850513 addi a0,a0,-1384 # 4001da98 <== NOT EXECUTED 40004004: 930ff0ef jal ra,40003134 <== NOT EXECUTED BUG(); 40004008: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 4000400c: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40004010: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 40004014: d1840613 addi a2,s0,-744 <== NOT EXECUTED 40004018: 48700593 li a1,1159 <== NOT EXECUTED 4000401c: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40004020: 280090ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED pr_warn("jffs2_write_dirent in garbage_collect_dirent failed: %ld\n", 40004024: 00050593 mv a1,a0 <== NOT EXECUTED 40004028: 4001e537 lui a0,0x4001e <== NOT EXECUTED 4000402c: bcc50513 addi a0,a0,-1076 # 4001dbcc <== NOT EXECUTED 40004030: 904ff0ef jal ra,40003134 <== NOT EXECUTED return PTR_ERR(new_fd); 40004034: 00098d93 mv s11,s3 <== NOT EXECUTED 40004038: 979ff06f j 400039b0 <== NOT EXECUTED pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_dirent failed: %d\n", 4000403c: 04814583 lbu a1,72(sp) <== NOT EXECUTED 40004040: 00050613 mv a2,a0 <== NOT EXECUTED 40004044: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40004048: 02858593 addi a1,a1,40 <== NOT EXECUTED 4000404c: b7450513 addi a0,a0,-1164 # 4001db74 <== NOT EXECUTED 40004050: 8e4ff0ef jal ra,40003134 <== NOT EXECUTED return ret; 40004054: 95dff06f j 400039b0 <== NOT EXECUTED jffs2_add_full_dnode_to_inode(c, f, new_fn); 40004058: 00050613 mv a2,a0 <== NOT EXECUTED 4000405c: 00040593 mv a1,s0 <== NOT EXECUTED 40004060: 00048513 mv a0,s1 <== NOT EXECUTED 40004064: 515000ef jal ra,40004d78 <== NOT EXECUTED if (f->metadata) { 40004068: 00842783 lw a5,8(s0) <== NOT EXECUTED 4000406c: 940782e3 beqz a5,400039b0 <== NOT EXECUTED jffs2_mark_node_obsolete(c, f->metadata->raw); 40004070: 0007a583 lw a1,0(a5) <== NOT EXECUTED 40004074: 00048513 mv a0,s1 <== NOT EXECUTED 40004078: 225010ef jal ra,40005a9c <== NOT EXECUTED jffs2_free_full_dnode(f->metadata); 4000407c: 00842503 lw a0,8(s0) <== NOT EXECUTED 40004080: 005000ef jal ra,40004884 <== NOT EXECUTED f->metadata = NULL; 40004084: 00042423 sw zero,8(s0) <== NOT EXECUTED 40004088: 929ff06f j 400039b0 <== NOT EXECUTED pr_warn("Error writing new hole node: %ld\n", PTR_ERR(new_fn)); 4000408c: 00050593 mv a1,a0 <== NOT EXECUTED 40004090: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40004094: a6c50513 addi a0,a0,-1428 # 4001da6c <== NOT EXECUTED 40004098: 89cff0ef jal ra,40003134 <== NOT EXECUTED return PTR_ERR(new_fn); 4000409c: 00098d93 mv s11,s3 <== NOT EXECUTED 400040a0: 911ff06f j 400039b0 <== NOT EXECUTED pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_hole failed: %d\n", 400040a4: 00050613 mv a2,a0 <== NOT EXECUTED 400040a8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400040ac: 04400593 li a1,68 <== NOT EXECUTED 400040b0: a1850513 addi a0,a0,-1512 # 4001da18 <== NOT EXECUTED 400040b4: 880ff0ef jal ra,40003134 <== NOT EXECUTED return ret; 400040b8: 8f9ff06f j 400039b0 <== NOT EXECUTED ilen = JFFS2_F_I_SIZE(f); 400040bc: ff042783 lw a5,-16(s0) <== NOT EXECUTED 400040c0: be1ff06f j 40003ca0 <== NOT EXECUTED pr_warn("%s(): Node 0x%08x wasn't a hole node!\n", 400040c4: 000a2783 lw a5,0(s4) <== NOT EXECUTED 400040c8: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 400040cc: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400040d0: 0047a603 lw a2,4(a5) <== NOT EXECUTED 400040d4: d1858593 addi a1,a1,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 400040d8: 9e450513 addi a0,a0,-1564 # 4001d9e4 <== NOT EXECUTED 400040dc: ffc67613 andi a2,a2,-4 <== NOT EXECUTED 400040e0: 854ff0ef jal ra,40003134 <== NOT EXECUTED pr_warn("Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n", 400040e4: 01442783 lw a5,20(s0) <== NOT EXECUTED 400040e8: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400040ec: 000d0613 mv a2,s10 <== NOT EXECUTED 400040f0: 00c7a683 lw a3,12(a5) <== NOT EXECUTED 400040f4: 000a8593 mv a1,s5 <== NOT EXECUTED 400040f8: 99c50513 addi a0,a0,-1636 # 4001d99c <== NOT EXECUTED 400040fc: 838ff0ef jal ra,40003134 <== NOT EXECUTED ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40004100: 000027b7 lui a5,0x2 <== NOT EXECUTED 40004104: 98578793 addi a5,a5,-1659 # 1985 <_ISR_Stack_size+0x985> <== NOT EXECUTED 40004108: 02f11623 sh a5,44(sp) <== NOT EXECUTED ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 4000410c: ffffe7b7 lui a5,0xffffe <== NOT EXECUTED 40004110: 00278793 addi a5,a5,2 # ffffe002 <== NOT EXECUTED 40004114: 02f11723 sh a5,46(sp) <== NOT EXECUTED ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 40004118: 00800613 li a2,8 <== NOT EXECUTED ri.totlen = cpu_to_je32(sizeof(ri)); 4000411c: 04400793 li a5,68 <== NOT EXECUTED ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 40004120: 00098593 mv a1,s3 <== NOT EXECUTED 40004124: 00000513 li a0,0 <== NOT EXECUTED ri.totlen = cpu_to_je32(sizeof(ri)); 40004128: 02f12823 sw a5,48(sp) <== NOT EXECUTED ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 4000412c: 364060ef jal ra,4000a490 <== NOT EXECUTED ri.ino = cpu_to_je32(f->inocache->ino); 40004130: 01442703 lw a4,20(s0) <== NOT EXECUTED ri.version = cpu_to_je32(++f->highest_version); 40004134: 00042783 lw a5,0(s0) <== NOT EXECUTED ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 40004138: 02a12a23 sw a0,52(sp) <== NOT EXECUTED ri.ino = cpu_to_je32(f->inocache->ino); 4000413c: 00c72703 lw a4,12(a4) <== NOT EXECUTED ri.version = cpu_to_je32(++f->highest_version); 40004140: 00178793 addi a5,a5,1 <== NOT EXECUTED ri.dsize = cpu_to_je32(end - start); 40004144: 415d0833 sub a6,s10,s5 <== NOT EXECUTED ri.ino = cpu_to_je32(f->inocache->ino); 40004148: 02e12c23 sw a4,56(sp) <== NOT EXECUTED ri.version = cpu_to_je32(++f->highest_version); 4000414c: 00f42023 sw a5,0(s0) <== NOT EXECUTED 40004150: 02f12e23 sw a5,60(sp) <== NOT EXECUTED ri.compr = JFFS2_COMPR_ZERO; 40004154: 00100793 li a5,1 <== NOT EXECUTED ri.offset = cpu_to_je32(start); 40004158: 05512c23 sw s5,88(sp) <== NOT EXECUTED ri.dsize = cpu_to_je32(end - start); 4000415c: 07012023 sw a6,96(sp) <== NOT EXECUTED ri.csize = cpu_to_je32(0); 40004160: 04012e23 sw zero,92(sp) <== NOT EXECUTED ri.compr = JFFS2_COMPR_ZERO; 40004164: 06f10223 sb a5,100(sp) <== NOT EXECUTED 40004168: b21ff06f j 40003c88 <== NOT EXECUTED pr_warn("%s: Node at 0x%08x had CRC 0x%08x which doesn't match calculated CRC 0x%08x\n", 4000416c: 000a2783 lw a5,0(s4) <== NOT EXECUTED 40004170: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 40004174: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40004178: 0047a603 lw a2,4(a5) <== NOT EXECUTED 4000417c: d1858593 addi a1,a1,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 40004180: 94450513 addi a0,a0,-1724 # 4001d944 <== NOT EXECUTED 40004184: ffc67613 andi a2,a2,-4 <== NOT EXECUTED 40004188: fadfe0ef jal ra,40003134 <== NOT EXECUTED pr_warn("Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n", 4000418c: f59ff06f j 400040e4 <== NOT EXECUTED pr_warn("%s(): Node at 0x%08x had totlen 0x%x instead of expected 0x%zx\n", 40004190: 000a2783 lw a5,0(s4) <== NOT EXECUTED 40004194: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 40004198: 4001e537 lui a0,0x4001e <== NOT EXECUTED 4000419c: 0047a603 lw a2,4(a5) <== NOT EXECUTED 400041a0: 04400713 li a4,68 <== NOT EXECUTED 400041a4: d1858593 addi a1,a1,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 400041a8: ffc67613 andi a2,a2,-4 <== NOT EXECUTED 400041ac: 8f850513 addi a0,a0,-1800 # 4001d8f8 <== NOT EXECUTED 400041b0: f85fe0ef jal ra,40003134 <== NOT EXECUTED return -EIO; 400041b4: ffb00d93 li s11,-5 <== NOT EXECUTED 400041b8: ff8ff06f j 400039b0 <== NOT EXECUTED pr_warn("%s(): Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n", 400041bc: 000a2783 lw a5,0(s4) <== NOT EXECUTED 400041c0: 4001e5b7 lui a1,0x4001e <== NOT EXECUTED 400041c4: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400041c8: 0047a603 lw a2,4(a5) <== NOT EXECUTED 400041cc: d1858593 addi a1,a1,-744 # 4001dd18 <__func__.1> <== NOT EXECUTED 400041d0: 89850513 addi a0,a0,-1896 # 4001d898 <== NOT EXECUTED 400041d4: ffc67613 andi a2,a2,-4 <== NOT EXECUTED 400041d8: f5dfe0ef jal ra,40003134 <== NOT EXECUTED return -EIO; 400041dc: ffb00d93 li s11,-5 <== NOT EXECUTED 400041e0: fd0ff06f j 400039b0 <== NOT EXECUTED pr_warn("Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %zd. Data will be lost by writing new hole node\n", 400041e4: 4001e537 lui a0,0x4001e <== NOT EXECUTED 400041e8: 81c50513 addi a0,a0,-2020 # 4001d81c <== NOT EXECUTED 400041ec: f49fe0ef jal ra,40003134 <== NOT EXECUTED goto fill; 400041f0: f11ff06f j 40004100 <== NOT EXECUTED int ret = 0; unsigned char *comprbuf = NULL, *writebuf; unsigned long pg; unsigned char *pg_ptr; memset(&ri, 0, sizeof(ri)); 400041f4: 02c10993 addi s3,sp,44 400041f8: 04400613 li a2,68 400041fc: 00000593 li a1,0 40004200: 00098513 mv a0,s3 unsigned char *comprbuf = NULL, *writebuf; 40004204: 00012e23 sw zero,28(sp) memset(&ri, 0, sizeof(ri)); 40004208: 711170ef jal ra,4001c118 f->inocache->ino, start, end); orig_end = end; orig_start = start; if (c->nr_free_blocks + c->nr_erasing_blocks > c->resv_blocks_gcmerge) { 4000420c: 03c4a783 lw a5,60(s1) 40004210: 0404a683 lw a3,64(s1) 40004214: 0484c703 lbu a4,72(s1) 40004218: 00d787b3 add a5,a5,a3 4000421c: 36f77063 bgeu a4,a5,4000457c uint32_t min, max; min = start & ~(PAGE_SIZE-1); max = min + PAGE_SIZE; frag = jffs2_lookup_node_frag(&f->fragtree, start); 40004220: 000a8593 mv a1,s5 40004224: 000b0513 mv a0,s6 40004228: 258010ef jal ra,40005480 /* BUG_ON(!frag) but that'll happen anyway... */ BUG_ON(frag->ofs != start); 4000422c: 01852783 lw a5,24(a0) min = start & ~(PAGE_SIZE-1); 40004230: fffffcb7 lui s9,0xfffff 40004234: 019afcb3 and s9,s5,s9 max = min + PAGE_SIZE; 40004238: 00001bb7 lui s7,0x1 4000423c: 017c8bb3 add s7,s9,s7 BUG_ON(frag->ofs != start); 40004240: 000a8a13 mv s4,s5 40004244: 31579c63 bne a5,s5,4000455c return _RBTree_Predecessor( node ); 40004248: 42c100ef jal ra,40014674 <_RBTree_Predecessor> /* First grow down... */ while((frag = frag_prev(frag)) && frag->ofs >= min) { 4000424c: 04050e63 beqz a0,400042a8 40004250: 01852783 lw a5,24(a0) 40004254: 0597ea63 bltu a5,s9,400042a8 /* If the previous frag doesn't even reach the beginning, there's excessive fragmentation. Just merge. */ if (frag->ofs > min) { 40004258: 2efcee63 bltu s9,a5,40004554 frag->ofs, frag->ofs+frag->size); start = frag->ofs; continue; } /* OK. This frag holds the first byte of the page. */ if (!frag->node || !frag->node->raw) { 4000425c: 01052703 lw a4,16(a0) 40004260: 04070463 beqz a4,400042a8 <== NEVER TAKEN 40004264: 00072703 lw a4,0(a4) 40004268: 04070063 beqz a4,400042a8 <== NEVER TAKEN If not, cover it anyway. */ struct jffs2_raw_node_ref *raw = frag->node->raw; struct jffs2_eraseblock *jeb; jeb = &c->blocks[raw->flash_offset / c->sector_size]; 4000426c: 00472683 lw a3,4(a4) 40004270: 0344a603 lw a2,52(s1) 40004274: 03400593 li a1,52 40004278: 0544a703 lw a4,84(s1) 4000427c: 02c6d6b3 divu a3,a3,a2 if (jeb == c->gcblock) { 40004280: 05c4a603 lw a2,92(s1) jeb = &c->blocks[raw->flash_offset / c->sector_size]; 40004284: 02b686b3 mul a3,a3,a1 40004288: 00d70733 add a4,a4,a3 if (jeb == c->gcblock) { 4000428c: 00c70c63 beq a4,a2,400042a4 frag->ofs + frag->size, ref_offset(raw)); start = frag->ofs; break; } if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) { 40004290: 01872683 lw a3,24(a4) 40004294: 01c72703 lw a4,28(a4) 40004298: 0c400613 li a2,196 4000429c: 00e68733 add a4,a3,a4 400042a0: 00e67463 bgeu a2,a4,400042a8 while((frag = frag_prev(frag)) && frag->ofs >= min) { 400042a4: 00078a13 mv s4,a5 } /* ... then up */ /* Find last frag which is actually part of the node we're to GC. */ frag = jffs2_lookup_node_frag(&f->fragtree, end-1); 400042a8: 000b0513 mv a0,s6 400042ac: 000c0593 mv a1,s8 400042b0: 1d0010ef jal ra,40005480 while((frag = frag_next(frag)) && frag->ofs+frag->size <= max) { 400042b4: 000d0b13 mv s6,s10 return _RBTree_Successor( node ); 400042b8: 368100ef jal ra,40014620 <_RBTree_Successor> 400042bc: 06050063 beqz a0,4000431c 400042c0: 01852783 lw a5,24(a0) 400042c4: 01452703 lw a4,20(a0) 400042c8: 00e787b3 add a5,a5,a4 400042cc: 04fbe863 bltu s7,a5,4000431c /* If the previous frag doesn't even reach the beginning, there's lots of fragmentation. Just merge. */ if (frag->ofs+frag->size < max) { 400042d0: 2777ee63 bltu a5,s7,4000454c frag->ofs, frag->ofs+frag->size); end = frag->ofs + frag->size; continue; } if (!frag->node || !frag->node->raw) { 400042d4: 01052703 lw a4,16(a0) 400042d8: 04070263 beqz a4,4000431c <== NEVER TAKEN 400042dc: 00072703 lw a4,0(a4) 400042e0: 02070e63 beqz a4,4000431c <== NEVER TAKEN If not, cover it anyway. */ struct jffs2_raw_node_ref *raw = frag->node->raw; struct jffs2_eraseblock *jeb; jeb = &c->blocks[raw->flash_offset / c->sector_size]; 400042e4: 00472683 lw a3,4(a4) 400042e8: 0344a603 lw a2,52(s1) 400042ec: 03400593 li a1,52 400042f0: 0544a703 lw a4,84(s1) 400042f4: 02c6d6b3 divu a3,a3,a2 if (jeb == c->gcblock) { 400042f8: 05c4a603 lw a2,92(s1) jeb = &c->blocks[raw->flash_offset / c->sector_size]; 400042fc: 02b686b3 mul a3,a3,a1 40004300: 00d70733 add a4,a4,a3 if (jeb == c->gcblock) { 40004304: 24c70063 beq a4,a2,40004544 frag->ofs + frag->size, ref_offset(raw)); end = frag->ofs + frag->size; break; } if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) { 40004308: 01872683 lw a3,24(a4) 4000430c: 01c72703 lw a4,28(a4) 40004310: 0c400613 li a2,196 40004314: 00e68733 add a4,a3,a4 40004318: 22e66663 bltu a2,a4,40004544 } jffs2_dbg(1, "Expanded dnode to write from (0x%x-0x%x) to (0x%x-0x%x)\n", orig_start, orig_end, start, end); D1(BUG_ON(end > frag_last(&f->fragtree)->ofs + frag_last(&f->fragtree)->size)); BUG_ON(end < orig_end); 4000431c: 4bab6263 bltu s6,s10,400047c0 BUG_ON(start > orig_start); 40004320: 494ae063 bltu s5,s4,400047a0 * It is important to note that jffs2_write_begin() will ensure that its * page is marked Uptodate before allocating space. That means that if we * end up here trying to GC the *same* page that jffs2_write_begin() is * trying to write out, read_cache_page() will not deadlock. */ mutex_unlock(&f->sem); pg_ptr = jffs2_gc_fetch_page(c, f, start, &pg); 40004324: 02010693 addi a3,sp,32 40004328: 000a0613 mv a2,s4 4000432c: 00040593 mv a1,s0 40004330: 00048513 mv a0,s1 40004334: bc8fe0ef jal ra,400026fc mutex_lock(&f->sem); if (IS_ERR(pg_ptr)) { 40004338: c1800793 li a5,-1000 pg_ptr = jffs2_gc_fetch_page(c, f, start, &pg); 4000433c: 00050a93 mv s5,a0 int ret = 0; 40004340: 00000d93 li s11,0 if (IS_ERR(pg_ptr)) { 40004344: 44a7e263 bltu a5,a0,40004788 break; } cdatalen = min_t(uint32_t, alloclen - sizeof(ri), end - offset); datalen = end - offset; writebuf = pg_ptr + (offset & (PAGE_SIZE -1)); 40004348: 000017b7 lui a5,0x1 4000434c: fff78793 addi a5,a5,-1 # fff comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen); ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40004350: 00002cb7 lui s9,0x2 ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 40004354: ffffec37 lui s8,0xffffe 40004358: 0000fbb7 lui s7,0xf writebuf = pg_ptr + (offset & (PAGE_SIZE -1)); 4000435c: 00f12623 sw a5,12(sp) ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40004360: 985c8c93 addi s9,s9,-1659 # 1985 <_ISR_Stack_size+0x985> ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 40004364: 002c0c13 addi s8,s8,2 # ffffe002 40004368: 1ffb8b93 addi s7,s7,511 # f1ff while(offset < orig_end) { 4000436c: 3faa7a63 bgeu s4,s10,40004760 ret = jffs2_reserve_space_gc(c, sizeof(ri) + JFFS2_MIN_DATA_LEN, 40004370: 01200693 li a3,18 40004374: 01810613 addi a2,sp,24 40004378: 0c400593 li a1,196 4000437c: 00048513 mv a0,s1 40004380: 699010ef jal ra,40006218 40004384: 00050d93 mv s11,a0 if (ret) { 40004388: 3c051263 bnez a0,4000474c <== NEVER TAKEN cdatalen = min_t(uint32_t, alloclen - sizeof(ri), end - offset); 4000438c: 01812883 lw a7,24(sp) 40004390: 414b0333 sub t1,s6,s4 40004394: fbc88893 addi a7,a7,-68 40004398: 01137463 bgeu t1,a7,400043a0 4000439c: 00030893 mv a7,t1 writebuf = pg_ptr + (offset & (PAGE_SIZE -1)); 400043a0: 00c12783 lw a5,12(sp) comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen); 400043a4: 01c10693 addi a3,sp,28 400043a8: 02410713 addi a4,sp,36 writebuf = pg_ptr + (offset & (PAGE_SIZE -1)); 400043ac: 00fa7633 and a2,s4,a5 comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen); 400043b0: 00ca8633 add a2,s5,a2 400043b4: 02810793 addi a5,sp,40 400043b8: 00040593 mv a1,s0 400043bc: 00048513 mv a0,s1 cdatalen = min_t(uint32_t, alloclen - sizeof(ri), end - offset); 400043c0: 03112423 sw a7,40(sp) datalen = end - offset; 400043c4: 02612223 sw t1,36(sp) comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen); 400043c8: 104060ef jal ra,4000a4cc ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen); 400043cc: 02812783 lw a5,40(sp) comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen); 400043d0: 00050d93 mv s11,a0 ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 400043d4: 00800613 li a2,8 ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen); 400043d8: 04478793 addi a5,a5,68 ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 400043dc: 00098593 mv a1,s3 400043e0: 00000513 li a0,0 ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen); 400043e4: 02f12823 sw a5,48(sp) ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 400043e8: 03911623 sh s9,44(sp) ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 400043ec: 03811723 sh s8,46(sp) ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 400043f0: 0a0060ef jal ra,4000a490 ri.ino = cpu_to_je32(f->inocache->ino); 400043f4: 01442703 lw a4,20(s0) ri.version = cpu_to_je32(++f->highest_version); 400043f8: 00042783 lw a5,0(s0) ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 400043fc: 02a12a23 sw a0,52(sp) ri.ino = cpu_to_je32(f->inocache->ino); 40004400: 00c72603 lw a2,12(a4) ri.version = cpu_to_je32(++f->highest_version); 40004404: 00178793 addi a5,a5,1 40004408: fc042703 lw a4,-64(s0) ri.ino = cpu_to_je32(f->inocache->ino); 4000440c: 02c12c23 sw a2,56(sp) ri.version = cpu_to_je32(++f->highest_version); 40004410: 00f42023 sw a5,0(s0) ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40004414: fc645283 lhu t0,-58(s0) ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40004418: fc845f83 lhu t6,-56(s0) ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f)); 4000441c: ff042f03 lw t5,-16(s0) ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 40004420: fd042e83 lw t4,-48(s0) ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40004424: fe042e03 lw t3,-32(s0) ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40004428: fd842303 lw t1,-40(s0) ri.version = cpu_to_je32(++f->highest_version); 4000442c: 02f12e23 sw a5,60(sp) ri.offset = cpu_to_je32(offset); ri.csize = cpu_to_je32(cdatalen); 40004430: 02812783 lw a5,40(sp) ri.dsize = cpu_to_je32(datalen); ri.compr = comprtype & 0xff; ri.usercompr = (comprtype >> 8) & 0xff; 40004434: 008dd893 srli a7,s11,0x8 40004438: 01777733 and a4,a4,s7 ri.csize = cpu_to_je32(cdatalen); 4000443c: 04f12e23 sw a5,92(sp) ri.dsize = cpu_to_je32(datalen); 40004440: 02412783 lw a5,36(sp) ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40004444: 03c00613 li a2,60 40004448: 00098593 mv a1,s3 4000444c: 00000513 li a0,0 ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); 40004450: 04e12023 sw a4,64(sp) ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40004454: 04511223 sh t0,68(sp) ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40004458: 05f11323 sh t6,70(sp) ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f)); 4000445c: 05e12423 sw t5,72(sp) ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 40004460: 05d12623 sw t4,76(sp) ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40004464: 05c12a23 sw t3,84(sp) ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40004468: 04612823 sw t1,80(sp) ri.usercompr = (comprtype >> 8) & 0xff; 4000446c: 071102a3 sb a7,101(sp) ri.dsize = cpu_to_je32(datalen); 40004470: 06f12023 sw a5,96(sp) ri.compr = comprtype & 0xff; 40004474: 07b10223 sb s11,100(sp) ri.offset = cpu_to_je32(offset); 40004478: 05412c23 sw s4,88(sp) ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 4000447c: 014060ef jal ra,4000a490 ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen)); 40004480: 02812603 lw a2,40(sp) 40004484: 01c12583 lw a1,28(sp) ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40004488: 00050793 mv a5,a0 ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen)); 4000448c: 00000513 li a0,0 ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40004490: 06f12623 sw a5,108(sp) ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen)); 40004494: 7fd050ef jal ra,4000a490 new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC); 40004498: 02812703 lw a4,40(sp) 4000449c: 01c12683 lw a3,28(sp) ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen)); 400044a0: 00050893 mv a7,a0 new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC); 400044a4: 00200793 li a5,2 400044a8: 00098613 mv a2,s3 400044ac: 00040593 mv a1,s0 400044b0: 00048513 mv a0,s1 ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen)); 400044b4: 07112423 sw a7,104(sp) new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC); 400044b8: 4e0040ef jal ra,40008998 jffs2_free_comprbuf(comprbuf, writebuf); if (IS_ERR(new_fn)) { 400044bc: c1800793 li a5,-1000 new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC); 400044c0: 00050d93 mv s11,a0 if (IS_ERR(new_fn)) { 400044c4: 2aa7e863 bltu a5,a0,40004774 pr_warn("Error writing new dnode: %ld\n", PTR_ERR(new_fn)); ret = PTR_ERR(new_fn); break; } ret = jffs2_add_full_dnode_to_inode(c, f, new_fn); 400044c8: 00050613 mv a2,a0 400044cc: 00040593 mv a1,s0 400044d0: 00048513 mv a0,s1 400044d4: 0a5000ef jal ra,40004d78 offset += datalen; 400044d8: 02412703 lw a4,36(sp) if (f->metadata) { 400044dc: 00842783 lw a5,8(s0) ret = jffs2_add_full_dnode_to_inode(c, f, new_fn); 400044e0: 00050d93 mv s11,a0 offset += datalen; 400044e4: 00ea0a33 add s4,s4,a4 if (f->metadata) { 400044e8: e80782e3 beqz a5,4000436c <== ALWAYS TAKEN jffs2_mark_node_obsolete(c, f->metadata->raw); 400044ec: 0007a583 lw a1,0(a5) <== NOT EXECUTED 400044f0: 00048513 mv a0,s1 <== NOT EXECUTED 400044f4: 5a8010ef jal ra,40005a9c <== NOT EXECUTED jffs2_free_full_dnode(f->metadata); 400044f8: 00842503 lw a0,8(s0) <== NOT EXECUTED 400044fc: 388000ef jal ra,40004884 <== NOT EXECUTED f->metadata = NULL; 40004500: 00042423 sw zero,8(s0) <== NOT EXECUTED 40004504: e69ff06f j 4000436c <== NOT EXECUTED ret = jffs2_garbage_collect_pristine(c, f->inocache, raw); 40004508: 01442583 lw a1,20(s0) <== NOT EXECUTED 4000450c: 00098613 mv a2,s3 <== NOT EXECUTED 40004510: 00048513 mv a0,s1 <== NOT EXECUTED 40004514: c61fe0ef jal ra,40003174 <== NOT EXECUTED 40004518: 00050d93 mv s11,a0 <== NOT EXECUTED if (!ret) { 4000451c: 00051c63 bnez a0,40004534 <== NOT EXECUTED frag->node->raw = f->inocache->nodes; 40004520: 01442703 lw a4,20(s0) <== NOT EXECUTED 40004524: 010ba783 lw a5,16(s7) <== NOT EXECUTED 40004528: 00472703 lw a4,4(a4) <== NOT EXECUTED 4000452c: 00e7a023 sw a4,0(a5) <== NOT EXECUTED if (ret != -EBADFD) 40004530: c80ff06f j 400039b0 <== NOT EXECUTED 40004534: ffff87b7 lui a5,0xffff8 <== NOT EXECUTED 40004538: 00178793 addi a5,a5,1 # ffff8001 <== NOT EXECUTED 4000453c: eaf50463 beq a0,a5,40003be4 <== NOT EXECUTED 40004540: c70ff06f j 400039b0 <== NOT EXECUTED while((frag = frag_next(frag)) && frag->ofs+frag->size <= max) { 40004544: 00078b13 mv s6,a5 40004548: dd5ff06f j 4000431c 4000454c: 00078b13 mv s6,a5 40004550: d69ff06f j 400042b8 40004554: 00078a13 mv s4,a5 <== NOT EXECUTED 40004558: cf1ff06f j 40004248 <== NOT EXECUTED BUG_ON(frag->ofs != start); 4000455c: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40004560: 4001e637 lui a2,0x4001e <== NOT EXECUTED 40004564: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40004568: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 4000456c: cfc60613 addi a2,a2,-772 # 4001dcfc <__func__.0> <== NOT EXECUTED 40004570: 4ba00593 li a1,1210 <== NOT EXECUTED 40004574: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 40004578: 529080ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED 4000457c: 000d0b13 mv s6,s10 40004580: 000a8a13 mv s4,s5 40004584: da1ff06f j 40004324 ret = 0; 40004588: 00000d93 li s11,0 <== NOT EXECUTED 4000458c: c3cff06f j 400039c8 <== NOT EXECUTED ret = PTR_ERR(f); 40004590: 00050d93 mv s11,a0 <== NOT EXECUTED goto release_sem; 40004594: c34ff06f j 400039c8 <== NOT EXECUTED if (S_ISBLK(JFFS2_F_I_MODE(f)) || 40004598: fc052783 lw a5,-64(a0) 4000459c: 0000b737 lui a4,0xb 400045a0: 0000f637 lui a2,0xf 400045a4: 00e7f733 and a4,a5,a4 400045a8: 000026b7 lui a3,0x2 400045ac: 00c7f7b3 and a5,a5,a2 400045b0: c0d702e3 beq a4,a3,400041b4 } else if (S_ISLNK(JFFS2_F_I_MODE(f))) { 400045b4: 0000a737 lui a4,0xa int mdatalen = 0; 400045b8: 00000993 li s3,0 } else if (S_ISLNK(JFFS2_F_I_MODE(f))) { 400045bc: 22e78e63 beq a5,a4,400047f8 ret = jffs2_reserve_space_gc(c, sizeof(ri) + mdatalen, &alloclen, 400045c0: 04498b13 addi s6,s3,68 400045c4: 01200693 li a3,18 400045c8: 02810613 addi a2,sp,40 400045cc: 000b0593 mv a1,s6 400045d0: 00048513 mv a0,s1 400045d4: 445010ef jal ra,40006218 400045d8: 00050d93 mv s11,a0 if (ret) { 400045dc: 20051263 bnez a0,400047e0 <== NEVER TAKEN return _RBTree_Maximum( (RBTree_Control *) root ); 400045e0: 00440513 addi a0,s0,4 400045e4: 01c100ef jal ra,40014600 <_RBTree_Maximum> 400045e8: 26050263 beqz a0,4000484c <== NEVER TAKEN ilen = last_frag->ofs + last_frag->size; 400045ec: 01852b83 lw s7,24(a0) 400045f0: 01452783 lw a5,20(a0) 400045f4: 00fb8bb3 add s7,s7,a5 memset(&ri, 0, sizeof(ri)); 400045f8: 03c00613 li a2,60 400045fc: 00000593 li a1,0 40004600: 03410513 addi a0,sp,52 40004604: 315170ef jal ra,4001c118 ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 40004608: 000027b7 lui a5,0x2 4000460c: 98578793 addi a5,a5,-1659 # 1985 <_ISR_Stack_size+0x985> 40004610: 02f11623 sh a5,44(sp) ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 40004614: ffffe7b7 lui a5,0xffffe 40004618: 00278793 addi a5,a5,2 # ffffe002 ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 4000461c: 00800613 li a2,8 40004620: 02c10593 addi a1,sp,44 40004624: 00000513 li a0,0 ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); 40004628: 02f11723 sh a5,46(sp) ri.totlen = cpu_to_je32(sizeof(ri) + mdatalen); 4000462c: 03612823 sw s6,48(sp) ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 40004630: 661050ef jal ra,4000a490 ri.ino = cpu_to_je32(f->inocache->ino); 40004634: 01442683 lw a3,20(s0) ri.version = cpu_to_je32(++f->highest_version); 40004638: 00042783 lw a5,0(s0) 4000463c: fc042703 lw a4,-64(s0) ri.ino = cpu_to_je32(f->inocache->ino); 40004640: 00c6a683 lw a3,12(a3) # 200c ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40004644: fc645f03 lhu t5,-58(s0) ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40004648: fc845e83 lhu t4,-56(s0) ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 4000464c: fd042e03 lw t3,-48(s0) ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40004650: fe042303 lw t1,-32(s0) ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40004654: fd842803 lw a6,-40(s0) ri.ino = cpu_to_je32(f->inocache->ino); 40004658: 02d12c23 sw a3,56(sp) 4000465c: 0000f6b7 lui a3,0xf ri.version = cpu_to_je32(++f->highest_version); 40004660: 00178793 addi a5,a5,1 40004664: 1ff68693 addi a3,a3,511 # f1ff ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); 40004668: 02a12a23 sw a0,52(sp) ri.version = cpu_to_je32(++f->highest_version); 4000466c: 00f42023 sw a5,0(s0) 40004670: 00d77733 and a4,a4,a3 ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 40004674: 03c00613 li a2,60 40004678: 02c10593 addi a1,sp,44 4000467c: 00000513 li a0,0 ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f)); 40004680: 04e12023 sw a4,64(sp) ri.uid = cpu_to_je16(JFFS2_F_I_UID(f)); 40004684: 05e11223 sh t5,68(sp) ri.gid = cpu_to_je16(JFFS2_F_I_GID(f)); 40004688: 05d11323 sh t4,70(sp) ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f)); 4000468c: 05c12623 sw t3,76(sp) ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f)); 40004690: 04612a23 sw t1,84(sp) ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f)); 40004694: 05012823 sw a6,80(sp) ri.version = cpu_to_je32(++f->highest_version); 40004698: 02f12e23 sw a5,60(sp) ri.csize = cpu_to_je32(mdatalen); 4000469c: 05312e23 sw s3,92(sp) ri.dsize = cpu_to_je32(mdatalen); 400046a0: 07312023 sw s3,96(sp) ri.isize = cpu_to_je32(ilen); 400046a4: 05712423 sw s7,72(sp) ri.offset = cpu_to_je32(0); 400046a8: 04012c23 sw zero,88(sp) ri.compr = JFFS2_COMPR_NONE; 400046ac: 06010223 sb zero,100(sp) ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 400046b0: 5e1050ef jal ra,4000a490 400046b4: 00050793 mv a5,a0 ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen)); 400046b8: 00098613 mv a2,s3 400046bc: 000a0593 mv a1,s4 400046c0: 00000513 li a0,0 ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); 400046c4: 06f12623 sw a5,108(sp) ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen)); 400046c8: 5c9050ef jal ra,4000a490 400046cc: 00050813 mv a6,a0 new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, ALLOC_GC); 400046d0: 00200793 li a5,2 400046d4: 00098713 mv a4,s3 400046d8: 000a0693 mv a3,s4 400046dc: 02c10613 addi a2,sp,44 400046e0: 00040593 mv a1,s0 400046e4: 00048513 mv a0,s1 ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen)); 400046e8: 07012423 sw a6,104(sp) new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, ALLOC_GC); 400046ec: 2ac040ef jal ra,40008998 if (IS_ERR(new_fn)) { 400046f0: c1800793 li a5,-1000 new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, ALLOC_GC); 400046f4: 00050993 mv s3,a0 if (IS_ERR(new_fn)) { 400046f8: 02a7ee63 bltu a5,a0,40004734 jffs2_mark_node_obsolete(c, fn->raw); 400046fc: 000aa583 lw a1,0(s5) 40004700: 00048513 mv a0,s1 40004704: 398010ef jal ra,40005a9c jffs2_free_full_dnode(fn); 40004708: 000a8513 mv a0,s5 4000470c: 178000ef jal ra,40004884 f->metadata = new_fn; 40004710: 01342423 sw s3,8(s0) if (S_ISLNK(JFFS2_F_I_MODE(f))) 40004714: fc042683 lw a3,-64(s0) 40004718: 0000f7b7 lui a5,0xf 4000471c: 0000a737 lui a4,0xa 40004720: 00d7f7b3 and a5,a5,a3 40004724: a8e79663 bne a5,a4,400039b0 kfree(mdata); 40004728: 000a0513 mv a0,s4 <== NOT EXECUTED 4000472c: 7a9080ef jal ra,4000d6d4 <== NOT EXECUTED 40004730: a80ff06f j 400039b0 <== NOT EXECUTED pr_warn("Error writing new dnode: %ld\n", PTR_ERR(new_fn)); 40004734: 00050593 mv a1,a0 <== NOT EXECUTED 40004738: 4001d537 lui a0,0x4001d <== NOT EXECUTED 4000473c: 7f450513 addi a0,a0,2036 # 4001d7f4 <== NOT EXECUTED 40004740: 9f5fe0ef jal ra,40003134 <== NOT EXECUTED ret = PTR_ERR(new_fn); 40004744: 00098d93 mv s11,s3 <== NOT EXECUTED goto out; 40004748: fcdff06f j 40004714 <== NOT EXECUTED pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_dnode failed: %d\n", 4000474c: 00050613 mv a2,a0 <== NOT EXECUTED 40004750: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40004754: 0c400593 li a1,196 <== NOT EXECUTED 40004758: b2050513 addi a0,a0,-1248 # 4001db20 <== NOT EXECUTED 4000475c: 9d9fe0ef jal ra,40003134 <== NOT EXECUTED } } jffs2_gc_release_page(c, pg_ptr, &pg); 40004760: 02010613 addi a2,sp,32 40004764: 000a8593 mv a1,s5 40004768: 00048513 mv a0,s1 4000476c: fd1fd0ef jal ra,4000273c return ret; 40004770: a40ff06f j 400039b0 pr_warn("Error writing new dnode: %ld\n", 40004774: 00050593 mv a1,a0 <== NOT EXECUTED 40004778: 4001d537 lui a0,0x4001d <== NOT EXECUTED 4000477c: 7f450513 addi a0,a0,2036 # 4001d7f4 <== NOT EXECUTED 40004780: 9b5fe0ef jal ra,40003134 <== NOT EXECUTED break; 40004784: fddff06f j 40004760 <== NOT EXECUTED pr_warn("read_cache_page() returned error: %ld\n", 40004788: 00050593 mv a1,a0 <== NOT EXECUTED 4000478c: 4001e537 lui a0,0x4001e <== NOT EXECUTED 40004790: aec50513 addi a0,a0,-1300 # 4001daec <== NOT EXECUTED 40004794: 9a1fe0ef jal ra,40003134 <== NOT EXECUTED return PTR_ERR(pg_ptr); 40004798: 000a8d93 mv s11,s5 <== NOT EXECUTED 4000479c: a14ff06f j 400039b0 <== NOT EXECUTED BUG_ON(start > orig_start); 400047a0: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 400047a4: 4001e637 lui a2,0x4001e <== NOT EXECUTED 400047a8: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400047ac: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 400047b0: cfc60613 addi a2,a2,-772 # 4001dcfc <__func__.0> <== NOT EXECUTED 400047b4: 52c00593 li a1,1324 <== NOT EXECUTED 400047b8: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 400047bc: 2e5080ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED BUG_ON(end < orig_end); 400047c0: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 400047c4: 4001e637 lui a2,0x4001e <== NOT EXECUTED 400047c8: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400047cc: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 400047d0: cfc60613 addi a2,a2,-772 # 4001dcfc <__func__.0> <== NOT EXECUTED 400047d4: 52b00593 li a1,1323 <== NOT EXECUTED 400047d8: 56c50513 addi a0,a0,1388 # 4001d56c <== NOT EXECUTED 400047dc: 2c5080ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_metadata failed: %d\n", 400047e0: 00050613 mv a2,a0 <== NOT EXECUTED 400047e4: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400047e8: 000b0593 mv a1,s6 <== NOT EXECUTED 400047ec: 79c50513 addi a0,a0,1948 # 4001d79c <== NOT EXECUTED 400047f0: 945fe0ef jal ra,40003134 <== NOT EXECUTED goto out; 400047f4: f21ff06f j 40004714 <== NOT EXECUTED mdatalen = fn->size; 400047f8: 008aa983 lw s3,8(s5) <== NOT EXECUTED mdata = kmalloc(fn->size, GFP_KERNEL); 400047fc: 00098513 mv a0,s3 <== NOT EXECUTED 40004800: 27c090ef jal ra,4000da7c <== NOT EXECUTED 40004804: 00050a13 mv s4,a0 <== NOT EXECUTED if (!mdata) { 40004808: 04050a63 beqz a0,4000485c <== NOT EXECUTED ret = jffs2_read_dnode(c, f, fn, mdata, 0, mdatalen); 4000480c: 00050693 mv a3,a0 <== NOT EXECUTED 40004810: 00098793 mv a5,s3 <== NOT EXECUTED 40004814: 00000713 li a4,0 <== NOT EXECUTED 40004818: 000a8613 mv a2,s5 <== NOT EXECUTED 4000481c: 00040593 mv a1,s0 <== NOT EXECUTED 40004820: 00048513 mv a0,s1 <== NOT EXECUTED 40004824: 4e5010ef jal ra,40006508 <== NOT EXECUTED 40004828: 00050d93 mv s11,a0 <== NOT EXECUTED if (ret) { 4000482c: d8050ae3 beqz a0,400045c0 <== NOT EXECUTED pr_warn("read of old metadata failed in jffs2_garbage_collect_metadata(): %d\n", 40004830: 00050593 mv a1,a0 <== NOT EXECUTED 40004834: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40004838: 74c50513 addi a0,a0,1868 # 4001d74c <== NOT EXECUTED 4000483c: 8f9fe0ef jal ra,40003134 <== NOT EXECUTED kfree(mdata); 40004840: 000a0513 mv a0,s4 <== NOT EXECUTED 40004844: 691080ef jal ra,4000d6d4 <== NOT EXECUTED return ret; 40004848: 968ff06f j 400039b0 <== NOT EXECUTED ilen = JFFS2_F_I_SIZE(f); 4000484c: ff042b83 lw s7,-16(s0) <== NOT EXECUTED 40004850: da9ff06f j 400045f8 <== NOT EXECUTED 40004854: 00078a13 mv s4,a5 40004858: b7cff06f j 40003bd4 pr_warn("kmalloc of mdata failed in jffs2_garbage_collect_metadata()\n"); 4000485c: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40004860: 70450513 addi a0,a0,1796 # 4001d704 <== NOT EXECUTED 40004864: 8d1fe0ef jal ra,40003134 <== NOT EXECUTED return -ENOMEM; 40004868: ff400d93 li s11,-12 <== NOT EXECUTED 4000486c: 944ff06f j 400039b0 <== NOT EXECUTED =============================================================================== 400030b4 : } struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c, int inum, int unlinked) { 400030b4: ff010113 addi sp,sp,-16 400030b8: 00112623 sw ra,12(sp) struct _inode *inode; struct jffs2_inode_cache *ic; if (unlinked) { 400030bc: 04060263 beqz a2,40003100 <== ALWAYS TAKEN 400030c0: 00050693 mv a3,a0 <== NOT EXECUTED for (inode = sb->s_root; inode != NULL; inode = inode->i_cache_next) { 400030c4: 0e052503 lw a0,224(a0) <== NOT EXECUTED 400030c8: 00058713 mv a4,a1 <== NOT EXECUTED 400030cc: 00051863 bnez a0,400030dc <== NOT EXECUTED 400030d0: 0480006f j 40003118 <== NOT EXECUTED 400030d4: 06852503 lw a0,104(a0) <== NOT EXECUTED 400030d8: 04050063 beqz a0,40003118 <== NOT EXECUTED if (inode->i_ino == ino) { 400030dc: 00052783 lw a5,0(a0) <== NOT EXECUTED 400030e0: fef71ae3 bne a4,a5,400030d4 <== NOT EXECUTED inode->i_count++; 400030e4: 00452783 lw a5,4(a0) <== NOT EXECUTED 400030e8: 00178793 addi a5,a5,1 <== NOT EXECUTED 400030ec: 00f52223 sw a5,4(a0) <== NOT EXECUTED if (IS_ERR(inode)) return ERR_CAST(inode); } return JFFS2_INODE_INFO(inode); } 400030f0: 00c12083 lw ra,12(sp) return JFFS2_INODE_INFO(inode); 400030f4: 04850513 addi a0,a0,72 } 400030f8: 01010113 addi sp,sp,16 400030fc: 00008067 ret inode = jffs2_iget(OFNI_BS_2SFFJ(c), inum); 40003100: a19ff0ef jal ra,40002b18 if (IS_ERR(inode)) 40003104: c1800793 li a5,-1000 40003108: fea7f4e3 bgeu a5,a0,400030f0 } 4000310c: 00c12083 lw ra,12(sp) <== NOT EXECUTED 40003110: 01010113 addi sp,sp,16 <== NOT EXECUTED 40003114: 00008067 ret <== NOT EXECUTED ic = jffs2_get_ino_cache(c, inum); 40003118: 00070593 mv a1,a4 <== NOT EXECUTED 4000311c: 00068513 mv a0,a3 <== NOT EXECUTED 40003120: 118020ef jal ra,40005238 <== NOT EXECUTED } 40003124: 00c12083 lw ra,12(sp) <== NOT EXECUTED return NULL; 40003128: 00000513 li a0,0 <== NOT EXECUTED } 4000312c: 01010113 addi sp,sp,16 <== NOT EXECUTED 40003130: 00008067 ret <== NOT EXECUTED =============================================================================== 400026fc : { 400026fc: ff010113 addi sp,sp,-16 40002700: 00812423 sw s0,8(sp) ret = jffs2_read_inode_range(c, f, gc_buffer, 40002704: fffff6b7 lui a3,0xfffff unsigned char *gc_buffer = &sb->s_gc_buffer[0]; 40002708: 0ed50413 addi s0,a0,237 ret = jffs2_read_inode_range(c, f, gc_buffer, 4000270c: 00d676b3 and a3,a2,a3 40002710: 00001737 lui a4,0x1 40002714: 00040613 mv a2,s0 { 40002718: 00112623 sw ra,12(sp) ret = jffs2_read_inode_range(c, f, gc_buffer, 4000271c: 304040ef jal ra,40006a20 if (ret) 40002720: 00050463 beqz a0,40002728 <== ALWAYS TAKEN return ERR_PTR(ret); 40002724: 00050413 mv s0,a0 <== NOT EXECUTED } 40002728: 00c12083 lw ra,12(sp) 4000272c: 00040513 mv a0,s0 40002730: 00812403 lw s0,8(sp) 40002734: 01010113 addi sp,sp,16 40002738: 00008067 ret =============================================================================== 40005238 : ret = c->inocache_list[ino % c->inocache_hashsize]; 40005238: 0c052783 lw a5,192(a0) 4000523c: 0c452703 lw a4,196(a0) 40005240: 02f5f7b3 remu a5,a1,a5 40005244: 00279793 slli a5,a5,0x2 40005248: 00f707b3 add a5,a4,a5 4000524c: 0007a503 lw a0,0(a5) while (ret && ret->ino < ino) { 40005250: 00051863 bnez a0,40005260 40005254: 0280006f j 4000527c ret = ret->next; 40005258: 01052503 lw a0,16(a0) <== NOT EXECUTED while (ret && ret->ino < ino) { 4000525c: 00050e63 beqz a0,40005278 <== NOT EXECUTED 40005260: 00c52783 lw a5,12(a0) 40005264: feb7eae3 bltu a5,a1,40005258 ret = NULL; 40005268: 40b787b3 sub a5,a5,a1 4000526c: 0017b793 seqz a5,a5 40005270: 40f007b3 neg a5,a5 40005274: 00f57533 and a0,a0,a5 } 40005278: 00008067 ret 4000527c: 00008067 ret =============================================================================== 40002b18 : { 40002b18: fa010113 addi sp,sp,-96 40002b1c: 04812c23 sw s0,88(sp) for (inode = sb->s_root; inode != NULL; inode = inode->i_cache_next) { 40002b20: 0e052403 lw s0,224(a0) { 40002b24: 04912a23 sw s1,84(sp) 40002b28: 04112e23 sw ra,92(sp) 40002b2c: 05212823 sw s2,80(sp) 40002b30: 00058493 mv s1,a1 for (inode = sb->s_root; inode != NULL; inode = inode->i_cache_next) { 40002b34: 00041863 bnez s0,40002b44 40002b38: 03c0006f j 40002b74 40002b3c: 06842403 lw s0,104(s0) 40002b40: 02040a63 beqz s0,40002b74 if (inode->i_ino == ino) { 40002b44: 00042783 lw a5,0(s0) 40002b48: fef49ae3 bne s1,a5,40002b3c inode->i_count++; 40002b4c: 00442783 lw a5,4(s0) 40002b50: 00178793 addi a5,a5,1 40002b54: 00f42223 sw a5,4(s0) } 40002b58: 05c12083 lw ra,92(sp) 40002b5c: 00040513 mv a0,s0 40002b60: 05812403 lw s0,88(sp) 40002b64: 05412483 lw s1,84(sp) 40002b68: 05012903 lw s2,80(sp) 40002b6c: 06010113 addi sp,sp,96 40002b70: 00008067 ret inode = new_inode(sb); 40002b74: e24fe0ef jal ra,40001198 40002b78: 00050413 mv s0,a0 if (inode == NULL) 40002b7c: 0c050c63 beqz a0,40002c54 <== NEVER TAKEN struct jffs2_raw_inode latest_node; int ret; D1(printk(KERN_DEBUG "jffs2_read_inode(): inode->i_ino == %lu\n", inode->i_ino)); f = JFFS2_INODE_INFO(inode); 40002b80: 04840793 addi a5,s0,72 c = JFFS2_SB_INFO(inode->i_sb); 40002b84: 04042903 lw s2,64(s0) memset(f, 0, sizeof(*f)); 40002b88: 01c00613 li a2,28 40002b8c: 00000593 li a1,0 inode->i_ino = ino; 40002b90: 00942023 sw s1,0(s0) memset(f, 0, sizeof(*f)); 40002b94: 00078513 mv a0,a5 40002b98: 580190ef jal ra,4001c118 jffs2_init_inode_info(f); ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node); 40002b9c: 00048613 mv a2,s1 40002ba0: 00050593 mv a1,a0 40002ba4: 00c10693 addi a3,sp,12 40002ba8: 00090513 mv a0,s2 40002bac: 121050ef jal ra,400084cc 40002bb0: 00050493 mv s1,a0 if (ret) { 40002bb4: 08051063 bnez a0,40002c34 <== NEVER TAKEN 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->pino_nlink; 40002bb8: 05c42783 lw a5,92(s0) inode->i_ctime = je32_to_cpu(latest_node.ctime); 40002bbc: 03412603 lw a2,52(sp) inode->i_atime = je32_to_cpu(latest_node.atime); 40002bc0: 02c12503 lw a0,44(sp) inode->i_nlink = f->inocache->pino_nlink; 40002bc4: 0147a683 lw a3,20(a5) return jmode & (S_IFMT | S_IRWXU | S_IRWXG | S_IRWXO); 40002bc8: 02012783 lw a5,32(sp) inode->i_mtime = je32_to_cpu(latest_node.mtime); 40002bcc: 03012583 lw a1,48(sp) inode->i_size = je32_to_cpu(latest_node.isize); 40002bd0: 02812803 lw a6,40(sp) inode->i_uid = je16_to_cpu(latest_node.uid); 40002bd4: 02415303 lhu t1,36(sp) inode->i_gid = je16_to_cpu(latest_node.gid); 40002bd8: 02615883 lhu a7,38(sp) 40002bdc: 0000f737 lui a4,0xf 40002be0: 1ff70713 addi a4,a4,511 # f1ff 40002be4: 00e7f7b3 and a5,a5,a4 inode->i_atime = je32_to_cpu(latest_node.atime); 40002be8: 00a42c23 sw a0,24(s0) } 40002bec: 05c12083 lw ra,92(sp) inode->i_mode = jemode_to_cpu(latest_node.mode); 40002bf0: 00f42423 sw a5,8(s0) inode->i_uid = je16_to_cpu(latest_node.uid); 40002bf4: 00641723 sh t1,14(s0) inode->i_gid = je16_to_cpu(latest_node.gid); 40002bf8: 01141823 sh a7,16(s0) inode->i_size = je32_to_cpu(latest_node.isize); 40002bfc: 03042c23 sw a6,56(s0) 40002c00: 02042e23 sw zero,60(s0) inode->i_atime = je32_to_cpu(latest_node.atime); 40002c04: 00042e23 sw zero,28(s0) inode->i_mtime = je32_to_cpu(latest_node.mtime); 40002c08: 02b42023 sw a1,32(s0) 40002c0c: 02042223 sw zero,36(s0) inode->i_ctime = je32_to_cpu(latest_node.ctime); 40002c10: 02c42423 sw a2,40(s0) 40002c14: 02042623 sw zero,44(s0) inode->i_nlink = f->inocache->pino_nlink; 40002c18: 00d41623 sh a3,12(s0) } 40002c1c: 00040513 mv a0,s0 40002c20: 05812403 lw s0,88(sp) 40002c24: 05412483 lw s1,84(sp) 40002c28: 05012903 lw s2,80(sp) 40002c2c: 06010113 addi sp,sp,96 40002c30: 00008067 ret printk("jffs2_read_inode() failed\n"); 40002c34: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40002c38: 02c50513 addi a0,a0,44 # 4001d02c <== NOT EXECUTED 40002c3c: d50ff0ef jal ra,4000218c <== NOT EXECUTED jffs2_iput(inode); 40002c40: 00040513 mv a0,s0 <== NOT EXECUTED inode->i_nlink = 0; // free _this_ bad inode right now 40002c44: 00041623 sh zero,12(s0) <== NOT EXECUTED jffs2_iput(inode); 40002c48: af9ff0ef jal ra,40002740 <== NOT EXECUTED return ERR_PTR(err); 40002c4c: 00048413 mv s0,s1 <== NOT EXECUTED 40002c50: f09ff06f j 40002b58 <== NOT EXECUTED return ERR_PTR(-ENOMEM); 40002c54: ff400413 li s0,-12 <== NOT EXECUTED 40002c58: f01ff06f j 40002b58 <== NOT EXECUTED =============================================================================== 40002740 : { 40002740: ff010113 addi sp,sp,-16 40002744: 00812423 sw s0,8(sp) 40002748: 00112623 sw ra,12(sp) 4000274c: 00912223 sw s1,4(sp) 40002750: 00050413 mv s0,a0 assert(i != NULL); 40002754: 0a040c63 beqz s0,4000280c <== NEVER TAKEN i->i_count--; 40002758: 00442783 lw a5,4(s0) 4000275c: fff78793 addi a5,a5,-1 40002760: 00f42223 sw a5,4(s0) if (i->i_count < 0) 40002764: 0807c463 bltz a5,400027ec <== NEVER TAKEN if (i->i_count) 40002768: 04079863 bnez a5,400027b8 if (!i->i_nlink) { 4000276c: 00c45783 lhu a5,12(s0) 40002770: 04079e63 bnez a5,400027cc if (i->i_cache_prev) 40002774: 06442703 lw a4,100(s0) i->i_cache_prev->i_cache_next = i->i_cache_next; 40002778: 06842783 lw a5,104(s0) if (i->i_cache_prev) 4000277c: 00070663 beqz a4,40002788 <== NEVER TAKEN i->i_cache_prev->i_cache_next = i->i_cache_next; 40002780: 06f72423 sw a5,104(a4) # 1068 <_ISR_Stack_size+0x68> if (i->i_cache_next) 40002784: 06842783 lw a5,104(s0) 40002788: 00078463 beqz a5,40002790 i->i_cache_next->i_cache_prev = i->i_cache_prev; 4000278c: 06e7a223 sw a4,100(a5) jffs2_do_clear_inode(c, f); 40002790: 04042503 lw a0,64(s0) parent = i->i_parent; 40002794: 03442483 lw s1,52(s0) jffs2_do_clear_inode(c, f); 40002798: 04840593 addi a1,s0,72 4000279c: 6b5050ef jal ra,40008650 free(i); 400027a0: 00040513 mv a0,s0 400027a4: 7310a0ef jal ra,4000d6d4 if (parent && parent != i) { 400027a8: 00048863 beqz s1,400027b8 400027ac: 00940663 beq s0,s1,400027b8 400027b0: 00048413 mv s0,s1 400027b4: fa1ff06f j 40002754 } 400027b8: 00c12083 lw ra,12(sp) 400027bc: 00812403 lw s0,8(sp) 400027c0: 00412483 lw s1,4(sp) 400027c4: 01010113 addi sp,sp,16 400027c8: 00008067 ret icache_evict(i->i_sb->s_root, i); 400027cc: 04042783 lw a5,64(s0) 400027d0: 00040593 mv a1,s0 } 400027d4: 00812403 lw s0,8(sp) 400027d8: 00c12083 lw ra,12(sp) 400027dc: 00412483 lw s1,4(sp) icache_evict(i->i_sb->s_root, i); 400027e0: 0e07a503 lw a0,224(a5) } 400027e4: 01010113 addi sp,sp,16 icache_evict(i->i_sb->s_root, i); 400027e8: b7cff06f j 40001b64 BUG(); 400027ec: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 400027f0: 4001d637 lui a2,0x4001d <== NOT EXECUTED 400027f4: 4001d537 lui a0,0x4001d <== NOT EXECUTED 400027f8: a1868693 addi a3,a3,-1512 # 4001ca18 <== NOT EXECUTED 400027fc: 0a460613 addi a2,a2,164 # 4001d0a4 <__func__.0> <== NOT EXECUTED 40002800: 5a800593 li a1,1448 <== NOT EXECUTED 40002804: fc450513 addi a0,a0,-60 # 4001cfc4 <== NOT EXECUTED 40002808: 2990a0ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED assert(i != NULL); 4000280c: 4001d6b7 lui a3,0x4001d <== NOT EXECUTED 40002810: 4001d637 lui a2,0x4001d <== NOT EXECUTED 40002814: 4001d537 lui a0,0x4001d <== NOT EXECUTED 40002818: fb868693 addi a3,a3,-72 # 4001cfb8 <== NOT EXECUTED 4000281c: 0a460613 addi a2,a2,164 # 4001d0a4 <__func__.0> <== NOT EXECUTED 40002820: 5a300593 li a1,1443 <== NOT EXECUTED 40002824: fc450513 addi a0,a0,-60 # 4001cfc4 <== NOT EXECUTED 40002828: 2790a0ef jal ra,4000d2a0 <__assert_func> <== NOT EXECUTED =============================================================================== 400054d4 : /* Pass 'c' argument to indicate that nodes should be marked obsolete as they're killed. */ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c) { 400054d4: ff010113 addi sp,sp,-16 400054d8: 01212023 sw s2,0(sp) 400054dc: 00058913 mv s2,a1 struct jffs2_node_frag *frag, *next; dbg_fragtree("killing\n"); rbtree_postorder_for_each_entry_safe(frag, next, root, rb) { 400054e0: 00000593 li a1,0 { 400054e4: 00812423 sw s0,8(sp) 400054e8: 00112623 sw ra,12(sp) 400054ec: 00912223 sw s1,4(sp) rbtree_postorder_for_each_entry_safe(frag, next, root, rb) { 400054f0: 2180f0ef jal ra,40014708 <_RBTree_Postorder_first> 400054f4: 00050413 mv s0,a0 400054f8: 04050c63 beqz a0,40005550 400054fc: 00040513 mv a0,s0 40005500: 00000593 li a1,0 40005504: 1c40f0ef jal ra,400146c8 <_RBTree_Postorder_next> if (frag->node && !(--frag->node->frags)) { 40005508: 01042783 lw a5,16(s0) 4000550c: 00040493 mv s1,s0 rbtree_postorder_for_each_entry_safe(frag, next, root, rb) { 40005510: 00050413 mv s0,a0 if (frag->node && !(--frag->node->frags)) { 40005514: 02078863 beqz a5,40005544 <== NEVER TAKEN 40005518: 00c7a703 lw a4,12(a5) 4000551c: fff70713 addi a4,a4,-1 40005520: 00e7a623 sw a4,12(a5) 40005524: 02071063 bnez a4,40005544 <== NEVER TAKEN /* Not a hole, and it's the final remaining frag of this node. Free the node */ if (c) jffs2_mark_node_obsolete(c, frag->node->raw); 40005528: 00090513 mv a0,s2 if (c) 4000552c: 00090863 beqz s2,4000553c jffs2_mark_node_obsolete(c, frag->node->raw); 40005530: 0007a583 lw a1,0(a5) 40005534: 568000ef jal ra,40005a9c jffs2_free_full_dnode(frag->node); 40005538: 0104a783 lw a5,16(s1) 4000553c: 00078513 mv a0,a5 40005540: b44ff0ef jal ra,40004884 } jffs2_free_node_frag(frag); 40005544: 00048513 mv a0,s1 40005548: c54ff0ef jal ra,4000499c rbtree_postorder_for_each_entry_safe(frag, next, root, rb) { 4000554c: fa0418e3 bnez s0,400054fc cond_resched(); } } 40005550: 00c12083 lw ra,12(sp) 40005554: 00812403 lw s0,8(sp) 40005558: 00412483 lw s1,4(sp) 4000555c: 00012903 lw s2,0(sp) 40005560: 01010113 addi sp,sp,16 40005564: 00008067 ret =============================================================================== 4000aaf8 : /***********************************************************************/ int jffs2_link (struct _inode *old_d_inode, struct _inode *dir_i, const unsigned char *d_name, size_t d_namelen) { 4000aaf8: fe010113 addi sp,sp,-32 4000aafc: 00812c23 sw s0,24(sp) struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_d_inode); struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i); int ret; /* XXX: This is ugly */ uint8_t type = (old_d_inode->i_mode & S_IFMT) >> 12; 4000ab00: 00852403 lw s0,8(a0) { 4000ab04: 00912a23 sw s1,20(sp) 4000ab08: 01212823 sw s2,16(sp) uint8_t type = (old_d_inode->i_mode & S_IFMT) >> 12; 4000ab0c: 00c45413 srli s0,s0,0xc { 4000ab10: 01312623 sw s3,12(sp) 4000ab14: 01412423 sw s4,8(sp) 4000ab18: 01512223 sw s5,4(sp) 4000ab1c: 00112e23 sw ra,28(sp) 4000ab20: 01612023 sw s6,0(sp) uint8_t type = (old_d_inode->i_mode & S_IFMT) >> 12; 4000ab24: 00f47413 andi s0,s0,15 struct jffs2_sb_info *c = JFFS2_SB_INFO(old_d_inode->i_sb); 4000ab28: 04052a83 lw s5,64(a0) { 4000ab2c: 00050493 mv s1,a0 4000ab30: 00060993 mv s3,a2 4000ab34: 00068a13 mv s4,a3 struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i); 4000ab38: 04858913 addi s2,a1,72 if (!type) type = DT_REG; 4000ab3c: 00041463 bnez s0,4000ab44 <== ALWAYS TAKEN 4000ab40: 00800413 li s0,8 <== NOT EXECUTED ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, 4000ab44: 05c4a783 lw a5,92(s1) (const char * )d_name, d_namelen, get_seconds()); 4000ab48: 00000513 li a0,0 ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, 4000ab4c: 00c7ab03 lw s6,12(a5) d_namelen, get_seconds()); 4000ab50: 469110ef jal ra,4001c7b8