diff options
Diffstat (limited to 'libglusterfs/src/list.h')
| -rw-r--r-- | libglusterfs/src/list.h | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/libglusterfs/src/list.h b/libglusterfs/src/list.h index 794586e35f6..04b4047129f 100644 --- a/libglusterfs/src/list.h +++ b/libglusterfs/src/list.h @@ -45,19 +45,29 @@ list_add_tail (struct list_head *new, struct list_head *head)  } +/* This function will insert the element to the list in a order. +   Order will be based on the compare function provided as a input. +   If element to be inserted in ascending order compare should return: +    0: if both the arguments are equal +   >0: if first argument is greater than second argument +   <0: if first argument is less than second argument */  static inline void  list_add_order (struct list_head *new, struct list_head *head,                  int (*compare)(struct list_head *, struct list_head *))  { -        struct list_head *pos = head->next; +        struct list_head *pos = head->prev;          while ( pos != head ) { -                if (compare(new, pos) <= 0) +                if (compare(new, pos) >= 0)                          break; -                pos = pos->next; + +                /* Iterate the list in the reverse order. This will have +                   better efficiency if the elements are inserted in the +                   ascending order */ +                pos = pos->prev;          } -        list_add_tail(new, pos); +        list_add (new, pos);  }  static inline void  | 
