Commit Graph

572 Commits

Author SHA1 Message Date
Brian Behlendorf b41143632b Merge branch 'linux-have-mntent' into refs/top-bases/linux-zfs-branch
Conflicts:
	cmd/zpool/zpool_main.c
	cmd/zpool/zpool_vdev.c
	cmd/ztest/ztest.c
	lib/libzfs/libzfs_dataset.c
	lib/libzfs/libzfs_import.c
	lib/libzfs/libzfs_mount.c
	lib/libzfs/libzfs_pool.c
	lib/libzfs/libzfs_sendrecv.c
	lib/libzpool/include/sys/zfs_context.h
	module/zcommon/include/sys/fs/zfs.h
	module/zcommon/zfs_comutil.c
	module/zfs/arc.c
	module/zfs/dmu.c
	module/zfs/dmu_objset.c
	module/zfs/dmu_send.c
	module/zfs/dmu_tx.c
	module/zfs/dsl_dataset.c
	module/zfs/dsl_dir.c
	module/zfs/dsl_scrub.c
	module/zfs/fm.c
	module/zfs/include/sys/dmu.h
	module/zfs/include/sys/fm/fs/zfs.h
	module/zfs/include/sys/fm/protocol.h
	module/zfs/include/sys/spa.h
	module/zfs/include/sys/zfs_context.h
	module/zfs/include/sys/zfs_ioctl.h
	module/zfs/include/sys/zvol.h
	module/zfs/spa.c
	module/zfs/spa_boot.c
	module/zfs/spa_history.c
	module/zfs/spa_misc.c
	module/zfs/txg.c
	module/zfs/vdev.c
	module/zfs/zfs_fm.c
	module/zfs/zfs_ioctl.c
	module/zfs/zfs_replay.c
	module/zfs/zfs_znode.c
	module/zfs/zil.c
	module/zfs/zio.c
2010-05-28 22:14:39 -07:00
Brian Behlendorf e2ca9a51c0 Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2010-05-28 15:46:16 -07:00
Brian Behlendorf 812761eac5 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch
Conflicts:
	cmd/ztest/ztest.c
2010-05-28 15:46:10 -07:00
Brian Behlendorf e27754d9e8 Merge branch 'gcc-branch' into refs/top-bases/zfs-branch
Conflicts:
	cmd/ztest/ztest.c
	lib/libzfs/libzfs_sendrecv.c
	module/zfs/dmu_objset.c
	module/zfs/dnode.c
	module/zfs/dnode_sync.c
	module/zfs/dsl_dataset.c
	module/zfs/include/sys/dmu_tx.h
	module/zfs/include/sys/txg.h
	module/zfs/spa_history.c
2010-05-28 15:45:38 -07:00
Brian Behlendorf 06ba6dc528 Merge branch 'gcc-missing-braces' into refs/top-bases/gcc-branch
Conflicts:
	lib/libzfs/libzfs_pool.c
2010-05-28 15:39:07 -07:00
Brian Behlendorf 3e2be634a5 Merge branch 'gcc-c90' into refs/top-bases/gcc-branch
Conflicts:
	cmd/zdb/zdb.c
	cmd/zdb/zdb_il.c
	cmd/zfs/zfs_main.c
	cmd/zfs/zfs_util.h
	cmd/zinject/zinject.h
	cmd/zpool/zpool_main.c
	cmd/zpool/zpool_util.c
	cmd/ztest/ztest.c
	lib/libnvpair/include/libnvpair.h
	lib/libnvpair/libnvpair.c
	lib/libzfs/libzfs_changelist.c
	lib/libzfs/libzfs_config.c
	lib/libzfs/libzfs_dataset.c
	lib/libzfs/libzfs_import.c
	lib/libzfs/libzfs_mount.c
	lib/libzfs/libzfs_pool.c
	lib/libzfs/libzfs_sendrecv.c
	module/avl/avl.c
	module/avl/include/sys/avl.h
	module/nvpair/include/sys/nvpair.h
	module/nvpair/nvpair.c
	module/zcommon/include/zfs_comutil.h
	module/zcommon/include/zfs_prop.h
	module/zcommon/zfs_comutil.c
	module/zfs/arc.c
	module/zfs/dbuf.c
	module/zfs/dmu.c
	module/zfs/dmu_objset.c
	module/zfs/dmu_zfetch.c
	module/zfs/dnode_sync.c
	module/zfs/dsl_dataset.c
	module/zfs/dsl_pool.c
	module/zfs/dsl_prop.c
	module/zfs/dsl_synctask.c
	module/zfs/include/sys/dmu_tx.h
	module/zfs/include/sys/dmu_zfetch.h
	module/zfs/include/sys/dsl_synctask.h
	module/zfs/include/sys/refcount.h
	module/zfs/include/sys/txg.h
	module/zfs/include/sys/uberblock.h
	module/zfs/include/sys/zap_leaf.h
	module/zfs/include/sys/zfs_debug.h
	module/zfs/include/sys/zfs_znode.h
	module/zfs/include/sys/zio_compress.h
	module/zfs/include/sys/zvol.h
	module/zfs/lzjb.c
	module/zfs/metaslab.c
	module/zfs/refcount.c
	module/zfs/sha256.c
	module/zfs/spa.c
	module/zfs/spa_boot.c
	module/zfs/uberblock.c
	module/zfs/vdev.c
	module/zfs/zap_micro.c
	module/zfs/zfs_ioctl.c
	module/zfs/zfs_replay.c
	module/zfs/zio.c
	module/zfs/zio_compress.c
2010-05-28 15:34:57 -07:00
Brian Behlendorf 3571832262 Merge commit 'refs/top-bases/gcc-missing-braces' into gcc-missing-braces
Conflicts:
	cmd/zdb/zdb.c
	cmd/ztest/ztest.c
	lib/libzfs/libzfs_dataset.c
	lib/libzfs/libzfs_pool.c
	lib/libzfs/libzfs_sendrecv.c
2010-05-28 14:46:39 -07:00
Brian Behlendorf 957b7b41d4 Merge commit 'refs/top-bases/gcc-c90' into gcc-c90
Conflicts:
	cmd/zdb/zdb.c
	cmd/ztest/ztest.c
	module/zfs/dbuf.c
	module/zfs/dsl_dataset.c
	module/zfs/dsl_scrub.c
	module/zfs/spa.c
	module/zfs/vdev.c
	module/zfs/zio.c
2010-05-28 14:19:22 -07:00
Brian Behlendorf 428870ff73 Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
Brian Behlendorf 002809a885 Merge branch 'linux-have-mntent' into refs/top-bases/linux-zfs-branch 2010-05-28 12:42:31 -07:00
Brian Behlendorf 2c62b4294e Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2010-05-28 12:42:30 -07:00
Brian Behlendorf 06da6ccf97 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-05-28 12:42:30 -07:00
Brian Behlendorf 818eafca5b Merge branch 'gcc-branch' into refs/top-bases/zfs-branch 2010-05-28 12:42:30 -07:00
Brian Behlendorf c91169c7c5 Merge branch 'gcc-shadow' into refs/top-bases/gcc-branch
Conflicts:
	lib/libzfs/libzfs_util.c
2010-05-28 12:42:27 -07:00
Brian Behlendorf fb72c6ef81 Revert gcc-shadow using -Wno-shadow I can live with
While I would rather fix all the instances where something is shadowed
it complicates tracking the OpenSolaris code where they either don't
seem to care or have different conflicts.  Anyway, this ends up being
more simply gratutous change than I care for.
2010-05-28 12:34:45 -07:00
Brian Behlendorf c7c0e673a3 Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2010-05-28 12:20:31 -07:00
Brian Behlendorf 01123eabf6 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-05-28 12:20:31 -07:00
Brian Behlendorf 7bf93b95ff Merge branch 'linux-have-mntent' into refs/top-bases/linux-zfs-branch 2010-05-28 12:20:31 -07:00
Brian Behlendorf 8390fe4b4b Merge branch 'fix-branch' into refs/top-bases/zfs-branch 2010-05-28 12:20:30 -07:00
Brian Behlendorf fcfae8fbee Merge branch 'fix-get-configs' into refs/top-bases/fix-branch 2010-05-28 12:20:30 -07:00
Brian Behlendorf c37d6443a4 Revert fix-get-configs should no longer be needed 2010-05-28 12:18:45 -07:00
Brian Behlendorf 4eb91f73a1 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-05-23 09:45:42 -07:00
Brian Behlendorf f36da16d36 Skip /dev/watchdog when scanning /dev/ for import.
Do not open /dev/watchdog to stat it because it requires a special
close or the watchdog with be triggered and the system reset.
2010-05-23 09:38:29 -07:00
Brian Behlendorf 14152c7b2c Merge branch 'linux-user-util' into refs/top-bases/linux-zfs-branch 2010-05-21 10:49:47 -07:00
Brian Behlendorf 868e5de066 Add linux-user-util topic branch.
This topic branch contains required changes to the user space
utilities to allow them to integrate cleanly with Linux.
2010-05-21 10:47:59 -07:00
Brian Behlendorf 3b79eba6d7 Merge branch 'linux-debug-zerocopy' into refs/top-bases/linux-zfs-branch 2010-05-21 10:44:28 -07:00
Brian Behlendorf a876892309 Revert user space changes from linux-kernel-module topic branch.
These changes do not belong on linux-kernel-module since they
are tweaks to user space utilities.  I'm reverting them from
this topic branch and will be moving them to a new topic branch
which can be used for just this sort of thing.
2010-05-21 10:40:09 -07:00
Brian Behlendorf 19035d1734 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-05-20 10:26:10 -07:00
Brian Behlendorf b50494ba2d Add missing header observed after linux-legacy was reverted.
Interestingly this has only been a problem on a clean RHEL6
install so I suspect the include was removed from one of the
standard system include headers.  We should be including it
explicitly anyway since it's used in both of these .c files.
2010-05-20 10:04:10 -07:00
Brian Behlendorf d0fb672d5b Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-05-18 16:23:33 -07:00
Brian Behlendorf e19dec32a7 Minor fix from linux-legacy branch.
Fold in a minor fix from the removed linux-legacy branch to skip checking
character devices in /dev/ during import.  Under Linux pread() may simply
block when reading from these devices causing the import to hang.
2010-05-18 16:13:10 -07:00
Brian Behlendorf 9c65da32f1 Merge branch 'linux-legacy' into refs/top-bases/linux-zfs-branch 2010-05-18 12:17:18 -07:00
Brian Behlendorf a056f3de6d Revert linux-legacy topic branch.
These changes were made when some development was still occuring
under RHEL4.  Since then the needed fopendir() and atopen() APIs
have become commonly available under Linux.  Since I have no
intention of supporting systems as old as RHEL4 we can safely
drop the topic branch.
2010-05-18 12:10:13 -07:00
Brian Behlendorf feb723fa7d Merge branch 'linux-events' into refs/top-bases/linux-zfs-branch 2010-05-14 12:55:10 -07:00
Brian Behlendorf 97d19a5e45 Add linux-events topic branch for zevent handling.
This topic branch leverages the Solaris style FMA call points
in ZFS to create a user space visible event notification system
under Linux.  This new system is called zevent and it unifies
all previous Solaris style ereports and sysevent notifications.

Under this Linux specific scheme when a sysevent or ereport event
occurs an nvlist describing the event is created which looks almost
exactly like a Solaris ereport.  These events are queued up in the
kernel when they occur and conditionally logged to the console.
It is then up to a user space application to consume the events
and do whatever it likes with them.

To make this possible the existing /dev/zfs ABI has been extended
with two new ioctls which behave as follows.

* ZFS_IOC_EVENTS_NEXT
Get the next pending event.  The kernel will keep track of the last
event consumed by the file descriptor and provide the next one if
available.  If no new events are available the ioctl() will block
waiting for the next event.  This ioctl may also be called in a
non-blocking mode by setting zc.zc_guid = ZEVENT_NONBLOCK.  In the
non-blocking case if no events are available ENOENT will be returned.
It is possible that ESHUTDOWN will be returned if the ioctl() is
called while module unloading is in progress.  And finally ENOMEM
may occur if the provided nvlist buffer is not large enough to
contain the entire event.

* ZFS_IOC_EVENTS_CLEAR
Clear are events queued by the kernel.  The kernel will keep a fairly
large number of recent events queued, use this ioctl to clear the
in kernel list.  This will effect all user space processes consuming
events.

The zpool command has been extended to use this events ABI with the
'events' subcommand.  You may run 'zpool events -v' to output a
verbose log of all recent events.  This is very similar to the
Solaris 'fmdump -ev' command with the key difference being it also
includes what would be considered sysevents under Solaris.  You
may also run in follow mode with the '-f' option.  To clear the
in kernel event queue use the '-c' option.

$ sudo cmd/zpool/zpool events -fv
TIME                        CLASS
May 13 2010 16:31:15.777711000 ereport.fs.zfs.config.sync
        class = "ereport.fs.zfs.config.sync"
        ena = 0x40982b7897700001
        detector = (embedded nvlist)
                version = 0x0
                scheme = "zfs"
                pool = 0xed976600de75dfa6
        (end detector)

        time = 0x4bec8bc3 0x2e5aed98
        pool = "zpios"
        pool_guid = 0xed976600de75dfa6
        pool_context = 0x0

While the 'zpool events' command is handy for interactive debugging
it is not expected to be the primary consumer of zevents.  This ABI
was primarily added to facilitate the addition of a user space
monitoring daemon.  This daemon would consume all events posted by
the kernel and based on the type of event perform an action.  For
most events simply forwarding them on to syslog is likely enough.
But this interface also cleanly allows for more sophisticated
actions to be taken such as generating an email for a failed drive
2010-05-14 12:40:44 -07: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 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
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 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
Brian Behlendorf 3129860fb1 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2009-10-19 14:06:11 -07:00