Example #1
0
/*
 * Deletes loop device
 */
int mnt_context_delete_loopdev(struct libmnt_context *cxt)
{
	const char *src;
	int rc;

	assert(cxt);
	assert(cxt->fs);

	if (!cxt)
		return -EINVAL;

	src = mnt_fs_get_srcpath(cxt->fs);
	if (!src)
		return -EINVAL;

	if (cxt->loopdev_fd > -1)
		close(cxt->loopdev_fd);

	rc = loopdev_delete(src);
	cxt->flags &= ~MNT_FL_LOOPDEV_READY;
	cxt->loopdev_fd = -1;

	DBG(CXT, ul_debugobj(cxt, "loopdev deleted [rc=%d]", rc));
	return rc;
}
Example #2
0
int main(int argc, char *argv[])
{
	int dbg;

	if (argc < 2)
		goto usage;

	dbg = getenv("LOOPDEV_DEBUG") == NULL ? 0 : 1;

	if (argc == 3 && strcmp(argv[1], "--info") == 0) {
		printf("---sysfs & ioctl:---\n");
		test_loop_info(argv[2], 0, dbg);
		printf("---sysfs only:---\n");
		test_loop_info(argv[2], LOOPDEV_FL_NOIOCTL, dbg);
		printf("---ioctl only:---\n");
		test_loop_info(argv[2], LOOPDEV_FL_NOSYSFS, dbg);

	} else if (argc == 2 && strcmp(argv[1], "--used") == 0) {
		printf("---all used devices---\n");
		test_loop_scan(LOOPITER_FL_USED, dbg);

	} else if (argc == 2 && strcmp(argv[1], "--free") == 0) {
		printf("---all free devices---\n");
		test_loop_scan(LOOPITER_FL_FREE, dbg);

	} else if (argc >= 3 && strcmp(argv[1], "--setup") == 0) {
		test_loop_setup(argv[2], argv[3], dbg);

	} else if (argc == 3 && strcmp(argv[1], "--delete") == 0) {
		if (loopdev_delete(argv[2]))
			errx(EXIT_FAILURE, "failed to deinitialize device %s", argv[2]);
	} else
		goto usage;

	return EXIT_SUCCESS;

usage:
	errx(EXIT_FAILURE, "usage: \n"
			   "  %1$s --info <device>\n"
			   "  %1$s --free\n"
			   "  %1$s --used\n"
			   "  %1$s --setup <filename> [<device>]\n"
			   "  %1$s --delete\n",
			   argv[0]);
}