+int llapi_fid2path_at(int mnt_fd, const struct lu_fid *fid,
+ char *path_buf, int path_buf_size,
+ long long *recno, int *linkno)
+{
+ struct getinfo_fid2path *gf = NULL;
+ int rc;
+
+ gf = calloc(1, sizeof(*gf) + path_buf_size);
+ if (gf == NULL) {
+ rc = -ENOMEM;
+ goto out;
+ }
+
+ gf->gf_fid = *fid;
+ if (recno != NULL)
+ gf->gf_recno = *recno;
+
+ if (linkno != NULL)
+ gf->gf_linkno = *linkno;
+
+ gf->gf_pathlen = path_buf_size;
+
+ rc = ioctl(mnt_fd, OBD_IOC_FID2PATH, gf);
+ if (rc) {
+ rc = -errno;
+ goto out;
+ }
+
+ rc = copy_strip_dne_path(gf->gf_u.gf_path, path_buf, path_buf_size);
+
+ if (recno != NULL)
+ *recno = gf->gf_recno;
+
+ if (linkno != NULL)
+ *linkno = gf->gf_linkno;
+out:
+ free(gf);
+
+ return rc;
+}
+