lfs_migrate() bypasses llapi_create_volatile_idx() and creates a volatile file directly. (It does this because it needs to create the volatile file with a specific striping and llapi_create_volatile_idx() does not allow us to pass in striping.) It should do as llapi_create_volatile_idx() does and try to unlink the volatile file after opening it (in case volatile file creation is not supported).
Or we could add O_LOV_DELAY_CREATE to the open flags and use llapi_create_volatile_idx() but then we would need a function to apply the striping described by a struct llapi_stripe_param to an open file handle.