Lines Matching refs:nsi

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