2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Use is subject to license terms.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * BSD 3 Clause License
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Copyright (c) 2007, The Storage Networking Industry Association.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Redistribution and use in source and binary forms, with or without
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * modification, are permitted provided that the following conditions
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions of source code must retain the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Redistributions in binary form must reproduce the above copyright
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * notice, this list of conditions and the following disclaimer in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the documentation and/or other materials provided with the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * distribution.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * - Neither the name of The Storage Networking Industry Association (SNIA)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * nor the names of its contributors may be used to endorse or promote
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * products derived from this software without specific prior written
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * permission.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * POSSIBILITY OF SUCH DAMAGE.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdarextern tlm_chain_link_t *tlm_un_ref(tlm_chain_link_t *old_top,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * Mutex for concurrent access to job_stats
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * get the number of libraries
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar for (lib = 1; lib <= tlm_info.ti_library_count; lib++) {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * get the library whose number matches
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * get the info about this drive
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * get the info about this slot
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * add a link to the INFO chain
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar new_link = ndmp_malloc(sizeof (tlm_chain_link_t));
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar job_stats = ndmp_malloc(sizeof (tlm_job_stats_t));
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar (void) strlcpy(job_stats->js_job_name, name, TLM_MAX_BACKUP_JOB_NAME);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_chain_link_t *next_link = tlm_info.ti_job_stats;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_chain_link_t *prev_link = next_link->tc_prev;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * make sure this Job Stats buffer is not deleted while we use it
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * our tables are empty
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if (strcmp(job_stats->js_job_name, name) == 0) {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar "TAPE BACKUP> Ref for job [%s] was not found", name);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * remove a link to the INFO chain
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar " Internal error for job [%s], could not delete", name);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar if (strcmp(job_stats->js_job_name, name) == 0) {
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar "TAPE BACKUP> Delete for job [%s] was not found", name);
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * one party does not care about this blob, can we let it go?
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdartlm_un_ref(tlm_chain_link_t *old_top, tlm_chain_link_t *link)
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * count down the number of
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * interested parties for this blob
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * there is still interest in this blob,
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * no change yet
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * returning "old_top" means there is no change in the links
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * no one cares about this data anymore
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * find out how to delete it
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * If there are one or two elements in the list, then
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the prev and next pointers point to one element in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the list, the element itself and the other element
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * correspondingly. So we must distinguish if there
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * are only one or two elements in the list. If
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * either of the 'prev' or 'next' pointers point to
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the link itself, then we have only one element in
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * there is only this one link in the chain
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * delete this and the chain is empty
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar NDMP_LOG(LOG_DEBUG, "TAPE BACKUP> un_ref target not found.");
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * the following section is global, but not really part of the
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * public interface. Use of this outside of the tlm_*.c files
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * is for special cases only.
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * add a new tape library data blob to the list of libraries
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * returns the new tape library data blob just created
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_library_t **p_library = &tlm_info.ti_library;
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_library_t *library = ndmp_malloc(sizeof (tlm_library_t));
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * add a new tape drive data blob to the list of drives in a library
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * returns the new tape drive data blob just created
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar tlm_drive_t *drive = ndmp_malloc(sizeof (tlm_drive_t));
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * add a new tape slot data blob to the list of slots in a library
2654012f83cec5dc15b61dfe3e4a4915f186e7a6Reza Sabdar * returns the new tape slot data blob just created