1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "@(#)list_ops.c 1.6 09/05/26 SMI" 28 29 #include "diskomizer64mpism.h" 30 #include "list_ops.h" 31 32 void 33 add_to_aio_list(struct aioqtop *list, struct aio_str *aiop) 34 { 35 aiop->next = NULL; 36 aiop->prev = list->tail; 37 if (list->tail != NULL) { 38 (list->tail)->next = aiop; 39 } else { 40 /* if tail is NULL the queue must be empty */ 41 assert(list->head == NULL); 42 list->head = aiop; 43 } 44 list->tail = aiop; 45 } 46 47 void 48 remove_from_aio_list(struct aioqtop *list, struct aio_str *aiop) 49 { 50 if (aiop->prev == NULL) { 51 assert(aiop == list->head); 52 list->head = aiop->next; 53 } else { 54 aiop->prev->next = aiop->next; 55 } 56 if (aiop->next == NULL) { 57 assert(aiop == list->tail); 58 list->tail = aiop->prev; 59 } else { 60 aiop->next->prev = aiop->prev; 61 } 62 aiop->prev = aiop->next = NULL; 63 } 64 65 int 66 is_aio_on_list(struct aioqtop *list) 67 { 68 return (list->head == NULL ? 0 : 1); 69 } 70 71 struct aio_str * 72 pop_from_aio_list(struct aioqtop *list) 73 { 74 struct aio_str *item; 75 76 if ((item = list->head) != NULL) { 77 remove_from_aio_list(list, item); 78 } 79 return (item); 80 } 81