On 2020/03/22 3:49, Waiman Long wrote: > + do { > + if (ret > key_data_len) { > + if (unlikely(key_data)) > + __kvzfree(key_data, key_data_len); > + key_data_len = ret; > + continue; /* Allocate buffer */ Excuse me, but "continue;" inside "do { ... } while (0);" means "break;" because "while (0)" is evaluated before continuing the loop. ---------- #include <stdio.h> int main(int argc, char *argv[]) { do { printf("step 1\n"); if (1) { printf("step 2\n"); continue; } printf("step 3\n"); } while (0); printf("step 4\n"); return 0; } ---------- ---------- step 1 step 2 step 4 ---------- > + } > + } while (0);