From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH v2] mkfs: Handle gfs2 creation on regular files
Date: Mon, 11 Jul 2011 17:29:34 +0100 [thread overview]
Message-ID: <1310401774.2766.21.camel@menhir> (raw)
In-Reply-To: <1310400568-29866-1-git-send-email-anprice@redhat.com>
Hi,
On Mon, 2011-07-11 at 17:09 +0100, Andrew Price wrote:
> mkfs.gfs2 previously exited if the target volume was a regular file.
> This patch allows creation of gfs2 file systems on regular files by
> removing an exiting check, guarding against calling device_topology()
> and falling back to the default block size if the target is a regular
> file. It also removes the check_mount() function and replaces it with an
> fstat() call after opening the file to avoid races.
>
> rhbz#719943
>
That looks good. Thanks for fixing that up,
Steve.
> Signed-off-by: Andrew Price <anprice@redhat.com>
> ---
> gfs2/mkfs/main_mkfs.c | 45 +++++++++++----------------------------------
> 1 files changed, 11 insertions(+), 34 deletions(-)
>
> diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c
> index b0bb6e3..eaf2aa2 100644
> --- a/gfs2/mkfs/main_mkfs.c
> +++ b/gfs2/mkfs/main_mkfs.c
> @@ -476,36 +476,6 @@ static void are_you_sure(struct gfs2_sbd *sdp)
> }
>
> /**
> - * check_mount - check to see if device is mounted/busy
> - * @device: the device to create the filesystem on
> - *
> - */
> -
> -static void check_mount(char *device)
> -{
> - struct stat st_buf;
> - int fd;
> -
> - if (stat(device, &st_buf) < 0)
> - die( _("could not stat device %s\n"), device);
> - if (!S_ISBLK(st_buf.st_mode))
> - die( _("%s is not a block device\n"), device);
> -
> - fd = open(device, O_RDONLY | O_NONBLOCK | O_EXCL | O_CLOEXEC);
> -
> - if (fd < 0) {
> - if (errno == EBUSY) {
> - die( _("device %s is busy\n"), device);
> - }
> - }
> - else {
> - close(fd);
> - }
> -
> - return;
> -}
> -
> -/**
> * print_results - print out summary information
> * @sdp: the command line
> *
> @@ -561,6 +531,7 @@ void main_mkfs(int argc, char *argv[])
> int rgsize_specified = 0;
> uint64_t real_device_size;
> unsigned char uuid[16];
> + struct stat st_buf;
>
> memset(sdp, 0, sizeof(struct gfs2_sbd));
> sdp->bsize = -1;
> @@ -579,25 +550,31 @@ void main_mkfs(int argc, char *argv[])
>
> verify_arguments(sdp);
>
> - check_mount(sdp->device_name);
> -
> sdp->device_fd = open(sdp->device_name, O_RDWR | O_CLOEXEC);
> if (sdp->device_fd < 0)
> die( _("can't open device %s: %s\n"),
> sdp->device_name, strerror(errno));
>
> + if (fstat(sdp->device_fd, &st_buf) < 0) {
> + fprintf(stderr, _("could not fstat fd %d: %s\n"),
> + sdp->device_fd, strerror(errno));
> + exit(-1);
> + }
> +
> if (!sdp->override)
> are_you_sure(sdp);
>
> - if (device_topology(sdp)) {
> + if (!S_ISREG(st_buf.st_mode) && device_topology(sdp)) {
> fprintf(stderr, _("Device topology error\n"));
> exit(-1);
> }
>
> if (sdp->bsize == -1) {
> + if (S_ISREG(st_buf.st_mode))
> + sdp->bsize = GFS2_DEFAULT_BSIZE;
> /* See if optimal_io_size (the biggest I/O we can submit
> without incurring a penalty) is a suitable block size. */
> - if (sdp->optimal_io_size <= getpagesize() &&
> + else if (sdp->optimal_io_size <= getpagesize() &&
> sdp->optimal_io_size >= sdp->minimum_io_size)
> sdp->bsize = sdp->optimal_io_size;
> /* See if physical_block_size (the smallest unit we can write
prev parent reply other threads:[~2011-07-11 16:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-11 14:23 [Cluster-devel] [PATCH] mkfs: Handle gfs2 creation on regular files Andrew Price
2011-07-11 14:40 ` Steven Whitehouse
2011-07-11 16:09 ` [Cluster-devel] [PATCH v2] " Andrew Price
2011-07-11 16:29 ` Steven Whitehouse [this message]
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=1310401774.2766.21.camel@menhir \
--to=swhiteho@redhat.com \
/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.