diff options
author | N Balachandran <nbalacha@redhat.com> | 2018-06-22 10:42:42 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2018-06-29 11:10:47 +0000 |
commit | b3c2116d99a5c049e4ee0f88f35440258b49496e (patch) | |
tree | 20215379c379842c07746bda8c3bea3c54024c83 /xlators/cluster/dht/src/dht-common.h | |
parent | c0e66dddcd8964871e0d574f927684ee7e3c4904 (diff) |
cluster/dht: Do not try to use up the readdirp buffer
DHT attempts to use up the entire buffer in readdirp before
unwinding in an attempt to reduce the number of calls.
However, this has 2 disadvantages:
1. This can cause a stack overflow when parallel readdir
is enabled. If the buffer only has a little space,rda can send back
only one or two entries. If those entries are stripped out by
dht_readdirp_cbk (linkto files for example) it will once again
wind down to rda in an attempt to fill the buffer before unwinding to FUSE.
This process can continue for several iterations, causing the stack
to grow and eventually overflow, causing the process to crash.
2. If parallel readdir is disabled, dht could send readdirp
calls with small buffers to the bricks, thus increasing the
number of network calls.
We are therefore reverting to the existing behaviour.
Please note, this only mitigates the stack overflow, it does
not prevent it from happening. This is still possible if
a subvol has thousands of linkto files for instance.
Change-Id: I291bc181c5249762d0c4fe27fa4fc2631166adf5
fixes: bz#1593548
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.h')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index 9a4734e1ee2..43bceb9fd2d 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -377,10 +377,6 @@ struct dht_local { call_stub_t *stub; int32_t parent_disk_layout[4]; - /* To hold dentries of readdir spawning across subvols */ - gf_dirent_t entries; - size_t filled; - /* rename rollback */ int *ret_cache ; |