void ntfs_read_inode_mount (struct inode * vi);
Read inode FILE_MFT at mount time, only called with super_block lock held from within the read_super code path.
This function exists because when it is called the page cache for $MFT/$DATA is not initialized and hence we cannot get at the contents of mft records by calling map_mft_record*().
Further it needs to cope with the circular references problem, i.e. can't load any attributes other than $ATTRIBUTE_LIST until $DATA is loaded, because we don't know where the other extent mft records are yet and again, because we cannot call map_mft_record*() yet. Obviously this applies only when an attribute list is actually present in $MFT inode.
We solve these problems by starting with the $DATA attribute before anything else and iterating using lookup_attr($DATA) over all extents. As each extent is found, we decompress_mapping_pairs including the implied merge_run_lists. Each step of the iteration necessarily provides sufficient information for the next step to complete.
This should work but there are two possible pit falls (see inline comments below), but only time will tell if they are real pits or just smoke...