There was defect for zfs-based backend when traverse directory:
the dt_iteration API ::load() did not locate the cursor to the
specified position, then caused non-first directory readpage
RPC obtained repeated entries, and then caused readdir() loop
or unexpected dir hash collision.
Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I9c159f0f80677590869246dd9f30f0dfb9cc2fbc
Reviewed-on: http://review.whamcloud.com/5894
Tested-by: Hudson
Reviewed-by: Li Wei <wei.g.li@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
int rc;
ENTRY;
- if (it->ozi_pos != 0) {
- /* the cursor wasn't at the beginning
- * so we should reset ZAP cursor as well */
- udmu_zap_cursor_fini(it->ozi_zc);
- if (udmu_zap_cursor_init(&it->ozi_zc, &osd->od_objset,
- obj->oo_db->db_object, hash))
- RETURN(-ENOMEM);
- }
+ udmu_zap_cursor_fini(it->ozi_zc);
+ if (udmu_zap_cursor_init(&it->ozi_zc, &osd->od_objset,
+ obj->oo_db->db_object, hash))
+ RETURN(-ENOMEM);
if (hash <= 2) {
it->ozi_pos = hash;