diff options
-rw-r--r-- | fs/ext4/ext4_common.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index e78185b53b..699a640d2d 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -854,34 +854,35 @@ fail: static int unlink_filename(char *filename, unsigned int blknr) { - int totalbytes = 0; int templength = 0; int status, inodeno; int found = 0; - char *root_first_block_buffer = NULL; + int offset; + char *block_buffer = NULL; struct ext2_dirent *dir = NULL; struct ext2_dirent *previous_dir = NULL; char *ptr = NULL; struct ext_filesystem *fs = get_fs(); int ret = -1; - /* get the first block of root */ - root_first_block_buffer = zalloc(fs->blksz); - if (!root_first_block_buffer) + block_buffer = zalloc(fs->blksz); + if (!block_buffer) return -ENOMEM; + + /* read the directory block */ status = ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, - fs->blksz, root_first_block_buffer); + fs->blksz, block_buffer); if (status == 0) goto fail; - if (ext4fs_log_journal(root_first_block_buffer, blknr)) + if (ext4fs_log_journal(block_buffer, blknr)) goto fail; - dir = (struct ext2_dirent *)root_first_block_buffer; + dir = (struct ext2_dirent *)block_buffer; ptr = (char *)dir; - totalbytes = 0; + offset = 0; while (le16_to_cpu(dir->direntlen) >= 0) { /* - * blocksize-totalbytes because last + * blocksize-offset because last * directory length i.e., *dir->direntlen * is free availble space in the block that * means it is a last entry of directory entry @@ -903,12 +904,12 @@ static int unlink_filename(char *filename, unsigned int blknr) break; } - if (fs->blksz - totalbytes == le16_to_cpu(dir->direntlen)) + if (fs->blksz - offset == le16_to_cpu(dir->direntlen)) break; /* traversing the each directory entry */ templength = le16_to_cpu(dir->direntlen); - totalbytes = totalbytes + templength; + offset = offset + templength; previous_dir = dir; dir = (struct ext2_dirent *)((char *)dir + templength); ptr = (char *)dir; @@ -916,12 +917,12 @@ static int unlink_filename(char *filename, unsigned int blknr) if (found == 1) { - if (ext4fs_put_metadata(root_first_block_buffer, blknr)) + if (ext4fs_put_metadata(block_buffer, blknr)) goto fail; ret = inodeno; } fail: - free(root_first_block_buffer); + free(block_buffer); return ret; } |