git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Temporarily disable the reguid test.
[zfs.git]
/
module
/
zfs
/
zfs_fm.c
diff --git
a/module/zfs/zfs_fm.c
b/module/zfs/zfs_fm.c
index
c93057e
..
0b98231
100644
(file)
--- a/
module/zfs/zfs_fm.c
+++ b/
module/zfs/zfs_fm.c
@@
-23,6
+23,10
@@
* Use is subject to license terms.
*/
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ */
+
#include <sys/spa.h>
#include <sys/spa_impl.h>
#include <sys/vdev.h>
#include <sys/spa.h>
#include <sys/spa_impl.h>
#include <sys/vdev.h>
@@
-144,22
+148,6
@@
zfs_ereport_start(nvlist_t **ereport_out, nvlist_t **detector_out,
zio->io_type != ZIO_TYPE_WRITE)
return;
zio->io_type != ZIO_TYPE_WRITE)
return;
- /*
- * Ignore any errors from speculative I/Os, as failure is an
- * expected result.
- */
- if (zio->io_flags & ZIO_FLAG_SPECULATIVE)
- return;
-
- /*
- * If this I/O is not a retry I/O, don't post an ereport.
- * Otherwise, we risk making bad diagnoses based on B_FAILFAST
- * I/Os.
- */
- if (zio->io_error == EIO &&
- !(zio->io_flags & ZIO_FLAG_IO_RETRY))
- return;
-
if (vd != NULL) {
/*
* If the vdev has already been marked as failing due
if (vd != NULL) {
/*
* If the vdev has already been marked as failing due
@@
-304,6
+292,10
@@
zfs_ereport_start(nvlist_t **ereport_out, nvlist_t **detector_out,
*/
fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_ERR,
DATA_TYPE_INT32, zio->io_error, NULL);
*/
fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_ERR,
DATA_TYPE_INT32, zio->io_error, NULL);
+ fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS,
+ DATA_TYPE_INT32, zio->io_flags, NULL);
+ fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_DELAY,
+ DATA_TYPE_UINT64, zio->io_delay, NULL);
/*
* If the 'size' parameter is non-zero, it indicates this is a
/*
* If the 'size' parameter is non-zero, it indicates this is a
@@
-527,7
+519,7
@@
annotate_ecksum(nvlist_t *ereport, zio_bad_cksum_t *info,
size_t offset = 0;
ssize_t start = -1;
size_t offset = 0;
ssize_t start = -1;
- zfs_ecksum_info_t *eip = kmem_zalloc(sizeof (*eip), KM_
SLEEP
);
+ zfs_ecksum_info_t *eip = kmem_zalloc(sizeof (*eip), KM_
PUSHPAGE
);
/* don't do any annotation for injected checksum errors */
if (info != NULL && info->zbc_injected)
/* don't do any annotation for injected checksum errors */
if (info != NULL && info->zbc_injected)
@@
-696,7
+688,7
@@
zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd,
struct zio *zio, uint64_t offset, uint64_t length, void *arg,
zio_bad_cksum_t *info)
{
struct zio *zio, uint64_t offset, uint64_t length, void *arg,
zio_bad_cksum_t *info)
{
- zio_cksum_report_t *report = kmem_zalloc(sizeof (*report), KM_
SLEEP
);
+ zio_cksum_report_t *report = kmem_zalloc(sizeof (*report), KM_
PUSHPAGE
);
if (zio->io_vsd != NULL)
zio->io_vsd_ops->vsd_cksum_report(zio, report, arg);
if (zio->io_vsd != NULL)
zio->io_vsd_ops->vsd_cksum_report(zio, report, arg);
@@
-705,7
+697,7
@@
zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd,
/* copy the checksum failure information if it was provided */
if (info != NULL) {
/* copy the checksum failure information if it was provided */
if (info != NULL) {
- report->zcr_ckinfo = kmem_zalloc(sizeof (*info), KM_
SLEEP
);
+ report->zcr_ckinfo = kmem_zalloc(sizeof (*info), KM_
PUSHPAGE
);
bcopy(info, report->zcr_ckinfo, sizeof (*info));
}
bcopy(info, report->zcr_ckinfo, sizeof (*info));
}
@@
-718,6
+710,10
@@
zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd,
if (report->zcr_ereport == NULL) {
report->zcr_free(report->zcr_cbdata, report->zcr_cbinfo);
if (report->zcr_ereport == NULL) {
report->zcr_free(report->zcr_cbdata, report->zcr_cbinfo);
+ if (report->zcr_ckinfo != NULL) {
+ kmem_free(report->zcr_ckinfo,
+ sizeof (*report->zcr_ckinfo));
+ }
kmem_free(report, sizeof (*report));
return;
}
kmem_free(report, sizeof (*report));
return;
}