estructuras de datos – cannot convert ‘filtro*’ to ‘FILTRO*{aka fil*}’ in assigment (C)


la cosa esta en que tengo ciertas Estructuras de Datos creadas en una librería, y aunque las funciones para añadir al final de la lista son iguales cambiando los nombres para las diferentes ED es solo con una en concreto (FILTRO) con la que me salta el error. Esto me pasa cuando intento sobrescribir un filtro para que se convierta en otro (Mas detalladamente, la función problemática me da dos fallos: cannot convert ‘filtro*’ to ‘FILTRO*{aka fil*}’ in assigment Y cannot convert ‘FILTRO*{aka fil*}’ to ‘filtro*’ in assigment):

ED que me causa los problemas:

typedef struct fil {
    COLUMNA * pCol;         //puntero a la columna
    OPERANDO operador;      //operación a realizar
    char *valor;            //valor a aplicar
    struct filtro *next;    //puntero al siguiente filtro
} FILTRO; 

ED con funciones identicas pero que no me causa problemas:

typedef struct etiq {
    char *etiqueta;             //nombre de la etiqueta (texto)
    int cuenta;                 //veces que la etiqueta se repite
    struct etiq * siguiente;    //puntero siguiente etiqueta
} ETIQUETA;

La funcion que hace que salte el error:

void insertarFinalFil(FILTROS* filtros, COLUMNA* col, char operador(), char *valor){
    FILTRO* filtro = generaFiltro(col, operador, valor);
    if(filtros->p == NULL){
        filtros->p = filtro;
    }else{
        FILTRO* puntero = filtros->p;
        while(puntero->next){
            puntero = puntero->next;
        }
        puntero->next = filtro;
    }
} 

Funcion similar que funciona sí que compila:

void insertarFinalEtiq(COLUMNA* columna, char *nombre){
    ETIQUETA* etiq = crearEtiqueta(nombre);
    if(columna->lista == NULL){
        columna->lista = etiq;
    }else{
        ETIQUETA* puntero = columna->lista;
        while(puntero->siguiente){
            puntero = puntero->siguiente;
        }
        puntero->siguiente = etiq;
    }
}