Ola estou com um problema de lista duplamente encadeada em c de ordena uma lista duplamente encadeada com insertionSort

struct lista{
int v;
struct lista* prox;
struct lista* ant;
};
typedef struct lista Lista;
//funcao de inserir
Lista* insere(Lista* l,int v){
Lista* novo =(Lista*)malloc(sizeof(Lista));

novo->v = v;
novo->prox = l;
novo->ant = NULL;
if(l != NULL)
	l->ant = novo;

return novo;

}
//imprime a lista
void imprime(Lista* l){
Lista* p = l;
for(p = l;p != NULL; p = p->prox){
printf("%d\n",p->v);
}
}
//funcao de ordenar a lista com inserion sort
void insertionSort(Lista* l){

Lista *p = l;//ponteiro q guarda a refericia para lista duplamente
Lista *q;//ponteiro auxliar 

int aux;//auxiliar  paraguarda o valor para comparar 

while(p->prox != NULL ){
	 p = p->prox;
					       
		
	  q = p;
		aux = p->v;

    while(q->ant != NULL && q->v > aux){// aqui era para ordenar os valores
			q->ant->v = q->v;//aqui nao esto sabendo oq bota acho q errado isso?

		}
		q->v = aux;aqui era para passa  valor para auxilia?


		

			
	
}

}