File: [Development] / xfs-cmds / xfsdump / common / hsmapi.h (download)
Revision 1.2, Thu May 4 17:38:07 2006 UTC (11 years, 5 months ago) by wkendall
Branch: MAIN
Changes since 1.1: +83 -0
lines
Change xfsrestore to use the DMF NOMIGR (no-migrate) attribute when
restoring DMF files. This will prevent DMF from touching the file
while it is being restored, and will also prevent DMF from viewing
the file as invalid which could cause false errors to be reported
by DMF during a restore. These changes are being placed in the
hsmapi.c file to isolate the DMF-specific code from the rest of
xfsdump.
|
/*
* Copyright (c) 2000-2004 Silicon Graphics, Inc.
* All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it would be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef HSMAPI_H
#define HSMAPI_H
#include <xfs/libxfs.h>
#include <xfs/jdm.h>
#include "types.h"
#include "global.h"
#include "content.h"
#include "content_inode.h"
#define HSM_API_VERSION_1 1 /* only version supported so far */
typedef void hsm_fs_ctxt_t; /* opaque HSM filesystem context */
typedef void hsm_f_ctxt_t; /* opaque HSM file context */
/******************************************************************************
* Name
* HsmInitFsysContext - allocate and initialize an HSM filesystem context
*
* Description
* HsmInitFsysContext allocates and initializes an HSM filesystem
* context to hold all filesystem information that might later be needed
* by the other HSM routines. The context is read-only, and can be shared
* by multiple xfsdump dump streams. It should eventually be freed by
* calling HsmDeleteFsysContext(). The caller must provide the mount
* point of the filesystem to be dumped and the HSM API version that
* xfsdump was compiled with.
*
* Note: The restore routines do not require an HSM filesystem context.
*
* Returns
* != NULL, then a pointer to the filesystem context that was allocated.
* == NULL, either the HSM libary is not compatible with xfsdump, or
* the filesystem is not under HSM management.
******************************************************************************/
extern hsm_fs_ctxt_t *
HsmInitFsysContext(
const char *mountpoint,
int dumpversion);
/******************************************************************************
* Name
* HsmDeleteFsysContext - delete an HSM filesystem context
*
* Description
* HsmDeleteFsysContext releases all storage previously allocated to a
* HSM filesystem context via HsmInitFsysContext.
*
* Returns
* None.
******************************************************************************/
extern void
HsmDeleteFsysContext(
hsm_fs_ctxt_t *contextp);
/******************************************************************************
* Name
* HsmEstimateFileSpace - return estimated offline file size
*
* Description
* HsmEstimateFileSpace is called from within estimate_dump_space() only
* if -a is selected. It estimates the number of bytes needed to dump
* the file assuming that all dual-residency data will be dumped as holes.
*
* Returns
* != 0, then *bytes contains the estimated size of the file in bytes.
* == 0, then no estimate made. Caller should use his default estimator.
******************************************************************************/
extern int
HsmEstimateFileSpace(
hsm_fs_ctxt_t *contextp,
const xfs_bstat_t *statp,
off64_t *bytes);
/******************************************************************************
* Name
* HsmEstimateFileOffset - return estimated file offset
*
* Description
* HsmEstimateFileOffset is called from within quantity2offset() only
* if -a is selected. It estimates the offset within the file that has
* 'bytecount' bytes of physical data preceding it assuming that all
* dual-residency data in the file will be dumped as holes.
*
* Returns
* != 0, then *byteoffset contains the estimated offset within the file.
* == 0, then no estimate made. Caller should use his default estimator.
******************************************************************************/
extern int
HsmEstimateFileOffset(
hsm_fs_ctxt_t *contextp,
const xfs_bstat_t *statp,
off64_t bytecount,
off64_t *byteoffset);
/******************************************************************************
* Name
* HsmAllocateFileContext - allocate an HSM file context
*
* Description
* HsmAllocateFileContext mallocs the maximum-sized file context that
* might later be needed by HsmInitFileContext(). The context is
* read-write. Each xfsdump stream must have its own file context. This
* context should eventually be freed by calling HsmDeleteFileContext().
* The caller must provide the HSM filesystem context for the filesystem
* being dumped.
*
* Note: The restore routines do not require an HSM file context.
*
* Returns
* != NULL, then a pointer to the file context that was allocated.
******************************************************************************/
extern hsm_f_ctxt_t *
HsmAllocateFileContext(
hsm_fs_ctxt_t *contextp);
/******************************************************************************
* Name
* HsmDeleteFileContext - delete a previously created HSM file context
*
* Description
* HsmDeleteFileContext releases all storage previously allocated to a
* HSM file context via HsmAllocateFileContext.
*
* Returns
* None.
******************************************************************************/
extern void
HsmDeleteFileContext(
hsm_f_ctxt_t *contextp);
/******************************************************************************
* Name
* HsmInitFileContext - initialize the HSM context for a particular file
*
* Description
* HsmInitFileContext initializes an existing HSM file context for
* subsequent operations on a particular regular file. Other HSM routines
* use the context to access information collected by HsmInitFileContext
* about the file rather than having to recollect the file's information
* on each call.
*
* Returns
* != 0, context was created.
* == 0, if something is wrong with the file and it should not be dumped.
******************************************************************************/
extern int
HsmInitFileContext(
hsm_f_ctxt_t *contextp,
const xfs_bstat_t *statp);
/******************************************************************************
* Name
* HsmModifyInode - modify a xfs_bstat_t to make a file appear offline
*
* Description
* HsmModifyInode uses the context provided by a previous
* HsmInitFileContext call to determine how to modify a xfs_bstat_t
* structure to make a dual-residency HSM file appear to be offline.
*
* Returns
* != 0, xfs_bstat_t structure was modified.
* == 0, if something is wrong with the file and it should not be dumped.
******************************************************************************/
extern int
HsmModifyInode(
hsm_f_ctxt_t *contextp,
xfs_bstat_t *statp);
/******************************************************************************
* Name
* HsmModifyExtentMap - modify getbmapx array to make file appear offline
*
* Description
* HsmModifyExtentMap uses the context provided by a previous
* HsmInitFileContext call to determine how to modify a contiguous array
* of getbmapx structures to make a dual-residency HSM file appear to
* be offline.
*
* Returns
* != 0, getbmapx array was successfully modified.
* == 0, if something is wrong with the file and it should not be dumped.
******************************************************************************/
extern int
HsmModifyExtentMap(
hsm_f_ctxt_t *contextp,
struct getbmapx *bmap);
/******************************************************************************
* Name
* HsmFilterExistingAttribute - filter out unwanted extended attributes
*
* Description
* HsmFilterExistingAttribute uses the context provided by a previous
* HsmInitFileContext call to determine whether or not the extended
* attribute with name 'namep' should be included in a file's dump image.
* (An extended attribute can be modified within the dump by filtering
* it out with this routine, then adding the new version of the attribute
* back with HsmAddNewAttribute.)
*
* Note: this routine must be idempotent. It is possible that xfsdump
* will call this routine a second time for the same attribute if after
* the first call it discovers that there isn't room in its buffer to
* hold the attribute value.
*
* Returns
* != 0, the attribute was successfully examined. If '*skip_entry' is
* non-zero, xfsdump will not add this attribute to the dump.
* == 0, if something is wrong with the file and it should not be dumped.
******************************************************************************/
extern int
HsmFilterExistingAttribute(
hsm_f_ctxt_t *hsm_f_ctxtp,
const char *namep, /* name of attribute to filter */
u_int32_t valuesz, /* attribute's current value size */
int flag, /* ext attr flags */
int *skip_entry);
/******************************************************************************
* Name
* HsmAddNewAttribute - add zero or more HSM attributes to a file's dump
*
* Description
* HsmAddNewAttribute uses the context provided by a previous
* HsmInitFileContext call to determine whether or not additional HSM
* extended attributes need to be added to a file's dump image. On the
* first call for a file, 'cursor' will be zero. xfsdump will increment
* 'cursor' by one each time it asks for a new attribute. When no more
* attributes are to be added, '*namepp' should be set to NULL.
*
* Note: this routine must be idempotent. It is possible that xfsdump
* will call this routine a second time using the same cursor value if
* it discovers that there isn't room in its buffer to hold the attribute
* value it was given in the first call.
*
* Returns
* != 0, call was successful. If '*namepp' is non-NULL, then it is the
* name of an attribute to be added to the file's dump. '*valuep'
* points the the value of the attribute, and '*valueszp' is the
* value's size. If '*namep* is NULL, then there are no more
* attributes to be added.
* == 0, if something is wrong with the file and it should not be dumped.
******************************************************************************/
extern int
HsmAddNewAttribute(
hsm_f_ctxt_t *hsm_f_ctxtp,
int cursor,
int flag, /* ext attr flags */
char **namepp, /* pointer to new attribute name */
char **valuepp, /* pointer to its value */
u_int32_t *valueszp); /* pointer to the value size */
/******************************************************************************
* Name
* HsmBeginRestoreFile
*
* Description
* HsmBeginRestoreFile is called after a file is created but before any
* data has been restored to it. The hsm_flagp param can be used to
* keep track of limited state between calls to the HSM restore routines.
*
* Note that this does not require a filesystem or file context like the
* HSM calls for xfsdump. This is currently a crude interface to satisfy
* a specific need. It can be generalized at a later time, if necessary.
*
* Returns
* None.
******************************************************************************/
extern void
HsmBeginRestoreFile(
bstat_t *statp,
int fd,
int *hsm_flagp);
/******************************************************************************
* Name
* HsmRestoreAttribute
*
* Description
** HsmRestoreAttribute is called when restoring an extended attribute.
* The hsm_flagp param can be used to keep track of limited state
* between calls to the HSM restore routines.
*
* Note that this does not require a filesystem or file context like the
* HSM calls for xfsdump. This is currently a crude interface to satisfy
* a specific need. It can be generalized at a later time, if necessary.
*
* Returns
* None.
******************************************************************************/
extern void
HsmRestoreAttribute(
int flag, /* ext attr flags */
char *namep, /* pointer to new attribute name */
int *hsm_flagp);
/******************************************************************************
* Name
* HsmEndRestoreFile
*
* Description
* HsmEndRestoreFile is called when all data and extended attributes
* have been restored. The hsm_flagsp param can be used to keep track
* of limited state between calls to the HSM restore routines.
*
* Note that this does not require a filesystem or file context like the
* HSM calls for xfsdump. This is currently a crude interface to satisfy
* a specific need. It can be generalized at a later time, if necessary.
*
* Returns
* None.
******************************************************************************/
extern void
HsmEndRestoreFile(
char *path,
int fd,
int *hsm_flagp);
#endif /* HSMAPI_H */