summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobi <robi>2012-09-21 18:17:28 +0000
committerrobi <robi>2012-09-21 18:17:28 +0000
commit9acf75eb6172c328c86205bf246dc41637d977b3 (patch)
treea2a7460b49eae45c7f1b93b7177c136402815aba /src
parent253e59bbf380d809985161b5f97162eacdab8d90 (diff)
Bug: #18730 exception Handling
Diffstat (limited to 'src')
-rw-r--r--src/inode.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/inode.c b/src/inode.c
index 88642ac..210752e 100644
--- a/src/inode.c
+++ b/src/inode.c
@@ -745,6 +745,18 @@ struct ring_buf* get_j_inode_list(struct ext2_super_block *es, ext2_ino_t inode_
#endif
continue;
}
+//Correct d_time anomalies if directory delete process not completed BUG: #18730
+ if ((LINUX_S_ISDIR(ext2fs_le16_to_cpu(inode_pointer->i_mode))) &&
+ ext2fs_le32_to_cpu(inode_pointer->i_dtime) && ext2fs_le32_to_cpu(inode_pointer->i_blocks) &&
+ ext2fs_le32_to_cpu(inode_pointer->i_size) && (!ext2fs_le16_to_cpu(inode_pointer->i_links_count)) &&
+ ext2fs_le32_to_cpu(inode_pointer->i_ctime) != ext2fs_le32_to_cpu(inode_pointer->i_dtime)){
+ if ( buf->count && LINUX_S_ISDIR(item->inode->i_mode) && item->inode->i_blocks){
+ continue;
+ }
+ else{
+ inode_pointer->i_dtime = 0;
+ }
+ }
//inode with the same ctime + the same size and links and <= block_count, skipped
if (ext2fs_le32_to_cpu(inode_pointer->i_ctime) == ctime){
if (item) {