yes, dirty data block are written in commit_write. it is a function pointer in a struct address_space_operations. in ext2, this a_ops is defined in fs/ext2/inode.c as ext2_aops. it uses the generic_commit_write() defined in fs/buffer.c. generic_commit_write simply marks the bh as dirty and lower block layer will handle it and write to disk later.
about page, bh, and block (what u block means?), u had better read some doc. i can not describe it clearly here.