Commit Graph

1303 Commits

Author SHA1 Message Date
Brian Behlendorf 8e870b63d0 Merge branch 'linux-have-sysevent' into refs/top-bases/linux-zfs-branch 2010-04-29 13:15:30 -07:00
Brian Behlendorf d6f1146154 Remove changes from linux-have-sysevent to prepare for topic branch removal. 2010-04-29 13:12:25 -07:00
Brian Behlendorf 35afc56620 Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2010-04-29 12:33:39 -07:00
Brian Behlendorf c14cca5c07 Add fm_init/fm_fini stubs for user space FMA update. 2010-04-29 12:25:18 -07:00
Brian Behlendorf 0ff721ce5d Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2010-04-29 11:02:17 -07:00
Brian Behlendorf 208e42ffe6 Merge commit 'refs/top-bases/linux-have-sysevent' into linux-have-sysevent 2010-04-29 11:01:23 -07:00
Brian Behlendorf ea12ca13bf Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2010-04-29 11:01:22 -07:00
Brian Behlendorf 76d877a211 Merge branch 'linux-docs' into refs/top-bases/linux-zfs-branch 2010-04-29 11:00:49 -07:00
Brian Behlendorf 4d5d0f9ef5 Include FMA source and headers in build system 2010-04-29 10:55:27 -07:00
Brian Behlendorf fb427cf371 Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2010-03-23 14:58:27 -07:00
Brian Behlendorf ee2a998f37 Move zfs_config.h include to command line -include
Remove the few places in the code where zfs_config.h is included.
It is now added to the gcc compile line to ensure the config results
2010-03-23 14:54:00 -07:00
Brian Behlendorf 20894b4487 Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2010-03-10 12:09:33 -08:00
Brian Behlendorf c7c19c1259 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-03-10 12:09:32 -08:00
Ricardo M. Correia 2c79a2fa6a Fix a few zdb bugs when trying to open a pool
Specifically, the following bugs are fixed in this patch:

1) zdb wasn't getting the correct device size when the vdev is a
block device.  In Solaris, fstat64() returns the device size but
in Linux an ioctl() is needed.

2) We were opening block devices with O_DIRECT, which caused pread64()
to fail with EINVAL due to memory alignment issues.  This was fixed by
the previous umem cache alignment fix in stub implementation to align
objects correctly.  But we still needed to add a check for the error here.

3) We also make sure that we don't try to open a block device in write
mode in userspace.  This shouldn't happen, because zdb opens devices
in read-only mode, and ztest only uses files.
2010-03-10 12:03:48 -08:00
Ricardo M. Correia c557557e4a Add umem_alloc_aligned() and honor cache_align field for umem caches
Under linux we open block devices with O_DIRECT which means we must
provide aligned memory buffers.  This patch adds the needed umem
interfaces or in the case of caches simply honors alignment provided
at cache creation time.
2010-03-10 11:51:43 -08:00
Brian Behlendorf 3670186d0a Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2010-03-10 09:59:28 -08:00
Brian Behlendorf 1186ea3781 Merge commit 'refs/top-bases/linux-user-disk' into linux-user-disk 2010-03-10 09:59:14 -08:00
Brian Behlendorf 724a450233 Merge commit 'refs/top-bases/linux-have-sysevent' into linux-have-sysevent 2010-03-10 09:58:38 -08:00
Brian Behlendorf c1c14c18c8 Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2010-03-10 09:58:37 -08:00
Brian Behlendorf a97cedc2df Merge branch 'linux-docs' into refs/top-bases/linux-zfs-branch 2010-03-10 09:58:07 -08:00
Brian Behlendorf 7223b8df33 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-03-10 09:58:04 -08:00
Brian Behlendorf 54cf7ab2bc Merge branch 'fix-branch' into refs/top-bases/zfs-branch 2010-03-10 09:58:03 -08:00
Brian Behlendorf 166355dcf0 Merge branch 'fix-error-handling' into refs/top-bases/fix-branch 2010-03-10 09:54:43 -08:00
Ricardo M. Correia 62a0ac8f22 Fix some incorrect error handling.
In vn_open(), if fstat64() returned an error, the real errno
was being obscured by calling close().

Add error handling for both pwrite64() calls in vn_rdwr().
2010-03-10 09:53:53 -08:00
Brian Behlendorf 6521b99461 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-03-09 13:43:29 -08:00
Ricardo M. Correia f1c8b3a435 Fix duplicate uuid_t typedef.
This typedef is being done in both lib/libefi/include/sys/uuid.h and
/usr/include/uuid/uuid.h, both of which are included in lib/libefi/rdwr_efi.c.

This leads to the following error:

In file included from ../../lib/libefi/include/sys/efi_partition.h:29,
                 from ../../lib/libefi/rdwr_efi.c:41:
../../lib/libefi/include/sys/uuid.h:81: error: redefinition of typedef 'uuid_t'
/usr/include/uuid/uuid.h:19: note: previous declaration of 'uuid_t' was here

The reason that we didn't see this before, is because of a strange feature in
gcc where some types of warnings/errors are silently ignored if they come from
system headers. But depending on the order of how system headers end up
included, libefi's uuid.h may actually be included after uuid/uuid.h, which
leads to the error above.

It is safe to remove this duplicate typedef because we are already
dependent on the linux uuid.h header and it's exceptionally unlikely
they will ever change the size.
2010-03-09 13:38:55 -08:00
Brian Behlendorf fdab6de381 Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2010-03-09 12:31:32 -08:00
Brian Behlendorf 4b2b113239 Merge commit 'refs/top-bases/linux-user-disk' into linux-user-disk 2010-03-09 12:31:18 -08:00
Brian Behlendorf feac56bf5a Merge commit 'refs/top-bases/linux-have-sysevent' into linux-have-sysevent 2010-03-09 12:30:44 -08:00
Brian Behlendorf 17a96f44f3 Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2010-03-09 12:30:43 -08:00
Brian Behlendorf 573328741b Merge branch 'linux-have-fm' into refs/top-bases/linux-zfs-branch 2010-03-09 12:30:21 -08:00
Brian Behlendorf 8f63d438cd Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-03-09 12:30:18 -08:00
Brian Behlendorf 48e74ed68b Merge branch 'feature-branch' into refs/top-bases/zfs-branch
Conflicts:

	cmd/ztest/ztest.c
2010-03-09 12:30:03 -08:00
Brian Behlendorf 9a3d5378c6 Clean up emulation of kernel threads in userspace.
Updated to use pthread thread specific data rather than keeping
a global list.  This also fixes at least one easily reproducible
crash in ztest
2010-03-09 12:25:28 -08:00
Brian Behlendorf 2feb4008e6 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-11-20 12:12:33 -08:00
Brian Behlendorf aebe6818a9 Linux ZVOL implementation; user-side changes
At last a useful user space interface for the Linux ZFS port arrives.
With the addition of the ZVOL real ZFS based block devices are available
and can be compared head to head with Linux's MD and LVM block drivers.
The Linux ZVOL has not yet had any performance work done but from a user
perspective it should be functionally complete and behave like any other
Linux block device.

The ZVOL has so far been tested using zconfig.sh on the following x86_64
based platforms: FC11, CHAOS4, RHEL5, RHEL6, and SLES11.  However, more
testing is required to ensure everything is working as designed.

What follows in a somewhat detailed list of changes includes in this
commit to make ZVOL's possible.  A few other issues were addressed in
the context of these changes which will also be mentioned.

* zvol_create_link_common() simplified to simply issue to ioctl to
create the device and then wait up to 10 seconds for it to appear.
The device will be created within a few miliseconds by udev under
/dev/<pool>/<volume>.  Note this naming convention is slightly
different than on Solaris by I feel is more Linuxy.

* Removed support for dump vdevs.  This concept is specific to Solaris
and done not map cleanly to Linux.  Under Linux generating system cores
is perferably done over the network via netdump, or alternately to a
block device via O_DIRECT.
2009-11-20 12:00:08 -08:00
Brian Behlendorf e576375b9f Merge branch 'linux-have-zpl' into refs/top-bases/linux-zfs-branch 2009-11-15 16:11:05 -08:00
Brian Behlendorf e588ef08cb Revert contents of linux-have-zpl topic branch. 2009-11-15 16:06:10 -08:00
Brian Behlendorf d876a087ff Merge branch 'linux-have-zvol' into refs/top-bases/linux-zfs-branch 2009-11-15 15:58:22 -08:00
Brian Behlendorf b38252d3ec Revert contents of linux-have-zvol topic branch. 2009-11-15 15:52:29 -08:00
Brian Behlendorf a5485c5560 Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2009-11-02 14:16:19 -08:00
Brian Behlendorf 238511d277 Add missing sys/dktp/*.h headers to package. 2009-11-02 14:08:08 -08:00
Brian Behlendorf 22c51d6136 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-27 15:03:46 -07:00
Brian Behlendorf a9accbcb57 Always open using O_EXCL to ensure the device is not in use.
Allow partition tables on md devices but not dm- devices.
2009-10-27 14:58:12 -07:00
Brian Behlendorf 0f959cc313 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-26 10:53:52 -07:00
Brian Behlendorf 37a519433c Add additional clarification for Linux systems to error message. 2009-10-26 10:50:43 -07:00
Brian Behlendorf 1a42b319f6 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-23 16:33:22 -07:00
Brian Behlendorf 29c9a2518c Properly handle block devices other the IDE and SCSI disks.
Based on the block device type we can expect a specific naming
convention.  With this in mind update efi_get_info() to be more
aware of the type when parsing out the partition number.  In,
addition be aware that all block device types are not partitionable.
Finally, when attempting to lookup a device partition by appending
the partition number to the whole device take in to account the
kernel naming scheme.  If the last character of the device name
is a digit the partition will always be 'p#' instead of just '#'.
2009-10-23 16:25:16 -07:00
Brian Behlendorf e8e3a8ae70 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-23 12:28:12 -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