Tenés que pensar que hay dos capas, en una capa de almacenamiento tenemos que saber los bloques que tiene cada archivo. A ese nivel ni nos importa como se llama el archivo, solo que tiene cierto tamaño y que está ocupando ciertos bloques. Esa capa podría estar implementada con inodos, fat, asignación contigua, etc.
Por encima de esa tenés la capa que maneja los archivos y directorios. Ahí tenés que saber el nombre del archivo, los permisos, etc y una referencia a la capa de abajo para saber donde están los bloques. Esa referencia puede ser un número de inodo o el primer bloque en caso de fat, etc. Podés pensar que los directorios son archivos pero que en lugar de contener datos del usuario contienen dir_entries. Se almacenan igual que los archivos comunes usando la capa de abajo que corresponda. Entonces el dir_entry para un directorio D va a tener una referencia a donde están los bloques donde se guardan las dir_entries de ese directorio (es una estructura de árbol) y a su vez esos dir_entries van a indicar los archivos y directorios que hay adentro del directorio D.
Un detalle más que capaz que te confunde: en general un inodo no tendría por que saber si lo que está guardando es un archivo o un directorio y en la práctica seguramente no lo sepa. En este ejercicio esa información está "duplicada" en el inodo para facilitar la implementación de la parte 1. Si querés pensá como habría que hacerlo si esta información no estuviera también en el inodo.
No me da para hacer un dibujo acá pero si tenés más dudas mejor que preguntes en el práctico.
Saludos