[PATCH] [CHECKER] More robust error recovery in add_index (3 of 4)
[email protected] Mon, 10 May 2004 15:04:14 -0500
| Newsgroups | gmane.comp.file-systems.jfs.patches |
|---|---|
| Message-ID | <[email protected]> |
# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/05/07 16:05:39-05:00 [email protected] # JFS: [CHECKER] More robust error recovery in add_index # # If an error is encountered in add_index, it now leaves the index table # in a consistent state. Since the return value is stored in the # directory entry regardless of add_index's success, return zero # instead of -EPERM (which made no sense). # diff -Nru a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c --- a/fs/jfs/jfs_dtree.c Mon May 10 14:56:12 2004 +++ b/fs/jfs/jfs_dtree.c Mon May 10 14:56:12 2004 @@ -342,7 +342,6 @@ struct metapage *mp; s64 offset; uint page_offset; - int rc; struct tlock *tlck; s64 xaddr; @@ -396,11 +395,11 @@ * Allocate the first block & add it to the xtree */ xaddr = 0; - if ((rc = - xtInsert(tid, ip, 0, 0, sbi->nbperpage, - &xaddr, 0))) { + if (xtInsert(tid, ip, 0, 0, sbi->nbperpage, &xaddr, 0)) { jfs_warn("add_index: xtInsert failed!"); - return -EPERM; + memcpy(&jfs_ip->i_dirtable, temp_table, + sizeof (temp_table)); + goto clean_up; } ip->i_size = PSIZE; ip->i_blocks += LBLK2PBLK(sb, sbi->nbperpage); @@ -408,7 +407,9 @@ if ((mp = get_index_page(ip, 0)) == 0) { jfs_err("add_index: get_metapage failed!"); xtTruncate(tid, ip, 0, COMMIT_PWMAP); - return -EPERM; + memcpy(&jfs_ip->i_dirtable, temp_table, + sizeof (temp_table)); + goto clean_up; } tlck = txLock(tid, ip, mp, tlckDATA); llck = (struct linelock *) & tlck->lock; @@ -438,12 +439,9 @@ * This will be the beginning of a new page */ xaddr = 0; - if ((rc = - xtInsert(tid, ip, 0, blkno, sbi->nbperpage, - &xaddr, 0))) { + if (xtInsert(tid, ip, 0, blkno, sbi->nbperpage, &xaddr, 0)) { jfs_warn("add_index: xtInsert failed!"); - jfs_ip->next_index--; - return -EPERM; + goto clean_up; } ip->i_size += PSIZE; ip->i_blocks += LBLK2PBLK(sb, sbi->nbperpage); @@ -457,7 +455,7 @@ if (mp == 0) { jfs_err("add_index: get/read_metapage failed!"); - return -EPERM; + goto clean_up; } lock_index(tid, ip, mp, index); @@ -472,6 +470,12 @@ release_metapage(mp); return index; + + clean_up: + + jfs_ip->next_index--; + + return 0; } /*