This is more portable and provides more stable results than
/proc/cpuinfo.
Fixes: https://github.com/karelzak/util-linux/pull/1317
Co-Author: Thomas Weißschuh
Signed-off-by: Karel Zak <kzak@redhat.com>
The tree of *parent* and *owner* could be forests because *lsns*
cannot track a namespace having no process.
This change tries interpolating the missing namespaces by calling
ioctl(NS_GET_PARENT) and ioctl(NS_GET_USERNS) recursively.
The original output for -Tparent:
# ./lsns -Tparent
NS TYPE NPROCS PID USER COMMAND
4026531837 user 404 1 root /usr/lib/systemd/sy
├─4026532508 user 1 29376 yamato /usr/lib64/firefox/
...
└─4026533513 user 1 24245 yamato /usr/lib64/firefox/
...
4026533733 user 1 30839 yamato /opt/google/chrome-
4026533734 user 15 10076 yamato /opt/google/chrome-
user namespaces 4026533733 and 4026533734 are orphans.
lsns could not find their parents.
With this change:
# ./lsns-with-changes -Tparent
NS TYPE NPROCS PID USER COMMAND
4026531837 user 404 1 root /usr/lib/systemd/
├─4026532508 user 1 29376 yamato /usr/lib64/firefo
...
├─4026532639 user 0
│ ├─4026532637 user 0
│ │ └─4026533733 user 1 30839 yamato /opt/google/chrom
│ └─4026533734 user 14 10076 yamato /opt/google/chrom
Now user namespaces 4026533733 and 4026533734 are integrated to the
tree. lsns interpolates the missing namespace 4026532639 and
4026532637 for the integration.
The original output for -Towner:
# ./lsns -Towner
NS TYPE NPROCS PID USER COMMAND
4026531837 user 405 1 root /usr/lib/systemd/s
├─4026531835 cgroup 431 1 root /usr/lib/systemd/s
...
4026532638 pid 1 30839 yamato /opt/google/chrome
4026532640 pid 2 30837 yamato /opt/google/chrome
...
pid namespaces 4026532638 and 4026532640 are orphans.
lsns could not find their owners.
With this change:
# ./lsns-with-changes -Towner
NS TYPE NPROCS PID USER COMMAND
4026531837 user 403 1 root /usr/lib/systemd
├─4026531835 cgroup 429 1 root /usr/lib/systemd
...
├─4026532639 user 0
...
│ ├─4026532637 user 0
│ │ ├─4026532638 pid 1 30839 yamato /opt/google/chro
│ │ ├─4026533638 net 1 30839 yamato /opt/google/chro
│ │ └─4026533733 user 1 30839 yamato /opt/google/chro
│ ├─4026532640 pid 2 30837 yamato /opt/google/chro
Now pid namespaces 4026532638 and 4026532640 are integrated to the
tree. lsns interpolates the missing namespace 4026532639 and
4026532637 for the integration.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
This is a preparation change for planed "tree interpolation" patch.
parentid, ownerid, parentns, and ownerns were members of
lsns_namespace struct. When interpolating missing namespaces
for building a unified name space tree, duplicated functions
are needed; one is for parentid and parentns members, and
another is for ownerid and ownerns members. To avoid the
duplication, this change unifies the members as following:
parentid and ownerid => related_id [2]
parentns and ownerns => related_ns [2]
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
We cannot overwrite superblock magic in a sequential required zone. So,
wipefs cannot work as it is. Instead, this commit implements the wiping by
zone resetting.
Zone resetting must be done only for a sequential write zone. This is
checked by is_conventional().
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
This commit adds zone-aware magics and probing functions for zoned btrfs.
The superblock (and its copies) are the only data structure in btrfs with a
fixed location on a device. Since we cannot do overwrites in a sequential
write required zone, we cannot place the superblock in the zone.
Thus, zoned btrfs uses superblock log writing to update superblocks on
sequential write required zones. It uses two zones as a circular buffer to
write updated superblocks. Once the first zone is filled up, start writing
into the second buffer. When both zones are filled up, and before starting
to write to the first zone again, it reset the first zone.
We can determine the position of the latest superblock by reading the write
pointer information from a device. One corner case is when both zones are
full. For this situation, we read out the last superblock of each zone and
compare them to determine which zone is older.
The magics can detect a superblock magic ("_BHRfs_M") at the beginning of
zone #0 or zone #1 to see if it is zoned btrfs. When both zones are filled
up, zoned btrfs resets the first zone to write a new superblock. If btrfs
crashes at the moment, we do not see a superblock at zone #0. Thus, we need
to check not only zone #0 but also zone #1.
It also supports the temporary magic ("!BHRfS_M") in zone #0. Mkfs.btrfs
first writes the temporary superblock to the zone during the mkfs process.
It will survive there until the zones are filled up and reset. So, we also
need to detect this temporary magic.
Finally, this commit extends probe_btrfs() to load the latest superblock
determined by the write pointers.
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
This patch makes libblkid zone-aware. It can probe the magic located at
some offset from the beginning of some specific zone of a device.
This patch introduces some new fields to struct blkid_idmag. They indicate
the magic location is placed related to a zone and the offset in the zone.
Also, this commit introduces `zone_size` to struct blkid_struct_probe. It
stores the size of zones of a device.
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
* make --tree=process default for 'lsns' and 'lsns <ns>'
* remove 'list' from struct lsns
* update man page
Addresses: https://github.com/karelzak/util-linux/pull/1281
Signed-off-by: Karel Zak <kzak@redhat.com>
Suggested by Karel Zak.
`--tree` option is introduced as replacement for `--nstree`.
In addition to `parent` and `owner`, `--tree` take `process` as the
option argument.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Introduce new option -T[parent|owner]|--nstree[=parent|=owner].
With this change, lsns prints parent/child relationship tree if
"-T parent" is given and owner/owned relationship tree if "-T owner is given.
Passing only "-T" is same as passing "-Towner."
Example sessions:
# ./lsns -Tparent -ons,type,pns| head -20
NS TYPE PNS
4026531837 user 0
├─4026532508 user 4026531837
├─4026532609 user 4026531837
├─4026532610 user 4026531837
├─4026532629 user 4026531837
├─4026532705 user 4026531837
├─4026532901 user 4026531837
├─4026533090 user 4026531837
├─4026533185 user 4026531837
├─4026533280 user 4026531837
└─4026533468 user 4026531837
4026531835 cgroup 0
4026531836 pid 0
└─4026533038 pid 4026531836
├─4026532934 pid 4026533038
├─4026533715 pid 4026533038
├─4026533716 pid 4026533038
...
# ./lsns -Towner -ons,type,ons| head -20
NS TYPE ONS
4026531837 user 0
├─4026531835 cgroup 4026531837
├─4026531836 pid 4026531837
├─4026531838 uts 4026531837
├─4026531839 ipc 4026531837
├─4026531840 mnt 4026531837
├─4026531861 mnt 4026531837
├─4026532001 net 4026531837
├─4026532219 mnt 4026531837
├─4026532357 mnt 4026531837
├─4026532383 net 4026531837
├─4026532475 mnt 4026531837
├─4026532476 mnt 4026531837
├─4026532504 mnt 4026531837
├─4026532508 user 4026531837
│ ├─4026532509 ipc 4026532508
│ └─4026532511 net 4026532508
├─4026532573 mnt 4026531837
├─4026532574 mnt 4026531837
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
I'm working on building initramfs images directly from normal
packages, which means that the pristine system rpms should behave
correctly as much as possible also in the initrd. There usually isn't
enough time for the timer to actually fire, but starting it gives a
line on the console and generally looks confusing and sloppy. So let's
skip the timer if it ever ends up being enabled in the initrd.
Checking for /etc/initrd-release is the standard condition that
systemd's initrd units use.
Make the code avoid divided by zero. This can happen when file has content
but is zero in size. Such files can be found from procfs, possibly some
other pseudo-filesystems. To reproduce the issue run the following.
$ more /proc/crypto
...
Floating point exception (core dumped)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
The command-line option --force is defined as "disable all checks",
but the current code does not follow this idea. We need a way how to
disable read from the device (for example for dm-integrity devices).
Fixes: https://github.com/karelzak/util-linux/issues/1308
Signed-off-by: Karel Zak <kzak@redhat.com>
The mount() command associated with this error message is not about
unmounting the proc fs, but rather about changing the propagation
of mount events for the proc fs. Rewrite the error message to
reflect this.