+ struct list_head *prev = cur->prev;
+ struct list_head *next;
+ if ((u8*)prev >= (u8*)(ads_entry + 1)
+ && (u8*)prev < (u8*)(ads_entry + following + 1)) {
+ cur->prev = (struct list_head*)((u8*)prev - sizeof(struct ads_entry));
+ } else {
+ prev->next = cur;
+ }
+ next = cur->next;
+ if ((u8*)next >= (u8*)(ads_entry + 1)
+ && (u8*)next < (u8*)(ads_entry + following + 1)) {
+ cur->next = (struct list_head*)((u8*)next - sizeof(struct ads_entry));
+ } else {
+ next->prev = cur;
+ }