.ctx.actor = nfsd4_build_namelist,
                .names = LIST_HEAD_INIT(ctx.names)
        };
+       struct name_list *entry, *tmp;
        int status;
 
        status = nfs4_save_creds(&original_cred);
 
        status = iterate_dir(nn->rec_file, &ctx.ctx);
        mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
-       while (!list_empty(&ctx.names)) {
-               struct name_list *entry;
-               entry = list_entry(ctx.names.next, struct name_list, list);
+
+       list_for_each_entry_safe(entry, tmp, &ctx.names, list) {
                if (!status) {
                        struct dentry *dentry;
                        dentry = lookup_one_len(entry->name, dir, HEXDIR_LEN-1);
        }
        mutex_unlock(&d_inode(dir)->i_mutex);
        nfs4_reset_creds(original_cred);
+
+       list_for_each_entry_safe(entry, tmp, &ctx.names, list) {
+               dprintk("NFSD: %s. Left entry %s\n", __func__, entry->name);
+               list_del(&entry->list);
+               kfree(entry);
+       }
        return status;
 }