mirror of
https://github.com/systemd/systemd.git
synced 2026-08-02 22:20:20 +00:00
blockdev-util: add fd-based APIs for getting backing block device for file
This commit is contained in:
@@ -182,26 +182,39 @@ int block_get_originating(dev_t dt, dev_t *ret) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int get_block_device_harder(const char *path, dev_t *ret) {
|
||||
int get_block_device_harder_fd(int fd, dev_t *ret) {
|
||||
int r;
|
||||
|
||||
assert(path);
|
||||
assert(fd >= 0);
|
||||
assert(ret);
|
||||
|
||||
/* Gets the backing block device for a file system, and handles LUKS encrypted file systems, looking for its
|
||||
* immediate parent, if there is one. */
|
||||
|
||||
r = get_block_device(path, ret);
|
||||
r = get_block_device_fd(fd, ret);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
||||
r = block_get_originating(*ret, ret);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to chase block device '%s', ignoring: %m", path);
|
||||
log_debug_errno(r, "Failed to chase block device, ignoring: %m");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int get_block_device_harder(const char *path, dev_t *ret) {
|
||||
_cleanup_close_ int fd = -1;
|
||||
|
||||
assert(path);
|
||||
assert(ret);
|
||||
|
||||
fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC);
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
return get_block_device_harder_fd(fd, ret);
|
||||
}
|
||||
|
||||
int lock_whole_block_device(dev_t devt, int operation) {
|
||||
_cleanup_free_ char *whole_node = NULL;
|
||||
_cleanup_close_ int lock_fd = -1;
|
||||
|
||||
@@ -18,6 +18,7 @@ int block_get_originating(dev_t d, dev_t *ret);
|
||||
int get_block_device_fd(int fd, dev_t *ret);
|
||||
int get_block_device(const char *path, dev_t *dev);
|
||||
|
||||
int get_block_device_harder_fd(int fd, dev_t *dev);
|
||||
int get_block_device_harder(const char *path, dev_t *dev);
|
||||
|
||||
int lock_whole_block_device(dev_t devt, int operation);
|
||||
|
||||
Reference in New Issue
Block a user