From: Rene Salmon <rsalmon@tulane.edu>
To: Timothy Shimmin <tes@sgi.com>
Cc: Shailendra Tripathi <stripathi@agami.com>,
Chris Wedgwood <cw@f00f.org>,
xfs@oss.sgi.com
Subject: Re: LVM and XFS cannot set blocksize on block device
Date: Fri, 06 Oct 2006 15:36:49 -0500 [thread overview]
Message-ID: <4526BE61.8020305@tulane.edu> (raw)
In-Reply-To: <452212CB.60103@sgi.com>
We are currently running SLES 10 on this box. I have called IBM and
they submitted a bug report to Novell and LTC Bugzilla 28003.
Is this all we need to do to get the patch into maybe SLES 10 SP1?
thanks
Rene
Timothy Shimmin wrote:
> Shailendra Tripathi wrote:
>>>> Thanks for the reply. The "-s size=4096" helped I was able to create
>>>> the file system, then mount it and use it. I did however get a
>>>> warning still about "cannot set blocksize on block device".
>>
>>>
>>> I don't know much about the LVM code, my guess is that
>>> ioctl(... ,BLKBSZSET, ...) is failing, strace would confirm this.
>>
>>
>> libxfs_device_open () seems to be working with the pre-conceived
>> notion of assuming block devices of only 512 bytes in size.
>>
>> if (!readonly && setblksize && (statb.st_mode & S_IFMT) == S_IFBLK)
>> platform_set_blocksize(fd, path, statb.st_rdev, 512);
>>
>> This eventually calls to set the blk sz to 512. Since, your volume
>> does not support less than 4k, it returns EINVAL. I think, libxfs_init
>> should be modified to take pass on the -s size option to this call so
>> that it does not happen.
>
>
> I've attached a patch.
> Is this the sort of thing you were after?
>
> --Tim
>
>
> ------------------------------------------------------------------------
>
> Subject: Re: LVM and XFS cannot set blocksize on block device
>
> Shailendra wrote:
> libxfs_device_open () seems to be working with the pre-conceived notion
> of assuming block devices of only 512 bytes in size.
> This eventually calls to set the blk sz to 512. Since, your volume does
> not support less than 4k, it returns EINVAL. I think, libxfs_init should
> be modified to pass on the -s size option to this call so that it
> does not happen.
> ...
>
> Index: xfsprogs/libxfs/darwin.c
> ===================================================================
> --- xfsprogs/libxfs/darwin.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/darwin.c 2006-10-03 16:03:48.000000000 +1000
> @@ -51,8 +51,8 @@
> return (writable == 0);
> }
>
> -void
> -platform_set_blocksize(int fd, char *path, dev_t device, int blocksize)
> +int
> +platform_set_blocksize(int fd, char *path, dev_t device, int blocksize, int fatal)
> {
> }
>
> Index: xfsprogs/libxfs/freebsd.c
> ===================================================================
> --- xfsprogs/libxfs/freebsd.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/freebsd.c 2006-10-03 16:03:48.000000000 +1000
> @@ -91,8 +91,8 @@
> return 0;
> }
>
> -void
> -platform_set_blocksize(int fd, char *path, dev_t device, int blocksize)
> +int
> +platform_set_blocksize(int fd, char *path, dev_t device, int blocksize, int fatal)
> {
> return;
> }
> Index: xfsprogs/libxfs/init.c
> ===================================================================
> --- xfsprogs/libxfs/init.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/init.c 2006-10-03 16:34:41.000000000 +1000
> @@ -116,8 +116,16 @@
> exit(1);
> }
>
> - if (!readonly && setblksize && (statb.st_mode & S_IFMT) == S_IFBLK)
> - platform_set_blocksize(fd, path, statb.st_rdev, 512);
> + if (!readonly && setblksize && (statb.st_mode & S_IFMT) == S_IFBLK) {
> + if (setblksize == 1)
> + /* use the default blocksize */
> + (void)platform_set_blocksize(fd, path, statb.st_rdev, XFS_MIN_SECTORSIZE, 0);
> + else {
> + /* given an explicit blocksize to use */
> + if (platform_set_blocksize(fd, path, statb.st_rdev, setblksize, 1))
> + exit(1);
> + }
> + }
>
> /*
> * Get the device number from the stat buf - unless
> Index: xfsprogs/libxfs/irix.c
> ===================================================================
> --- xfsprogs/libxfs/irix.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/irix.c 2006-10-03 16:03:48.000000000 +1000
> @@ -36,8 +36,8 @@
> return 1;
> }
>
> -void
> -platform_set_blocksize(int fd, char *path, dev_t device, int blocksize)
> +int
> +platform_set_blocksize(int fd, char *path, dev_t device, int blocksize, int fatal)
> {
> return;
> }
> Index: xfsprogs/libxfs/linux.c
> ===================================================================
> --- xfsprogs/libxfs/linux.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/linux.c 2006-10-03 16:03:48.000000000 +1000
> @@ -102,16 +102,20 @@
> return sts;
> }
>
> -void
> -platform_set_blocksize(int fd, char *path, dev_t device, int blocksize)
> +int
> +platform_set_blocksize(int fd, char *path, dev_t device, int blocksize, int fatal)
> {
> + int error = 0;
> +
> if (major(device) != RAMDISK_MAJOR) {
> - if (ioctl(fd, BLKBSZSET, &blocksize) < 0) {
> - fprintf(stderr, _("%s: warning - cannot set blocksize "
> + if ((error = ioctl(fd, BLKBSZSET, &blocksize)) < 0) {
> + fprintf(stderr, _("%s: %s - cannot set blocksize "
> "on block device %s: %s\n"),
> - progname, path, strerror(errno));
> + progname, fatal ? "error": "warning",
> + path, strerror(errno));
> }
> }
> + return error;
> }
>
> void
> Index: xfsprogs/mkfs/xfs_mkfs.c
> ===================================================================
> --- xfsprogs/mkfs/xfs_mkfs.c.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/mkfs/xfs_mkfs.c 2006-10-03 16:03:48.000000000 +1000
> @@ -634,7 +634,6 @@
> bzero(&fsx, sizeof(fsx));
>
> bzero(&xi, sizeof(xi));
> - xi.setblksize = 1;
> xi.isdirect = LIBXFS_DIRECT;
> xi.isreadonly = LIBXFS_EXCLUSIVELY;
>
> @@ -1506,6 +1505,11 @@
> calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
> &dsunit, &dswidth, &lsunit);
>
> + if (slflag || ssflag)
> + xi.setblksize = sectorsize;
> + else
> + xi.setblksize = 1;
> +
> /*
> * Initialize. This will open the log and rt devices as well.
> */
> Index: xfsprogs/libxfs/init.h
> ===================================================================
> --- xfsprogs/libxfs/init.h.orig 2006-10-03 16:10:41.000000000 +1000
> +++ xfsprogs/libxfs/init.h 2006-10-03 16:03:48.000000000 +1000
> @@ -25,7 +25,7 @@
> extern int platform_check_iswritable (char *path, char *block,
> struct stat64 *sptr, int fatal);
> extern void platform_findsizes (char *path, int fd, long long *sz, int *bsz);
> -extern void platform_set_blocksize (int fd, char *path, dev_t device, int bsz);
> +extern int platform_set_blocksize (int fd, char *path, dev_t device, int bsz, int fatal);
> extern void platform_flush_device (int fd, dev_t device);
> extern char *platform_findrawpath(char *path);
> extern char *platform_findrawpath (char *path);
next prev parent reply other threads:[~2006-10-06 21:06 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-25 22:11 LVM and XFS cannot set blocksize on block device Rene Salmon
2006-09-26 0:17 ` Chris Wedgwood
2006-09-26 13:58 ` Rene Salmon
2006-09-26 22:40 ` Chris Wedgwood
2006-09-27 11:55 ` Shailendra Tripathi
2006-09-27 13:16 ` Rene Salmon
2006-09-28 10:33 ` Tim Shimmin
2006-09-27 15:48 ` Eric Sandeen
2006-09-28 10:23 ` Tim Shimmin
2006-09-28 15:32 ` Chris Wedgwood
2006-10-02 7:28 ` Timothy Shimmin
2006-10-03 7:35 ` Timothy Shimmin
2006-10-06 20:36 ` Rene Salmon [this message]
2006-10-11 9:59 ` Timothy Shimmin
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=4526BE61.8020305@tulane.edu \
--to=rsalmon@tulane.edu \
--cc=cw@f00f.org \
--cc=stripathi@agami.com \
--cc=tes@sgi.com \
--cc=xfs@oss.sgi.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.