diff options
author | Richard Yao <ryao@gentoo.org> | 2012-08-22 07:28:13 +0000 |
---|---|---|
committer | Richard Yao <ryao@gentoo.org> | 2012-08-22 07:28:13 +0000 |
commit | 5d60a405da91fc84e0da071de6ba9dd311e1bdf2 (patch) | |
tree | 656e16a26903151a70966aac31d45098a57c732c /sys-fs/zfs-kmod/files | |
parent | Stable for x86, wrt bug #432240 (diff) | |
download | gentoo-2-5d60a405da91fc84e0da071de6ba9dd311e1bdf2.tar.gz gentoo-2-5d60a405da91fc84e0da071de6ba9dd311e1bdf2.tar.bz2 gentoo-2-5d60a405da91fc84e0da071de6ba9dd311e1bdf2.zip |
Ebuild to provide kernel module for sys-fs/zfs
(Portage version: 2.1.11.9/cvs/Linux x86_64)
Diffstat (limited to 'sys-fs/zfs-kmod/files')
3 files changed, 170 insertions, 0 deletions
diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-1-of-3.patch b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-1-of-3.patch new file mode 100644 index 000000000000..51a81363eac8 --- /dev/null +++ b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-1-of-3.patch @@ -0,0 +1,44 @@ +From e2060f922f8526aecf437de4cc4dff4c3cdfae16 Mon Sep 17 00:00:00 2001 +From: Richard Yao <ryao@cs.stonybrook.edu> +Date: Tue, 15 May 2012 23:19:32 -0400 +Subject: [PATCH] Revert Fix ASSERTION(!dsl_pool_sync_context(tx->tx_pool)) + +Commit eec8164771bee067c3cd55ed0a16dadeeba276de worked around an issue +involving direct reclaim through the use of PF_MEMALLOC. Since we +are reworking thing to use KM_PUSHPAGE so that swap works, we revert +this patch in favor of the use of KM_PUSHPAGE in the affected areas. + +Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Issue #726 +--- + module/zfs/txg.c | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/module/zfs/txg.c b/module/zfs/txg.c +index 5021e44..8d037f7 100644 +--- a/module/zfs/txg.c ++++ b/module/zfs/txg.c +@@ -372,19 +372,6 @@ + callb_cpr_t cpr; + uint64_t start, delta; + +-#ifdef _KERNEL +- /* +- * Disable the normal reclaim path for the txg_sync thread. This +- * ensures the thread will never enter dmu_tx_assign() which can +- * otherwise occur due to direct reclaim. If this is allowed to +- * happen the system can deadlock. Direct reclaim call path: +- * +- * ->shrink_icache_memory->prune_icache->dispose_list-> +- * clear_inode->zpl_clear_inode->zfs_inactive->dmu_tx_assign +- */ +- current->flags |= PF_MEMALLOC; +-#endif /* _KERNEL */ +- + txg_thread_enter(tx, &cpr); + + start = delta = 0; +-- +1.7.10 + diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-2-of-3.patch b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-2-of-3.patch new file mode 100644 index 000000000000..0a4fd26040e7 --- /dev/null +++ b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-2-of-3.patch @@ -0,0 +1,56 @@ +From 78d26b8497b3845fc8130981c76214d6788f7a9d Mon Sep 17 00:00:00 2001 +From: Richard Yao <ryao@cs.stonybrook.edu> +Date: Mon, 7 May 2012 14:14:45 -0400 +Subject: [PATCH] Revert Fix zpl_writepage() deadlock + +The commit, cfc9a5c88f91f7b4d606fce89505e1f404691ea5, to fix deadlocks +in zpl_writepage() relied on PF_MEMALLOC. That had the effect of +disabling the direct reclaim path on all allocations originating from +calls to this function, but it failed to address the actual cause of +those deadlocks. This led to the same deadlocks being observed with +swap on zvols, but not with swap on the loop device, which exercises +this code. + +The use of PF_MEMALLOC also had the side effect of permitting +allocations to be made from ZONE_DMA in instances that did not require +it. This contributes to the possibility of panics caused by depletion +of pages from ZONE_DMA. + +As such, we revert this patch in favor of a proper fix for both issues. + +Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Issue #726 +--- + module/zfs/zpl_file.c | 15 +-------------- + 1 file changed, 1 insertion(+), 14 deletions(-) + +diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c +index 5ac41c9..2e9f72a 100644 +--- a/module/zfs/zpl_file.c ++++ b/module/zfs/zpl_file.c +@@ -358,20 +358,7 @@ + ASSERT(PageLocked(pp)); + ASSERT(!PageWriteback(pp)); + +- /* +- * Disable the normal reclaim path for zpl_putpage(). This +- * ensures that all memory allocations under this call path +- * will never enter direct reclaim. If this were to happen +- * the VM might try to write out additional pages by calling +- * zpl_putpage() again resulting in a deadlock. +- */ +- if (current->flags & PF_MEMALLOC) { +- (void) zfs_putpage(mapping->host, pp, wbc); +- } else { +- current->flags |= PF_MEMALLOC; +- (void) zfs_putpage(mapping->host, pp, wbc); +- current->flags &= ~PF_MEMALLOC; +- } ++ (void) zfs_putpage(mapping->host, pp, wbc); + + return (0); + } +-- +1.7.10 + diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-3-of-3.patch b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-3-of-3.patch new file mode 100644 index 000000000000..2eb85754b0f8 --- /dev/null +++ b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc9-remove-pfmalloc-3-of-3.patch @@ -0,0 +1,70 @@ +From a1c889dd6fb04d70439074a9399c9ea8f29f2cdb Mon Sep 17 00:00:00 2001 +From: Richard Yao <ryao@cs.stonybrook.edu> +Date: Wed, 16 May 2012 18:16:02 -0400 +Subject: [PATCH] Revert Disable direct reclaim for z_wr_* threads + +This commit used PF_MEMALLOC to prevent a memory reclaim deadlock. +However, commit 49be0ccf1fdc2ce852271d4d2f8b7a9c2c4be6db eliminated +the invocation of __cv_init(), which was the cause of the deadlock. +PF_MEMALLOC has the side effect of permitting pages from ZONE_DMA +to be allocated. The use of PF_MEMALLOC was found to cause stability +problems when doing swap on zvols. Since this technique is known to +cause problems and no longer fixes anything, we revert it. + +Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu> +Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> +Issue #726 +--- + include/sys/zfs_context.h | 1 - + module/zfs/spa.c | 9 +++------ + 2 files changed, 3 insertions(+), 7 deletions(-) + +diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h +index e4af6fc..77dded3 100644 +--- a/include/sys/zfs_context.h ++++ b/include/sys/zfs_context.h +@@ -382,7 +382,6 @@ extern kstat_t *kstat_create(char *, int, + #define TASKQ_DYNAMIC 0x0004 /* Use dynamic thread scheduling */ + #define TASKQ_THREADS_CPU_PCT 0x0008 /* Scale # threads by # cpus */ + #define TASKQ_DC_BATCH 0x0010 /* Mark threads as batch */ +-#define TASKQ_NORECLAIM 0x0020 /* Disable direct memory reclaim */ + + #define TQ_SLEEP KM_SLEEP /* Can block for memory */ + #define TQ_NOSLEEP KM_NOSLEEP /* cannot block for memory; may fail */ +diff --git a/module/zfs/spa.c b/module/zfs/spa.c +index c33a33a..436cd26 100644 +--- a/module/zfs/spa.c ++++ b/module/zfs/spa.c +@@ -617,8 +617,9 @@ static inline int spa_load_impl(spa_t *spa, uint64_t, nvlist_t *config, + + static taskq_t * + spa_taskq_create(spa_t *spa, const char *name, enum zti_modes mode, +- uint_t value, uint_t flags) ++ uint_t value) + { ++ uint_t flags = TASKQ_PREPOPULATE; + boolean_t batch = B_FALSE; + + switch (mode) { +@@ -668,17 +669,13 @@ static inline int spa_load_impl(spa_t *spa, uint64_t, nvlist_t *config, + const zio_taskq_info_t *ztip = &zio_taskqs[t][q]; + enum zti_modes mode = ztip->zti_mode; + uint_t value = ztip->zti_value; +- uint_t flags = 0; + char name[32]; + +- if (t == ZIO_TYPE_WRITE) +- flags |= TASKQ_NORECLAIM; +- + (void) snprintf(name, sizeof (name), + "%s_%s", zio_type_name[t], zio_taskq_types[q]); + + spa->spa_zio_taskq[t][q] = +- spa_taskq_create(spa, name, mode, value, flags); ++ spa_taskq_create(spa, name, mode, value); + } + } + } +-- +1.7.10 + |