int dfd; /* data subvolume file descriptor */
int logfd; /* log subvolume file descriptor */
int rtfd; /* realtime subvolume file descriptor */
+ int setblksize; /* attempt to set device block size */
} libxfs_init_t;
#define LIBXFS_ISREADONLY 0x0069 /* disallow all mounted filesystems */
extern char *progname;
extern int libxfs_init (libxfs_init_t *);
extern int libxfs_device_to_fd (dev_t);
-extern dev_t libxfs_device_open (char *, int, int);
+extern dev_t libxfs_device_open (char *, int, int, int);
extern void libxfs_device_zero (dev_t, xfs_daddr_t, uint);
extern void libxfs_device_close (dev_t);
* open a device and return its device number
*/
dev_t
-libxfs_device_open(char *path, int creat, int readonly)
+libxfs_device_open(char *path, int creat, int readonly, int setblksize)
{
int fd;
dev_t dev;
}
/* Set device blocksize to 512 bytes */
- if ((statb.st_mode & S_IFMT) == S_IFBLK) {
+ if (!readonly && setblksize && (statb.st_mode & S_IFMT) == S_IFBLK) {
if (ioctl(fd, BLKBSZSET, &blocksize) < 0) {
fprintf(stderr, "%s: warning - cannot set blocksize on "
"block device %s: %s\n",
if (dname[0] != '/' && needcd)
chdir(curdir);
if (a->disfile) {
- a->ddev= libxfs_device_open(dname, a->dcreat, readonly);
+ a->ddev= libxfs_device_open(dname, a->dcreat, readonly,
+ a->setblksize);
a->dfd = libxfs_device_to_fd(a->ddev);
} else {
if (stat64(dname, &stbuf) < 0) {
dname, blockfile, readonly))
goto done;
a->ddev = libxfs_device_open(rawfile,
- a->dcreat, readonly);
+ a->dcreat, readonly, a->setblksize);
a->dfd = libxfs_device_to_fd(a->ddev);
a->dsize = findsize(rawfile);
}
chdir(curdir);
if (a->lisfile) {
a->logdev = libxfs_device_open(logname,
- a->lcreat, readonly);
+ a->lcreat, readonly, a->setblksize);
a->logfd = libxfs_device_to_fd(a->logdev);
} else {
if (stat64(logname, &stbuf) < 0) {
logname, blockfile, readonly))
goto done;
a->logdev = libxfs_device_open(rawfile,
- a->lcreat, readonly);
+ a->lcreat, readonly, a->setblksize);
a->logfd = libxfs_device_to_fd(a->logdev);
a->logBBsize = findsize(rawfile);
}
chdir(curdir);
if (a->risfile) {
a->rtdev = libxfs_device_open(rtname,
- a->rcreat, readonly);
+ a->rcreat, readonly, a->setblksize);
a->rtfd = libxfs_device_to_fd(a->rtdev);
} else {
if (stat64(rtname, &stbuf) < 0) {
rtname, blockfile, readonly))
goto done;
a->rtdev = libxfs_device_open(rawfile,
- a->rcreat, readonly);
+ a->rcreat, readonly, a->setblksize);
a->rtfd = libxfs_device_to_fd(a->rtdev);
a->rtsize = findsize(rawfile);
}