[Bugs] [Bug 1226880] Fix infinite looping in shard_readdir(p) on '/'

bugzilla at redhat.com bugzilla at redhat.com
Wed Jun 3 03:46:42 UTC 2015


https://bugzilla.redhat.com/show_bug.cgi?id=1226880



--- Comment #2 from Anand Avati <aavati at redhat.com> ---
COMMIT: http://review.gluster.org/11031 committed in release-3.7 by Pranith
Kumar Karampuri (pkarampu at redhat.com) 
------
commit 9d74710581262a570547f1dc6bba4e1750871864
Author: Krutika Dhananjay <kdhananj at redhat.com>
Date:   Mon May 18 18:06:32 2015 +0530

    features/shard: Fix issue with readdir(p) fop

            Backport of: http://review.gluster.org/10809

    Problem:

    When readdir(p) is performed on '/' and ".shard" happens to be
    the last of the entries read in a given iteration of dht_readdir(p)
    (in other words the entry with the highest offset in the dirent list
    sorted in ascending order of d_offs), shard xlator would delete this
    entry as part of handling the call so as to avoid exposing its presence
    to the application. This would cause xlators above (like fuse,
    readdir-ahead etc) to wind the next readdirp as part of the same req
    at an offset which is (now) the highest d_off (post deletion of .shard)
    from the previously unwound list of entries. This offset would be less
    than that of ".shard" and therefore cause /.shard to be read once again.
    If by any chance this happens to be the only entry until end-of-directory,
    shard xlator would delete this entry and unwind with 0 entries, causing the
    xlator(s) above to think there is nothing more to readdir and the fop is
    complete. This would prevent DHT from gathering entries from the rest of
    its subvolumes, causing some entries to disappear.

    Fix:

    At the level of shard xlator, if ".shard" happens to be the last entry,
    make shard xlator wind another readdirp at offset equal to d_off of
    ".shard". That way, if ".shard" happens to be the only other entry under
'/'
    until end-of-directory, DHT would receive an op_ret=0. This would enable it
    to wind readdir(p) on the rest of its subvols and gather the complete
picture.

    Also, fixed a bug in shard_lookup_cbk() wherein file_size should be fetched
    unconditionally in cbk since it is set unconditionally in the wind path,
failing
    which, lookup would be unwound with ia_size and ia_blocks only equal to
that of
    the base file.

    Change-Id: I0ff0b48b6c9c12edbef947b6840a77a54c131650
    BUG: 1226880
    Signed-off-by: Krutika Dhananjay <kdhananj at redhat.com>
    Reviewed-on: http://review.gluster.org/11031
    Tested-by: Gluster Build System <jenkins at build.gluster.com>
    Reviewed-by: Pranith Kumar Karampuri <pkarampu at redhat.com>
    Tested-by: NetBSD Build System <jenkins at build.gluster.org>

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are on the CC list for the bug.


More information about the Bugs mailing list