lkml.org 
[lkml]   [2010]   [Sep]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/23] Hibernation: Swap iteration functions.
    Date
    Add the data structure 'storage_position' and routines that allow
    a caller to iterate over swap in sector order. Note that calling
    reset_storage_pos only resets the position. next_swapdev_block
    must also be called to get the address of the first (and subsequent
    sectors).

    Signed-off-by: Nigel Cunningham <nigel@tuxonice.net>
    ---
    kernel/power/swap.c | 39 +++++++++++++++++++++++++++++++++++++++
    1 files changed, 39 insertions(+), 0 deletions(-)
    diff --git a/kernel/power/swap.c b/kernel/power/swap.c
    index caf4db8..4e5f6e3 100644
    --- a/kernel/power/swap.c
    +++ b/kernel/power/swap.c
    @@ -68,6 +68,45 @@ struct swsusp_extent {

    static struct rb_root swsusp_extents = RB_ROOT;

    +struct storage_position {
    + struct rb_node *node;
    + struct swsusp_extent *cur_ext;
    + unsigned long offset;
    +};
    +
    +static struct storage_position pos;
    +
    +static void reset_storage_pos(void)
    +{
    + pos.node = rb_first(&swsusp_extents);
    +
    + if (!pos.node) {
    + pos.cur_ext = NULL;
    + pos.offset = 0;
    + return;
    + }
    +
    + pos.cur_ext = container_of(pos.node, struct swsusp_extent, node);
    + pos.offset = pos.cur_ext->start;
    +}
    +
    +static sector_t next_swapdev_block(void)
    +{
    + if (!pos.node)
    + return 0;
    +
    + if (pos.cur_ext->end >= pos.offset)
    + return pos.offset++;
    +
    + pos.node = rb_next(pos.node);
    + if (!pos.node)
    + return 0;
    +
    + pos.cur_ext = container_of(pos.node, struct swsusp_extent, node);
    + pos.offset = pos.cur_ext->start;
    + return pos.offset;
    +}
    +
    static int swsusp_extents_insert(unsigned long swap_offset)
    {
    struct rb_node **new = &(swsusp_extents.rb_node);
    --
    1.7.0.4


    \
     
     \ /
      Last update: 2010-09-27 20:11    [from the cache]
    ©2003-2011 Jasper Spaans