All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] btrfs-progs: create helper function to use lblkid to scan for btrfs disks
Date: Sat, 28 Sep 2013 00:10:36 +0800	[thread overview]
Message-ID: <5245ADFC.2090706@oracle.com> (raw)
In-Reply-To: <1380296700-7232-1-git-send-email-anand.jain@oracle.com>



  Following this patch the idea is to use lblkid to scan
  for the btrfs disks by default which means we don't
  use BTRFS_SCAN_PROC any more.
  which implies commands btrfs filesystem show and btrfs device scan will
  use lblkid to scan disks instead of current /proc/partitions
  by default.

  So now the question is, if there is any need to have option to scan
  using /proc/partitions ? and instead of removing it completely
  would we need it under a new option '-p' (in filesystem show and
  device  scan) so that user can use /proc/partitions when needed,
  I really don't know what would be that circumstance though,

  Any thoughts?

Thanks Anand



On 09/27/2013 11:45 PM, Anand Jain wrote:
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---
>   utils.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   utils.h |  2 ++
>   2 files changed, 56 insertions(+)
>
> diff --git a/utils.c b/utils.c
> index c6022fc..ccb5199 100644
> --- a/utils.c
> +++ b/utils.c
> @@ -1914,6 +1914,57 @@ int test_dev_for_mkfs(char *file, int force_overwrite, char *estr)
>   	return 0;
>   }
>
> +int test_skip_this_disk(char *path)
> +{
> +	int fd;
> +	/* this will eliminate disks which are mounted (btrfs)
> +	 * and non-dm disk path when dm is enabled
> +	 */
> +	fd = open(path, O_RDWR|O_EXCL);
> +	if (fd < 0)
> +		return 1;
> +	close(fd);
> +	return 0;
> +}
> +
> +int btrfs_scan_lblkid(int update_kernel)
> +{
> +	int fd = -1;
> +	u64 num_devices;
> +	struct btrfs_fs_devices *tmp_devices;
> +	blkid_dev_iterate iter = NULL;
> +	blkid_dev dev = NULL;
> +	blkid_cache cache = NULL;
> +	char path[PATH_MAX];
> +
> +	if (blkid_get_cache(&cache, 0) < 0) {
> +		printf("ERROR: lblkid cache get failed\n");
> +		return 1;
> +	}
> +	blkid_probe_all(cache);
> +	iter = blkid_dev_iterate_begin(cache);
> +	blkid_dev_set_search(iter, "TYPE", "btrfs");
> +	while (blkid_dev_next(iter, &dev) == 0) {
> +		dev = blkid_verify(cache, dev);
> +		if (!dev)
> +			continue;
> +		/* if we are here its definitly a btrfs disk*/
> +		strcpy(path, blkid_dev_devname(dev));
> +		if (test_skip_this_disk(path))
> +			continue;
> +
> +		fd = open(path, O_RDONLY);
> +		btrfs_scan_one_device(fd, path, &tmp_devices,
> +				&num_devices, BTRFS_SUPER_INFO_OFFSET);
> +		close(fd);
> +		fd = -1;
> +		if (update_kernel)
> +			btrfs_register_one_device(path);
> +	}
> +	blkid_dev_iterate_end(iter);
> +	return 0;
> +}
> +
>   /*
>    * scans devs for the btrfs
>   */
> @@ -1928,6 +1979,9 @@ int scan_for_btrfs(int where, int update_kernel)
>   	case BTRFS_SCAN_DEV:
>   		ret = btrfs_scan_one_dir("/dev", update_kernel);
>   		break;
> +	case BTRFS_SCAN_LBLKID:
> +		ret = btrfs_scan_lblkid(update_kernel);
> +		break;
>   	}
>   	return ret;
>   }
> diff --git a/utils.h b/utils.h
> index e944685..0f31db7 100644
> --- a/utils.h
> +++ b/utils.h
> @@ -28,6 +28,7 @@
>   #define BTRFS_SCAN_PROC		(1ULL << 0)
>   #define BTRFS_SCAN_DEV		(1ULL << 1)
>   #define BTRFS_SCAN_MOUNTED	(1ULL << 2)
> +#define BTRFS_SCAN_LBLKID	(1ULL << 3)
>
>   #define BTRFS_UPDATE_KERNEL	1
>
> @@ -89,5 +90,6 @@ int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
>   			   int verify);
>   int ask_user(char *question);
>   int lookup_ino_rootid(int fd, u64 *rootid);
> +int btrfs_scan_lblkid(int update_kernel);
>
>   #endif
>


  reply	other threads:[~2013-09-27 16:10 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-27 15:45 [PATCH] btrfs-progs: create helper function to use lblkid to scan for btrfs disks Anand Jain
2013-09-27 16:10 ` Anand Jain [this message]
2013-09-27 16:21   ` Wang Shilong
2013-10-01 12:03     ` David Sterba
2013-10-07 10:21       ` Anand Jain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5245ADFC.2090706@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.