|
@@ -456,17 +456,8 @@ static int ext3_dx_readdir(struct file * filp,
|
|
|
if (info->extra_fname) {
|
|
|
if (call_filldir(filp, dirent, filldir, info->extra_fname))
|
|
|
goto finished;
|
|
|
-
|
|
|
info->extra_fname = NULL;
|
|
|
- info->curr_node = rb_next(info->curr_node);
|
|
|
- if (!info->curr_node) {
|
|
|
- if (info->next_hash == ~0) {
|
|
|
- filp->f_pos = EXT3_HTREE_EOF;
|
|
|
- goto finished;
|
|
|
- }
|
|
|
- info->curr_hash = info->next_hash;
|
|
|
- info->curr_minor_hash = 0;
|
|
|
- }
|
|
|
+ goto next_node;
|
|
|
} else if (!info->curr_node)
|
|
|
info->curr_node = rb_first(&info->root);
|
|
|
|
|
@@ -498,9 +489,14 @@ static int ext3_dx_readdir(struct file * filp,
|
|
|
info->curr_minor_hash = fname->minor_hash;
|
|
|
if (call_filldir(filp, dirent, filldir, fname))
|
|
|
break;
|
|
|
-
|
|
|
+ next_node:
|
|
|
info->curr_node = rb_next(info->curr_node);
|
|
|
- if (!info->curr_node) {
|
|
|
+ if (info->curr_node) {
|
|
|
+ fname = rb_entry(info->curr_node, struct fname,
|
|
|
+ rb_hash);
|
|
|
+ info->curr_hash = fname->hash;
|
|
|
+ info->curr_minor_hash = fname->minor_hash;
|
|
|
+ } else {
|
|
|
if (info->next_hash == ~0) {
|
|
|
filp->f_pos = EXT3_HTREE_EOF;
|
|
|
break;
|