Re: [patch]raid5: fix stripe release order

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 25 Jul 2013 16:26:42 +0800 Shaohua Li <shli@xxxxxxxxxx> wrote:

> 
> patch "make release_stripe lockless" changes the order stripes are released.
> Originally I thought block layer can take care of request merge, but it appears
> there are still some requests not merged. It's easy to fix the order.
> 
> Signed-off-by: Shaohua Li <shli@xxxxxxxxxxxx>
> ---
>  drivers/md/raid5.c    |    1 +
>  include/linux/llist.h |    1 +
>  lib/llist.c           |   27 +++++++++++++++++++++++++++
>  3 files changed, 29 insertions(+)
> 
> Index: linux/include/linux/llist.h
> ===================================================================
> --- linux.orig/include/linux/llist.h	2013-07-24 09:09:41.014384439 +0800
> +++ linux/include/linux/llist.h	2013-07-25 15:09:03.109026773 +0800
> @@ -172,4 +172,5 @@ static inline struct llist_node *llist_d
>  
>  extern struct llist_node *llist_del_first(struct llist_head *head);
>  
> +extern struct llist_node *llist_reverse_order(struct llist_node *head);
>  #endif /* LLIST_H */
> Index: linux/lib/llist.c
> ===================================================================
> --- linux.orig/lib/llist.c	2013-07-24 09:09:41.062383834 +0800
> +++ linux/lib/llist.c	2013-07-25 16:08:40.096054565 +0800
> @@ -81,3 +81,30 @@ struct llist_node *llist_del_first(struc
>  	return entry;
>  }
>  EXPORT_SYMBOL_GPL(llist_del_first);
> +
> +/*
> + * llist_reverse_order - reverse llist order
> + * @head: list head
> + *
> + * Return reversed list head
> + */
> +struct llist_node *llist_reverse_order(struct llist_node *head)
> +{
> +	struct llist_node *second, *third;
> +
> +	if (head == NULL || head->next == NULL)
> +		return head;
> +	second = head->next;
> +	head->next = NULL;
> +
> +	do {
> +		third = second->next;
> +		second->next = head;
> +
> +		head = second;
> +		second = third;
> +	} while (second);
> +
> +	return head;
> +}
> +EXPORT_SYMBOL_GPL(llist_reverse_order);
> Index: linux/drivers/md/raid5.c
> ===================================================================
> --- linux.orig/drivers/md/raid5.c	2013-07-25 15:02:38.289865404 +0800
> +++ linux/drivers/md/raid5.c	2013-07-25 15:35:33.201040089 +0800
> @@ -247,6 +247,7 @@ static int release_stripe_list(struct r5
>  	struct llist_node *head;
>  
>  	head = llist_del_all(&conf->released_stripes);
> +	head = llist_reverse_order(head);
>  	while (head) {
>  		sh = llist_entry(head, struct stripe_head, release_list);
>  		head = llist_next(head);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Makes sense.
Applied- thanks.

NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux