From: Lennart Poettering Date: Mon, 22 Mar 2021 20:22:22 +0000 (+0100) Subject: loop-util: store device major/minor in LoopDevice object X-Git-Tag: v249-rc1~388^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3859d5f5591494c3022d6e9e4af1538174526fd;p=thirdparty%2Fsystemd.git loop-util: store device major/minor in LoopDevice object Let's store this away. It's useful when matching up mounts (i.e. struct stat's .st_dev field) with loopback devices. --- diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c index 84f415aa61c..2aa49369654 100644 --- a/src/shared/loop-util.c +++ b/src/shared/loop-util.c @@ -353,6 +353,7 @@ int loop_device_make( .nr = nr, .node = TAKE_PTR(loopdev), .relinquished = true, /* It's not allocated by us, don't destroy it when this object is freed */ + .devno = st.st_rdev, }; *ret = d; @@ -425,6 +426,10 @@ int loop_device_make( UINT64_C(240) * USEC_PER_MSEC * n_attempts/64)); } + if (fstat(loop_with_fd, &st) < 0) + return -errno; + assert(S_ISBLK(st.st_mode)); + d = new(LoopDevice, 1); if (!d) return -ENOMEM; @@ -432,6 +437,7 @@ int loop_device_make( .fd = TAKE_FD(loop_with_fd), .node = TAKE_PTR(loopdev), .nr = nr, + .devno = st.st_rdev, }; *ret = d; diff --git a/src/shared/loop-util.h b/src/shared/loop-util.h index 9538daea311..619b34716bf 100644 --- a/src/shared/loop-util.h +++ b/src/shared/loop-util.h @@ -10,6 +10,7 @@ typedef struct LoopDevice LoopDevice; struct LoopDevice { int fd; int nr; + dev_t devno; char *node; bool relinquished; };