Commit Graph

15375 Commits

Author SHA1 Message Date
Brian Behlendorf 561015d399 Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2009-10-23 12:26:54 -07:00
Brian Behlendorf e61024445b Merge branch 'linux-have-fm' into refs/top-bases/linux-zfs-branch 2009-10-23 12:26:49 -07:00
Brian Behlendorf b84f236a38 Merge commit 'refs/top-bases/linux-have-fm' into linux-have-fm 2009-10-23 12:26:47 -07:00
Brian Behlendorf a56b8d337f Merge branch 'linux-docs' into refs/top-bases/linux-zfs-branch
Conflicts:

	cmd/zfs/zfs_main.c
2009-10-23 12:25:33 -07:00
Brian Behlendorf 8d3be9d6b8 Merge commit 'refs/top-bases/linux-docs' into linux-docs 2009-10-23 12:24:39 -07:00
Brian Behlendorf 74b67983f1 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2009-10-23 12:24:39 -07:00
Brian Behlendorf edb22b6a3e Merge branch 'gcc-branch' into refs/top-bases/zfs-branch 2009-10-23 12:24:38 -07:00
Brian Behlendorf 53fcde4a48 Merge commit 'refs/top-bases/gcc-branch' into gcc-branch 2009-10-23 12:24:37 -07:00
Brian Behlendorf d8d360724d Merge branch 'gcc-uninit' into refs/top-bases/gcc-branch 2009-10-23 12:24:37 -07:00
Brian Behlendorf 24f3d6e49e Misc fixed based on testing with the dragon config.
In check_disk() we should only check the entire device if it
not a whole disk.  It is a whole disk with an EFI label on it,
it is possible that libblkid will misidentify the device as a
filesystem.  I had a case yesterday where 2 bytes in the EFI
GUID happened we set to the right values such that libblkid
decided there was a minux filesystem there.  If it's a whole
device we look for a EFI label.

If we are able to read the backup EFI label from a device but
the primary is corrupt.  Then don't bother trying to stat
the partitions in /dev/ the kernel will not create devices
using the backup label when the primary is damaged.

Add code to determine if we have a udev path instead of a
normal device path.  In this case use the -part# partition
naming scheme instead of the /dev/disk# scheme.  This is
important because we always want to access devices using
the full path provided at configuration time.

Readded support for zpool_relabel_disk() now that we have
the full libefi library in place we do have access to this
functionality.

Lots of additional paranoia to ensure EFI label are written
correctly.  These changes include:

1) Removing the O_NDELAY flag when opening a file descriptor
for libefi.  This flag should really only be used when you
do not intend to do any file IO.  Under Solaris only ioctl()'s
were performed under linux we do perform reads and writes.

2) Use O_DIRECT to ensure any caching is bypassed while
writing or reading the EFI labels.  This change forces the
use of sector aligned memory buffers which are allocated
using posix_memalign().

3) Add additional efi_debug error messages to efi_ioctl().

4) While doing a fsync is good to ensure the EFI label is on
disk we can, and should go one step futher by issuing the
BLKFLSBUF ioctl().  This signals the kernel to instruct the
drive to flush it's on-disk cache.

5) Because of some initial strangeness I observed in testing
with some flakey drives be extra paranoid in zpool_label_disk().
After we've written the device without error, flushed the drive
caches, correctly detected the new partitions created by the
kernel.  Then additionally read back the EFI label from user
space to make sure it is intact and correct.  I don't think we
can ever be to careful here.

NOTE: The was recently some concern expressed that writing EFI
labels from user space on Linux was not the right way to do this.
That instead two kernel ioctl()s should be used to create and
remove partitions.  After some investigation it's clear to me
using those ioctl() would be a bad idea.  The in fact don't
actually write partition tables to the disk, they only create
the partition devices in the kernel.  So what you really want
to do is write the label out from user space, then prompt the
kernel to re-read the partition from disk to create the partitions.
This is in fact exactly what newer version of parted do.
2009-10-23 11:57:59 -07:00
Brian Behlendorf 5972702242 Add two more possible uninit vars flagged by gcc. 2009-10-23 11:43:09 -07:00
Brian Behlendorf a9db62de88 Merge branch 'linux-have-idmap' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:40 -07:00
Brian Behlendorf 7f36c8649f Merge commit 'refs/top-bases/linux-have-idmap' into linux-have-idmap 2009-10-21 12:04:39 -07:00
Brian Behlendorf 89639638d6 Merge commit 'refs/top-bases/linux-ztest' into linux-ztest 2009-10-21 12:04:36 -07:00
Brian Behlendorf 75d3938961 Merge branch 'linux-ztest' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:36 -07:00
Brian Behlendorf bfddec1957 Merge branch 'linux-have-zpl' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:33 -07:00
Brian Behlendorf 8545c1c447 Merge commit 'refs/top-bases/linux-have-zpl' into linux-have-zpl 2009-10-21 12:04:32 -07:00
Brian Behlendorf 42ac9f4511 Merge branch 'linux-unused' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:29 -07:00
Brian Behlendorf 22e096636f Merge commit 'refs/top-bases/linux-unused' into linux-unused 2009-10-21 12:04:28 -07:00
Brian Behlendorf d3f63b9657 Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:26 -07:00
Brian Behlendorf 151bb2689e Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2009-10-21 12:04:25 -07:00
Brian Behlendorf 8513e824a0 Merge branch 'linux-zpios' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:22 -07:00
Brian Behlendorf b1d8d8fef9 Merge commit 'refs/top-bases/linux-zpios' into linux-zpios 2009-10-21 12:04:21 -07:00
Brian Behlendorf e0e0bac5a6 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:19 -07:00
Brian Behlendorf 6367f93602 Merge commit 'refs/top-bases/linux-user-disk' into linux-user-disk 2009-10-21 12:04:18 -07:00
Brian Behlendorf c9e138c366 Merge branch 'linux-symbol-collisions' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:15 -07:00
Brian Behlendorf 044a19c1bf Merge commit 'refs/top-bases/linux-symbol-collisions' into linux-symbol-collisions 2009-10-21 12:04:14 -07:00
Brian Behlendorf cbe8cd5465 Merge commit 'refs/top-bases/linux-legacy' into linux-legacy 2009-10-21 12:04:11 -07:00
Brian Behlendorf f1f05eacf1 Merge branch 'linux-legacy' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:11 -07:00
Brian Behlendorf 99a081f0f7 Merge branch 'linux-kernel-mem' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:08 -07:00
Brian Behlendorf 3e32c771b0 Merge commit 'refs/top-bases/linux-kernel-mem' into linux-kernel-mem 2009-10-21 12:04:07 -07:00
Brian Behlendorf deaca125bd Merge branch 'linux-kernel-disk' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:04 -07:00
Brian Behlendorf 7dc8d8e947 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2009-10-21 12:04:03 -07:00
Brian Behlendorf f0aac45aa5 Merge branch 'linux-have-zvol' into refs/top-bases/linux-zfs-branch 2009-10-21 12:04:01 -07:00
Brian Behlendorf cdc0778635 Merge commit 'refs/top-bases/linux-have-zvol' into linux-have-zvol 2009-10-21 12:04:00 -07:00
Brian Behlendorf 334a724a7e Merge branch 'linux-have-uio-rw' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:57 -07:00
Brian Behlendorf 48de801585 Merge commit 'refs/top-bases/linux-have-uio-rw' into linux-have-uio-rw 2009-10-21 12:03:56 -07:00
Brian Behlendorf ef5bfc4d4a Merge commit 'refs/top-bases/linux-debug-zerocopy' into linux-debug-zerocopy 2009-10-21 12:03:56 -07:00
Brian Behlendorf 29134090dd Merge commit 'refs/top-bases/linux-have-sysevent' into linux-have-sysevent 2009-10-21 12:03:50 -07:00
Brian Behlendorf 9bf7fa8c84 Merge branch 'linux-have-sysevent' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:50 -07:00
Brian Behlendorf fffe302a32 Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2009-10-21 12:03:49 -07:00
Brian Behlendorf 845e4b1e91 Merge branch 'linux-have-spl-debug' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:44 -07:00
Brian Behlendorf c6127f0065 Merge commit 'refs/top-bases/linux-have-spl-debug' into linux-have-spl-debug 2009-10-21 12:03:43 -07:00
Brian Behlendorf 7a065a41fc Merge branch 'linux-have-mntent' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:40 -07:00
Brian Behlendorf a8542a9376 Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2009-10-21 12:03:39 -07:00
Brian Behlendorf 6f5139fab9 Merge branch 'linux-have-fm' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:37 -07:00
Brian Behlendorf 299e7c585e Merge commit 'refs/top-bases/linux-have-fm' into linux-have-fm 2009-10-21 12:03:36 -07:00
Brian Behlendorf b2f7632187 Merge branch 'linux-docs' into refs/top-bases/linux-zfs-branch 2009-10-21 12:03:33 -07:00
Brian Behlendorf b5d2e2fc71 Merge commit 'refs/top-bases/linux-docs' into linux-docs 2009-10-21 12:03:32 -07:00
Brian Behlendorf aec988734b Command 'zpool create' needs to wait on correct partition names.
When creating partition tables we always need to wait until not
only the /dev/<disk><part> device appears.  But just as importantly
if we were originally given a udev path we need to wait for the
/dev/disk/*/<name>-part<part> symlink to be created.  However,
since the partition naming convention differs between /dev/ and
/dev/disk we determine based on the path which convention to
expect and then wait (for a few seconds) for the device to be
created.  Based on my experience with udev on my test nodes it
takes about 300ms for the devices to be created after being
prompted by the kernel.  This time will vary somehwat based
on how complicated your udev rules are, so for safety I threw
in a factor of 10.  We wait 3 seconds for the devices to appears
before erroring out with a failure.

An additional minor fix includes checking the force flag in the
EFI_GPT_PRIMARY_CORRUPT case.  This allows you to force the
update even in the corrupt partition case.

Finally, since these are Linux only changes I've dropped the
devid code entirely here because I still can't think of why we
would need or want it on a Linux system.
2009-10-21 11:50:42 -07:00