Lines Matching refs:nsi
98 int nsinfo__init(struct nsinfo *nsi)
110 if (asprintf(&newns, "/proc/%d/ns/mnt", nsinfo__pid(nsi)) == -1)
123 RC_CHK_ACCESS(nsi)->need_setns = true;
124 RC_CHK_ACCESS(nsi)->mntns_path = newns;
131 if (snprintf(spath, PATH_MAX, "/proc/%d/status", nsinfo__pid(nsi)) >= PATH_MAX)
134 rv = nsinfo__get_nspid(&RC_CHK_ACCESS(nsi)->tgid, &RC_CHK_ACCESS(nsi)->nstgid,
135 &RC_CHK_ACCESS(nsi)->in_pidns, spath);
145 RC_STRUCT(nsinfo) *nsi;
147 nsi = calloc(1, sizeof(*nsi));
148 if (ADD_RC_CHK(res, nsi))
149 refcount_set(&nsi->refcnt, 1);
156 struct nsinfo *nsi;
161 nsi = nsinfo__alloc();
162 if (!nsi)
165 RC_CHK_ACCESS(nsi)->pid = pid;
166 RC_CHK_ACCESS(nsi)->tgid = pid;
167 RC_CHK_ACCESS(nsi)->nstgid = pid;
168 nsinfo__clear_need_setns(nsi);
169 RC_CHK_ACCESS(nsi)->in_pidns = false;
174 if (nsinfo__init(nsi) == -1)
175 nsinfo__clear_need_setns(nsi);
177 return nsi;
180 static const char *nsinfo__mntns_path(const struct nsinfo *nsi)
182 return RC_CHK_ACCESS(nsi)->mntns_path;
185 struct nsinfo *nsinfo__copy(const struct nsinfo *nsi)
189 if (nsi == NULL)
196 RC_CHK_ACCESS(nnsi)->pid = nsinfo__pid(nsi);
197 RC_CHK_ACCESS(nnsi)->tgid = nsinfo__tgid(nsi);
198 RC_CHK_ACCESS(nnsi)->nstgid = nsinfo__nstgid(nsi);
199 RC_CHK_ACCESS(nnsi)->need_setns = nsinfo__need_setns(nsi);
200 RC_CHK_ACCESS(nnsi)->in_pidns = nsinfo__in_pidns(nsi);
201 if (nsinfo__mntns_path(nsi)) {
202 RC_CHK_ACCESS(nnsi)->mntns_path = strdup(nsinfo__mntns_path(nsi));
212 static refcount_t *nsinfo__refcnt(struct nsinfo *nsi)
214 return &RC_CHK_ACCESS(nsi)->refcnt;
217 static void nsinfo__delete(struct nsinfo *nsi)
219 if (nsi) {
220 WARN_ONCE(refcount_read(nsinfo__refcnt(nsi)) != 0, "nsinfo refcnt unbalanced\n");
221 zfree(&RC_CHK_ACCESS(nsi)->mntns_path);
222 RC_CHK_FREE(nsi);
226 struct nsinfo *nsinfo__get(struct nsinfo *nsi)
230 if (RC_CHK_GET(result, nsi))
231 refcount_inc(nsinfo__refcnt(nsi));
236 void nsinfo__put(struct nsinfo *nsi)
238 if (nsi && refcount_dec_and_test(nsinfo__refcnt(nsi)))
239 nsinfo__delete(nsi);
241 RC_CHK_PUT(nsi);
244 bool nsinfo__need_setns(const struct nsinfo *nsi)
246 return RC_CHK_ACCESS(nsi)->need_setns;
249 void nsinfo__clear_need_setns(struct nsinfo *nsi)
251 RC_CHK_ACCESS(nsi)->need_setns = false;
254 pid_t nsinfo__tgid(const struct nsinfo *nsi)
256 return RC_CHK_ACCESS(nsi)->tgid;
259 pid_t nsinfo__nstgid(const struct nsinfo *nsi)
261 return RC_CHK_ACCESS(nsi)->nstgid;
264 pid_t nsinfo__pid(const struct nsinfo *nsi)
266 return RC_CHK_ACCESS(nsi)->pid;
269 pid_t nsinfo__in_pidns(const struct nsinfo *nsi)
271 return RC_CHK_ACCESS(nsi)->in_pidns;
274 void nsinfo__mountns_enter(struct nsinfo *nsi,
288 if (!nsi || !nsinfo__need_setns(nsi))
302 newns = open(nsinfo__mntns_path(nsi), O_RDONLY);
345 char *nsinfo__realpath(const char *path, struct nsinfo *nsi)
350 nsinfo__mountns_enter(nsi, &nsc);
357 int nsinfo__stat(const char *filename, struct stat *st, struct nsinfo *nsi)
362 nsinfo__mountns_enter(nsi, &nsc);