[16] | 1 | /* IBM_PROLOG_BEGIN_TAG */ |
---|
| 2 | /* This is an automatically generated prolog. */ |
---|
| 3 | /* */ |
---|
| 4 | /* */ |
---|
| 5 | /* */ |
---|
| 6 | /* Licensed Materials - Property of IBM */ |
---|
| 7 | /* */ |
---|
| 8 | /* (C) COPYRIGHT International Business Machines Corp. 1998,2007 */ |
---|
| 9 | /* All Rights Reserved */ |
---|
| 10 | /* */ |
---|
| 11 | /* US Government Users Restricted Rights - Use, duplication or */ |
---|
| 12 | /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ |
---|
| 13 | /* */ |
---|
| 14 | /* IBM_PROLOG_END_TAG */ |
---|
| 15 | /* @(#)42 1.1.5.1 src/avs/fs/mmfs/ts/util/gpfs.h, mmfs, avs_rgpfs24, rgpfs24s011a 3/13/07 10:16:05 */ |
---|
| 16 | /* |
---|
| 17 | * Library calls for GPFS interfaces |
---|
| 18 | */ |
---|
| 19 | #ifndef H_GPFS |
---|
| 20 | #define H_GPFS |
---|
| 21 | |
---|
| 22 | #ifdef __cplusplus |
---|
| 23 | extern "C" { |
---|
| 24 | #endif |
---|
| 25 | |
---|
| 26 | #include <sys/types.h> |
---|
| 27 | #include <sys/stat.h> |
---|
| 28 | |
---|
| 29 | /* Define maximum length of the name for a GPFS named object, such |
---|
| 30 | as a snapshot, storage pool or fileset. The name is a null-terminated |
---|
| 31 | character string, which is not include in the max length */ |
---|
| 32 | #define GPFS_MAXNAMLEN 255 |
---|
| 33 | |
---|
| 34 | /* Define maximum length of the path to a GPFS named object |
---|
| 35 | such as a snapshot or fileset. If the absolute path name exceeds |
---|
| 36 | this limit, then use a relative path name. The path is a null-terminated |
---|
| 37 | character string, which is not included in the max length */ |
---|
| 38 | #define GPFS_MAXPATHLEN 1023 |
---|
| 39 | |
---|
| 40 | /* ASCII code for "GPFS" in the struct statfs f_type field */ |
---|
| 41 | #define GPFS_SUPER_MAGIC 0x47504653 |
---|
| 42 | |
---|
| 43 | /* GPFS inode attributes */ |
---|
| 44 | typedef unsigned int gpfs_mode_t; |
---|
| 45 | typedef unsigned int gpfs_uid_t; |
---|
| 46 | typedef unsigned int gpfs_gid_t; |
---|
| 47 | typedef unsigned int gpfs_ino_t; |
---|
| 48 | typedef unsigned int gpfs_gen_t; |
---|
| 49 | typedef unsigned int gpfs_dev_t; |
---|
| 50 | typedef unsigned int gpfs_mask_t; |
---|
| 51 | typedef unsigned int gpfs_pool_t; |
---|
| 52 | typedef long long gpfs_off64_t; |
---|
| 53 | typedef struct stat64 stat64_t; |
---|
| 54 | |
---|
| 55 | /* open source interfaces */ |
---|
| 56 | #include <gpfs_gpl.h> |
---|
| 57 | |
---|
| 58 | typedef struct gpfs_timestruc |
---|
| 59 | { |
---|
| 60 | unsigned int tv_sec; |
---|
| 61 | unsigned int tv_nsec; |
---|
| 62 | } gpfs_timestruc_t; |
---|
| 63 | |
---|
| 64 | |
---|
| 65 | /* Define a version number for the directory entry data to allow |
---|
| 66 | future changes in this structure. Careful callers should also use |
---|
| 67 | the d_reclen field for the size of the structure rather than sizeof, |
---|
| 68 | to allow some degree of forward compatibility */ |
---|
| 69 | #define GPFS_D_VERSION 1 |
---|
| 70 | |
---|
| 71 | typedef struct gpfs_direntx |
---|
| 72 | { |
---|
| 73 | int d_version; /* this struct's version */ |
---|
| 74 | unsigned short d_reclen; /* actual size of this struct including |
---|
| 75 | null terminated variable length d_name */ |
---|
| 76 | unsigned short d_type; /* Types are defined below */ |
---|
| 77 | gpfs_ino_t d_ino; /* File inode number */ |
---|
| 78 | gpfs_gen_t d_gen; /* Generation number for the inode */ |
---|
| 79 | char d_name[256]; /* null terminated variable length name */ |
---|
| 80 | } gpfs_direntx_t; |
---|
| 81 | |
---|
| 82 | /* File types for d_type field in gpfs_direntx_t */ |
---|
| 83 | #define GPFS_DE_OTHER 0 |
---|
| 84 | #define GPFS_DE_DIR 4 |
---|
| 85 | #define GPFS_DE_REG 8 |
---|
| 86 | #define GPFS_DE_LNK 10 |
---|
| 87 | |
---|
| 88 | |
---|
| 89 | /* Define a version number for the iattr data to allow future changes |
---|
| 90 | in this structure. Careful callers should also use the ia_reclen field |
---|
| 91 | for the size of the structure rather than sizeof, to allow some degree |
---|
| 92 | of forward compatibility */ |
---|
| 93 | #define GPFS_IA_VERSION 1 |
---|
| 94 | |
---|
| 95 | typedef struct gpfs_iattr |
---|
| 96 | { |
---|
| 97 | int ia_version; /* this struct version */ |
---|
| 98 | int ia_reclen; /* sizeof this structure */ |
---|
| 99 | int ia_checksum; /* validity check on iattr struct */ |
---|
| 100 | gpfs_mode_t ia_mode; /* access mode */ |
---|
| 101 | gpfs_uid_t ia_uid; /* owner uid */ |
---|
| 102 | gpfs_gid_t ia_gid; /* owner gid */ |
---|
| 103 | gpfs_ino_t ia_inode; /* file inode number */ |
---|
| 104 | gpfs_gen_t ia_gen; /* inode generation number */ |
---|
| 105 | short ia_nlink; /* number of links */ |
---|
| 106 | short ia_flags; /* Flags (defined below) */ |
---|
| 107 | int ia_blocksize; /* preferred block size for io */ |
---|
| 108 | gpfs_mask_t ia_mask; /* Initial attribute mask (not used) */ |
---|
| 109 | gpfs_off64_t ia_size; /* file size in bytes */ |
---|
| 110 | gpfs_off64_t ia_blocks; /* 512 byte blocks of disk held by file */ |
---|
| 111 | gpfs_timestruc_t ia_atime; /* time of last access */ |
---|
| 112 | gpfs_timestruc_t ia_mtime; /* time of last data modification */ |
---|
| 113 | gpfs_timestruc_t ia_ctime; /* time of last status change */ |
---|
| 114 | gpfs_dev_t ia_rdev; /* id of device */ |
---|
| 115 | unsigned int ia_xperm; /* extended attributes (defined below) */ |
---|
| 116 | int ia_modsnapid; |
---|
| 117 | unsigned int ia_filesetid; /* fileset ID */ |
---|
| 118 | unsigned int ia_datapoolid; /* storage pool ID for data */ |
---|
| 119 | } gpfs_iattr_t; |
---|
| 120 | |
---|
| 121 | /* Define flags for inode attributes */ |
---|
| 122 | #define GPFS_IAFLAG_SNAPDIR 0x0001 /* (obsolete) */ |
---|
| 123 | #define GPFS_IAFLAG_USRQUOTA 0x0002 /* inode is a user quota file */ |
---|
| 124 | #define GPFS_IAFLAG_GRPQUOTA 0x0004 /* inode is a group quota file */ |
---|
| 125 | #define GPFS_IAFLAG_ERROR 0x0008 /* error reading inode */ |
---|
| 126 | /* Define flags for inode replication attributes */ |
---|
| 127 | #define GPFS_IAFLAG_FILESET_ROOT 0x0010 /* root dir of a fileset */ |
---|
| 128 | #define GPFS_IAFLAG_NO_SNAP_RESTORE 0x0020 /* don't restore from snapshots */ |
---|
| 129 | #define GPFS_IAFLAG_FILESETQUOTA 0x0040 /* inode is a fileset quota file */ |
---|
| 130 | #define GPFS_IAFLAG_COMANAGED 0x0080 /* file data is co-managed */ |
---|
| 131 | #define GPFS_IAFLAG_ILLPLACED 0x0100 /* may not be properly placed */ |
---|
| 132 | #define GPFS_IAFLAG_REPLMETA 0x0200 /* metadata replication set */ |
---|
| 133 | #define GPFS_IAFLAG_REPLDATA 0x0400 /* data replication set */ |
---|
| 134 | #define GPFS_IAFLAG_EXPOSED 0x0800 /* may have data on suspended disks */ |
---|
| 135 | #define GPFS_IAFLAG_ILLREPLICATED 0x1000 /* may not be properly replicated */ |
---|
| 136 | #define GPFS_IAFLAG_UNBALANCED 0x2000 /* may not be properly balanced */ |
---|
| 137 | #define GPFS_IAFLAG_DATAUPDATEMISS 0x4000 /* has stale data blocks on |
---|
| 138 | unavailable disk */ |
---|
| 139 | #define GPFS_IAFLAG_METAUPDATEMISS 0x8000 /* has stale metadata on |
---|
| 140 | unavailable disk */ |
---|
| 141 | /* Define flags for extended attributes */ |
---|
| 142 | #define GPFS_IAXPERM_ACL 0x0001 /* file has acls */ |
---|
| 143 | #define GPFS_IAXPERM_XATTR 0x0002 /* file has extended attributes */ |
---|
| 144 | #define GPFS_IAXPERM_DMATTR 0x0004 /* file has dm attributes */ |
---|
| 145 | #define GPFS_IAXPERM_DOSATTR 0x0008 /* file has non-default dos attrs */ |
---|
| 146 | #define GPFS_IAXPERM_RPATTR 0x0010 /* file has restore policy attrs */ |
---|
| 147 | |
---|
| 148 | |
---|
| 149 | |
---|
| 150 | /* Define pointers to interface types */ |
---|
| 151 | typedef struct gpfs_fssnap_handle gpfs_fssnap_handle_t; |
---|
| 152 | typedef struct gpfs_iscan gpfs_iscan_t; |
---|
| 153 | typedef struct gpfs_ifile gpfs_ifile_t; |
---|
| 154 | typedef struct gpfs_restore gpfs_restore_t; |
---|
| 155 | |
---|
| 156 | typedef struct gpfs_fssnap_id |
---|
| 157 | { |
---|
| 158 | char opaque[48]; |
---|
| 159 | } gpfs_fssnap_id_t; |
---|
| 160 | |
---|
| 161 | |
---|
| 162 | /* Define extended return codes for gpfs backup & restore |
---|
| 163 | calls without an explicit return code will return the value in errno */ |
---|
| 164 | #define GPFS_ERRNO_BASE 190 |
---|
| 165 | #define GPFS_E_INVAL_FSSNAPID (GPFS_ERRNO_BASE+0) /* invalid fssnap id */ |
---|
| 166 | #define GPFS_E_INVAL_ISCAN (GPFS_ERRNO_BASE+1) /* invalid iscan pointer */ |
---|
| 167 | #define GPFS_E_INVAL_IFILE (GPFS_ERRNO_BASE+2) /* invalid ifile pointer */ |
---|
| 168 | #define GPFS_E_INVAL_IATTR (GPFS_ERRNO_BASE+3) /* invalid iattr structure */ |
---|
| 169 | #define GPFS_E_INVAL_RESTORE (GPFS_ERRNO_BASE+4) /* invalid restore pointer */ |
---|
| 170 | #define GPFS_E_INVAL_FSSNAPHANDLE (GPFS_ERRNO_BASE+5) /* invalid fssnap handle */ |
---|
| 171 | #define GPFS_E_INVAL_SNAPNAME (GPFS_ERRNO_BASE+6) /* invalid snapshot name */ |
---|
| 172 | #define GPFS_E_FS_NOT_RESTORABLE (GPFS_ERRNO_BASE+7) /* FS is not clean */ |
---|
| 173 | #define GPFS_E_RESTORE_NOT_ENABLED (GPFS_ERRNO_BASE+8) /* Restore was not enabled */ |
---|
| 174 | #define GPFS_E_RESTORE_STARTED (GPFS_ERRNO_BASE+9) /* Restore is running */ |
---|
| 175 | |
---|
| 176 | /* Define flags parameter for get/put file attributes. |
---|
| 177 | Used by gpfs_fgetattr, gpfs_fputattr, gpfs_fputattrwithpath |
---|
| 178 | and gpfs_iputattrwithpath |
---|
| 179 | */ |
---|
| 180 | #define GPFS_ATTRFLAG_DEFAULT 0 /* default behavior */ |
---|
| 181 | #define GPFS_ATTRFLAG_NO_PLACEMENT 1 /* exclude file placement attributes */ |
---|
| 182 | |
---|
| 183 | |
---|
| 184 | /* Define structure used by gpfs_statfspool */ |
---|
| 185 | typedef struct gpfs_statfspool_s |
---|
| 186 | { |
---|
| 187 | gpfs_off64_t f_blocks; /* total data blocks in pool */ |
---|
| 188 | gpfs_off64_t f_bfree; /* free blocks in pool */ |
---|
| 189 | gpfs_off64_t f_bavail; /* free blocks avail to non-superuser */ |
---|
| 190 | gpfs_off64_t f_mblocks; /* total metadata blocks in pool */ |
---|
| 191 | gpfs_off64_t f_mfree; /* free blocks avail for system metadata */ |
---|
| 192 | int f_bsize; /* optimal storage pool block size */ |
---|
| 193 | int f_files; /* total file nodes assigned to pool */ |
---|
| 194 | gpfs_pool_t f_poolid; /* storage pool id */ |
---|
| 195 | int f_fsize; /* fundamental file system block size */ |
---|
| 196 | unsigned int f_usage; /* data and/or metadata stored in pool */ |
---|
| 197 | int f_reserved[7];/* Current unused and set to zero */ |
---|
| 198 | } gpfs_statfspool_t; |
---|
| 199 | |
---|
| 200 | #define STATFSPOOL_USAGE_DATA 0x0001 /* Pool stores user data */ |
---|
| 201 | #define STATFSPOOL_USAGE_METADATA 0x0002 /* Pool stores system metadata */ |
---|
| 202 | |
---|
| 203 | |
---|
| 204 | |
---|
| 205 | |
---|
| 206 | /* NAME: gpfs_fstat(), gpfs_stat() |
---|
| 207 | * |
---|
| 208 | * FUNCTION: Get exact stat information for a file descriptor (or filename). |
---|
| 209 | * Forces all other nodes to flush dirty data and metadata to disk. |
---|
| 210 | * Returns: 0 Successful |
---|
| 211 | * -1 Failure |
---|
| 212 | * |
---|
| 213 | * Errno: ENOSYS function not available |
---|
| 214 | * EBADF Bad file desc |
---|
| 215 | * EINVAL Not a GPFS file |
---|
| 216 | */ |
---|
| 217 | int |
---|
| 218 | gpfs_fstat(int fileDesc, |
---|
| 219 | stat64_t *buffer); |
---|
| 220 | |
---|
| 221 | int |
---|
| 222 | gpfs_stat(char *pathname, /* File pathname */ |
---|
| 223 | stat64_t *buffer); |
---|
| 224 | |
---|
| 225 | |
---|
| 226 | /* NAME: gpfs_fgetattrs() |
---|
| 227 | * |
---|
| 228 | * FUNCTION: Retrieves all extended file attributes in opaque format. |
---|
| 229 | * This function together with gpfs_fputattrs is intended for |
---|
| 230 | * use by a backup program to save (gpfs_fgetattrs) and |
---|
| 231 | * restore (gpfs_fputattrs) all extended file attributes |
---|
| 232 | * (ACLs, dmapi attributes, ...) in one call. |
---|
| 233 | * |
---|
| 234 | * Input: flags Define behavior of get attributes |
---|
| 235 | * See flag definition above. |
---|
| 236 | * |
---|
| 237 | * Returns: 0 Successful |
---|
| 238 | * -1 Failure |
---|
| 239 | * |
---|
| 240 | * Errno: ENOSYS function not available |
---|
| 241 | * ENOSPC buffer too small to return all attributes |
---|
| 242 | * *attrSizeP will be set to the size necessary |
---|
| 243 | */ |
---|
| 244 | int |
---|
| 245 | gpfs_fgetattrs(int fileDesc, |
---|
| 246 | int flags, |
---|
| 247 | void *buffer, |
---|
| 248 | int bufferSize, |
---|
| 249 | int *attrSize); |
---|
| 250 | |
---|
| 251 | |
---|
| 252 | /* NAME: gpfs_fputattrs() |
---|
| 253 | * |
---|
| 254 | * FUNCTION: Sets all extended file attributes of a file |
---|
| 255 | * and sets the file's storage pool and data replication |
---|
| 256 | * to the values saved in the extended attributes. |
---|
| 257 | * The buffer passed in should contain extended attribute data |
---|
| 258 | * that was obtained by a previous call to gpfs_fgetattrs. |
---|
| 259 | * |
---|
| 260 | * Input: flags Define behavior of put attributes |
---|
| 261 | * See flag definition above. |
---|
| 262 | * |
---|
| 263 | * Returns: 0 Successful |
---|
| 264 | * -1 Failure |
---|
| 265 | * |
---|
| 266 | * Errno: ENOSYS function not available |
---|
| 267 | * EINVAL the buffer does not contain valid attribute data |
---|
| 268 | */ |
---|
| 269 | int |
---|
| 270 | gpfs_fputattrs(int fileDesc, |
---|
| 271 | int flags, |
---|
| 272 | void *buffer); |
---|
| 273 | |
---|
| 274 | |
---|
| 275 | /* NAME: gpfs_fputattrswithpathname() |
---|
| 276 | * |
---|
| 277 | * FUNCTION: Sets all extended file attributes of a file and |
---|
| 278 | * invokes the policy engine using the file's attributes |
---|
| 279 | * saved in the extended attributes to set the file's |
---|
| 280 | * storage pool and data replication. The caller should |
---|
| 281 | * include the full path to the file, including the file name, |
---|
| 282 | * to allow rule selection based on file name or path. |
---|
| 283 | * The buffer passed in should contain extended attribute data |
---|
| 284 | * that was obtained by a previous call to gpfs_fgetattrs. |
---|
| 285 | * The flags parameter must be zero (reserved for future use). |
---|
| 286 | * |
---|
| 287 | * Input: flags Define behavior of put attributes |
---|
| 288 | * See flag definition above. |
---|
| 289 | * |
---|
| 290 | * Returns: 0 Successful |
---|
| 291 | * -1 Failure |
---|
| 292 | * |
---|
| 293 | * Errno: ENOSYS function not available |
---|
| 294 | * EINVAL the buffer does not contain valid attribute data |
---|
| 295 | */ |
---|
| 296 | int |
---|
| 297 | gpfs_fputattrswithpathname(int fileDesc, |
---|
| 298 | int flags, |
---|
| 299 | void *buffer, |
---|
| 300 | const char *pathName); |
---|
| 301 | |
---|
| 302 | |
---|
| 303 | /* NAME: gpfs_get_fssnaphandle_by_path() |
---|
| 304 | * |
---|
| 305 | * FUNCTION: Get a volatile handle to uniquely identify a filesystem |
---|
| 306 | * and snapshot by the path to the file system and snapshot |
---|
| 307 | * |
---|
| 308 | * Input: pathName: path to a file or directory in a gpfs file system |
---|
| 309 | * or to one of its snapshots |
---|
| 310 | * |
---|
| 311 | * Returns: pointer to gpfs_fssnap_handle_t (Successful) |
---|
| 312 | * NULL and errno is set (Failure) |
---|
| 313 | * |
---|
| 314 | * Errno: ENOSYS function not available |
---|
| 315 | * ENOENT invalid pathname |
---|
| 316 | * see system calls open(), fstatfs(), and malloc() ERRORS |
---|
| 317 | */ |
---|
| 318 | gpfs_fssnap_handle_t * |
---|
| 319 | gpfs_get_fssnaphandle_by_path(const char *pathName); |
---|
| 320 | |
---|
| 321 | |
---|
| 322 | /* NAME: gpfs_get_fssnaphandle_by_name() |
---|
| 323 | * |
---|
| 324 | * FUNCTION: Get a volatile handle to uniquely identify a filesystem |
---|
| 325 | * and snapshot by the file system name and snapshot name. |
---|
| 326 | * |
---|
| 327 | * Input: fsName: unique name for gpfs file system (may be specified |
---|
| 328 | * as fsName or /dev/fsName) |
---|
| 329 | * snapName: name for snapshot within that file system |
---|
| 330 | * or NULL to access the active file system rather |
---|
| 331 | * than a snapshot within the file system. |
---|
| 332 | * |
---|
| 333 | * Returns: pointer to gpfs_fssnap_handle_t (Successful) |
---|
| 334 | * NULL and errno is set (Failure) |
---|
| 335 | * |
---|
| 336 | * Errno: ENOSYS function not available |
---|
| 337 | * ENOENT invalid file system name |
---|
| 338 | * GPFS_E_INVAL_SNAPNAME invalid snapshot name |
---|
| 339 | * see system calls open(), fstatfs(), and malloc() ERRORS |
---|
| 340 | */ |
---|
| 341 | gpfs_fssnap_handle_t * |
---|
| 342 | gpfs_get_fssnaphandle_by_name(const char *fsName, |
---|
| 343 | const char *snapName); |
---|
| 344 | |
---|
| 345 | |
---|
| 346 | /* NAME: gpfs_get_fssnaphandle_by_fssnapid() |
---|
| 347 | * |
---|
| 348 | * FUNCTION: Get a volatile handle to uniquely identify a filesystem |
---|
| 349 | * and snapshot by a fssnapId created from a previous handle. |
---|
| 350 | * |
---|
| 351 | * Input: fssnapId: unique id for a file system and snapshot |
---|
| 352 | * |
---|
| 353 | * Returns: pointer to gpfs_fssnaphandle_t (Successful) |
---|
| 354 | * NULL and errno is set (Failure) |
---|
| 355 | * |
---|
| 356 | * Errno: ENOSYS function not available |
---|
| 357 | * GPFS_E_INVAL_FSSNAPID invalid snapshot id |
---|
| 358 | * see system calls open(), fstatfs(), and malloc() ERRORS |
---|
| 359 | */ |
---|
| 360 | gpfs_fssnap_handle_t * |
---|
| 361 | gpfs_get_fssnaphandle_by_fssnapid(const gpfs_fssnap_id_t *fssnapId); |
---|
| 362 | |
---|
| 363 | |
---|
| 364 | /* NAME: gpfs_get_pathname_from_fssnaphandle() |
---|
| 365 | * |
---|
| 366 | * FUNCTION: Get the mountpoint and path to a file system |
---|
| 367 | * and snapshot identified by a fssnapHandle |
---|
| 368 | * |
---|
| 369 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 370 | * |
---|
| 371 | * Returns: ptr to path name to the file system (Successful) |
---|
| 372 | * NULL and errno is set (Failure) |
---|
| 373 | * |
---|
| 374 | * Errno: ENOSYS function not available |
---|
| 375 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnapHandle |
---|
| 376 | */ |
---|
| 377 | const char * |
---|
| 378 | gpfs_get_pathname_from_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle); |
---|
| 379 | |
---|
| 380 | |
---|
| 381 | /* NAME: gpfs_get_fsname_from_fssnaphandle() |
---|
| 382 | * |
---|
| 383 | * FUNCTION: Get the unique name for the file system |
---|
| 384 | * identified by a fssnapHandle |
---|
| 385 | * |
---|
| 386 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 387 | * |
---|
| 388 | * Returns: ptr to name of the file system (Successful) |
---|
| 389 | * NULL and errno is set (Failure) |
---|
| 390 | * |
---|
| 391 | * Errno: ENOSYS function not available |
---|
| 392 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnapHandle |
---|
| 393 | */ |
---|
| 394 | const char * |
---|
| 395 | gpfs_get_fsname_from_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle); |
---|
| 396 | |
---|
| 397 | |
---|
| 398 | /* NAME: gpfs_get_snapname_from_fssnaphandle() |
---|
| 399 | * |
---|
| 400 | * FUNCTION: Get the name for the snapshot |
---|
| 401 | * uniquely identified by a fssnapHandle |
---|
| 402 | * |
---|
| 403 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 404 | * |
---|
| 405 | * Returns: ptr to name assigned to the snapshot (Successful) |
---|
| 406 | * NULL and errno is set (Failure) |
---|
| 407 | * |
---|
| 408 | * Errno: ENOSYS function not available |
---|
| 409 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnaphandle |
---|
| 410 | * GPFS_E_INVAL_SNAPNAME snapshot has been deleted |
---|
| 411 | * |
---|
| 412 | * Notes: If the snapshot has been deleted from the file system |
---|
| 413 | * the snapId may still be valid, but the call will fail |
---|
| 414 | * with errno set to GPFS_E_INVAL_SNAPNAME. |
---|
| 415 | */ |
---|
| 416 | const char * |
---|
| 417 | gpfs_get_snapname_from_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle); |
---|
| 418 | |
---|
| 419 | |
---|
| 420 | /* NAME: gpfs_get_fssnapid_from_fssnaphandle() |
---|
| 421 | * |
---|
| 422 | * FUNCTION: Get a unique, non-volatile file system and snapshot id |
---|
| 423 | * for the file system and snapshot identified by a |
---|
| 424 | * volatile fssnap handle. |
---|
| 425 | * |
---|
| 426 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 427 | * fssnapId: returned fssnapId uniquely identifying the |
---|
| 428 | * file system and snapshot being scanned |
---|
| 429 | * |
---|
| 430 | * Returns: 0 and fssnapId is set with id (Successful) |
---|
| 431 | * -1 and errno is set (Failure) |
---|
| 432 | * |
---|
| 433 | * Errno: GPFS_E_INVAL_FSSNAPHANDLE invalid fssnaphandle |
---|
| 434 | * EINVAL null ptr given for returned fssnapId |
---|
| 435 | * EFAULT size mismatch for fssnapId |
---|
| 436 | */ |
---|
| 437 | int |
---|
| 438 | gpfs_get_fssnapid_from_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 439 | gpfs_fssnap_id_t *fssnapId); |
---|
| 440 | |
---|
| 441 | |
---|
| 442 | /* NAME: gpfs_get_restore_fssnapid_from_fssnaphandle() |
---|
| 443 | * |
---|
| 444 | * FUNCTION: Get the unique, non-volatile file system and snapshot id |
---|
| 445 | * used for the last complete restore of a mirrored file |
---|
| 446 | * system. The file system must been a previous restore |
---|
| 447 | * target and ready for additional incremental restore. |
---|
| 448 | * |
---|
| 449 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 450 | * fssnapId: returned fssnapId uniquely identifying the |
---|
| 451 | * last complete restored file system. |
---|
| 452 | * |
---|
| 453 | * Returns: 0 and fssnapId is set with id (Successful) |
---|
| 454 | * -1 and errno is set (Failure) |
---|
| 455 | * |
---|
| 456 | * Errno: GPFS_E_INVAL_FSSNAPHANDLE invalid fssnaphandle |
---|
| 457 | * EINVAL null ptr given for returned fssnapId |
---|
| 458 | * EFAULT size mismatch for fssnapId |
---|
| 459 | * EPERM caller must have superuser priviledges |
---|
| 460 | * ENOMEM unable to allocate memory for request |
---|
| 461 | * GPFS_E_FS_NOT_RESTORABLE fs is not clean for restore |
---|
| 462 | */ |
---|
| 463 | int |
---|
| 464 | gpfs_get_restore_fssnapid_from_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 465 | gpfs_fssnap_id_t *fssnapId); |
---|
| 466 | |
---|
| 467 | |
---|
| 468 | /* NAME: gpfs_free_fssnaphandle() |
---|
| 469 | * |
---|
| 470 | * FUNCTION: Free a fssnapHandle |
---|
| 471 | * |
---|
| 472 | * Input: fssnapHandle: ptr to file system & snapshot handle |
---|
| 473 | * |
---|
| 474 | * Returns: void |
---|
| 475 | * |
---|
| 476 | * Errno: None |
---|
| 477 | */ |
---|
| 478 | void |
---|
| 479 | gpfs_free_fssnaphandle(gpfs_fssnap_handle_t *fssnapHandle); |
---|
| 480 | |
---|
| 481 | |
---|
| 482 | /* NAME: gpfs_get_snapdirname() |
---|
| 483 | * |
---|
| 484 | * FUNCTION: Get the name of the directory containing snapshots. |
---|
| 485 | * |
---|
| 486 | * Input: fssnapHandle: handle for the file system |
---|
| 487 | * snapdirName: buffer into which the name of the snapshot |
---|
| 488 | * directory will be copied |
---|
| 489 | * bufLen: the size of the provided buffer |
---|
| 490 | * |
---|
| 491 | * Returns: 0 (Successful) |
---|
| 492 | * -1 and errno is set (Failure) |
---|
| 493 | * |
---|
| 494 | * Errno: ENOSYS function not available |
---|
| 495 | * EPERM caller must have superuser priviledges |
---|
| 496 | * ESTALE cached fs information was invalid |
---|
| 497 | * ENOMEM unable to allocate memory for request |
---|
| 498 | * GPFS_E_INVAL_FSSNAPHANDLE fssnapHandle is invalid |
---|
| 499 | * E2BIG buffer too small to return the snapshot directory name |
---|
| 500 | */ |
---|
| 501 | int |
---|
| 502 | gpfs_get_snapdirname(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 503 | char *snapdirName, |
---|
| 504 | int bufLen); |
---|
| 505 | |
---|
| 506 | |
---|
| 507 | /* NAME: gpfs_open_inodescan() |
---|
| 508 | * |
---|
| 509 | * FUNCTION: Open inode file for inode scan. |
---|
| 510 | * |
---|
| 511 | * Input: fssnapHandle: handle for file system and snapshot |
---|
| 512 | * to be scanned |
---|
| 513 | * prev_fssnapId: if NULL, all inodes of existing file will |
---|
| 514 | * be returned; if non-null, only returns inodes of files |
---|
| 515 | * that have changed since the specified previous snapshot |
---|
| 516 | * maxIno: if non-null, returns the maximum inode number |
---|
| 517 | * available in the inode file being scanned. |
---|
| 518 | * |
---|
| 519 | * Returns: pointer to gpfs_iscan_t (Successful) |
---|
| 520 | * NULL and errno is set (Failure) |
---|
| 521 | * |
---|
| 522 | * Errno: ENOSYS function not available |
---|
| 523 | * EINVAL bad parameters |
---|
| 524 | * EPERM caller must have superuser priviledges |
---|
| 525 | * ESTALE cached fs information was invalid |
---|
| 526 | * ENOMEM unable to allocate memory for request |
---|
| 527 | * GPFS_E_INVAL_FSSNAPHANDLE fssnapHandle is invalid |
---|
| 528 | * GPFS_E_INVAL_FSSNAPID prev_fssnapId is invalid |
---|
| 529 | * EDOM prev_fssnapId is from a different fs |
---|
| 530 | * ERANGE prev_fssnapId is same as or more recent than snapId |
---|
| 531 | * being scanned |
---|
| 532 | * see system calls dup() and malloc() ERRORS |
---|
| 533 | */ |
---|
| 534 | gpfs_iscan_t * |
---|
| 535 | gpfs_open_inodescan(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 536 | const gpfs_fssnap_id_t *prev_fssnapId, |
---|
| 537 | gpfs_ino_t *maxIno); |
---|
| 538 | |
---|
| 539 | |
---|
| 540 | /* NAME: gpfs_next_inode() |
---|
| 541 | * |
---|
| 542 | * FUNCTION: Get next inode from inode scan. Scan terminates before |
---|
| 543 | * the last inode specified or the last inode in the |
---|
| 544 | * inode file being scanned. |
---|
| 545 | * |
---|
| 546 | * Input: iscan: ptr to inode scan descriptor |
---|
| 547 | * termIno: scan terminates before this inode number |
---|
| 548 | * caller may specify maxIno from gpfs_open_inodescan() |
---|
| 549 | * or 0 to scan the entire inode file. |
---|
| 550 | * iattr: pointer to returned pointer to file's iattr. |
---|
| 551 | * |
---|
| 552 | * Returns: 0 and *iattr set to point to gpfs_iattr_t (Successful) |
---|
| 553 | * 0 and *iattr set to NULL for no more inodes before termIno |
---|
| 554 | * -1 and errno is set (Failure) |
---|
| 555 | * |
---|
| 556 | * Errno: ENOSYS function not available |
---|
| 557 | * EPERM caller must have superuser priviledges |
---|
| 558 | * ESTALE cached fs information was invalid |
---|
| 559 | * ENOMEM buffer too small |
---|
| 560 | * GPFS_E_INVAL_ISCAN bad parameters |
---|
| 561 | * |
---|
| 562 | * Notes: The data returned by gpfs_next_inode() is overwritten by |
---|
| 563 | * subsequent calls to gpfs_next_inode() or gpfs_seek_inode(). |
---|
| 564 | * |
---|
| 565 | * The termIno parameter provides a means to partition an |
---|
| 566 | * inode scan such that it may be executed on more than one node. |
---|
| 567 | */ |
---|
| 568 | int |
---|
| 569 | gpfs_next_inode(gpfs_iscan_t *iscan, |
---|
| 570 | gpfs_ino_t termIno, |
---|
| 571 | const gpfs_iattr_t **iattr); |
---|
| 572 | |
---|
| 573 | |
---|
| 574 | /* NAME: gpfs_seek_inode() |
---|
| 575 | * |
---|
| 576 | * FUNCTION: Seek to a given inode number. |
---|
| 577 | * |
---|
| 578 | * Input: iscan: ptr to inode scan descriptor |
---|
| 579 | * ino: next inode number to be scanned |
---|
| 580 | * |
---|
| 581 | * Returns: 0 Successful |
---|
| 582 | * -1 Failure and errno is set |
---|
| 583 | * |
---|
| 584 | * Errno: ENOSYS function not available |
---|
| 585 | * GPFS_E_INVAL_ISCAN bad parameters |
---|
| 586 | */ |
---|
| 587 | int |
---|
| 588 | gpfs_seek_inode(gpfs_iscan_t *iscan, |
---|
| 589 | gpfs_ino_t ino); |
---|
| 590 | |
---|
| 591 | |
---|
| 592 | /* NAME: gpfs_close_inodescan() |
---|
| 593 | * |
---|
| 594 | * FUNCTION: Close inode file. |
---|
| 595 | * |
---|
| 596 | * Input: iscan: ptr to inode scan descriptor |
---|
| 597 | * |
---|
| 598 | * Returns: void |
---|
| 599 | * |
---|
| 600 | * Errno: None |
---|
| 601 | */ |
---|
| 602 | void |
---|
| 603 | gpfs_close_inodescan(gpfs_iscan_t *iscan); |
---|
| 604 | |
---|
| 605 | |
---|
| 606 | /* NAME: gpfs_cmp_fssnapid() |
---|
| 607 | * |
---|
| 608 | * FUNCTION: Compare two fssnapIds for the same file system to |
---|
| 609 | * determine the order in which the two snapshots were taken. |
---|
| 610 | * The 'result' variable will be set as follows: |
---|
| 611 | * *result < 0: snapshot 1 was taken before snapshot 2 |
---|
| 612 | * *result == 0: snapshot 1 and 2 are the same |
---|
| 613 | * *result > 0: snapshot 1 was taken after snapshot 2 |
---|
| 614 | * |
---|
| 615 | * Input: fssnapId1: ptr to fssnapId 1 |
---|
| 616 | * fssnapId2: ptr to fssnapId id 2 |
---|
| 617 | * result: ptr to returned results |
---|
| 618 | * |
---|
| 619 | * Returns: 0 and *result is set as described above (Successful) |
---|
| 620 | * -1 and errno is set (Failure) |
---|
| 621 | * |
---|
| 622 | * Errno: ENOSYS function not available |
---|
| 623 | * GPFS_E_INVAL_FSSNAPID fssnapid1 or fssnapid2 is not a |
---|
| 624 | * valid snapshot id |
---|
| 625 | * EDOM the two snapshots cannot be compared because |
---|
| 626 | * they were taken from two different file systems. |
---|
| 627 | */ |
---|
| 628 | int |
---|
| 629 | gpfs_cmp_fssnapid(const gpfs_fssnap_id_t *fssnapId1, |
---|
| 630 | const gpfs_fssnap_id_t *fssnapId2, |
---|
| 631 | int *result); |
---|
| 632 | |
---|
| 633 | |
---|
| 634 | /* NAME: gpfs_iopen() |
---|
| 635 | * |
---|
| 636 | * FUNCTION: Open a file or directory by inode number. |
---|
| 637 | * |
---|
| 638 | * Input: fssnapHandle: handle for file system and snapshot |
---|
| 639 | * being scanned |
---|
| 640 | * ino: inode number |
---|
| 641 | * open_flags: O_RDONLY for gpfs_iread() |
---|
| 642 | * O_WRONLY for gpfs_iwrite() |
---|
| 643 | * O_CREAT create the file if it doesn't exist |
---|
| 644 | * O_TRUNC if the inode already exists delete it |
---|
| 645 | * caller may use GPFS_O_BACKUP to read files for backup |
---|
| 646 | * and GPFS_O_RESTORE to write files for restore |
---|
| 647 | * statxbuf: used only with O_CREAT/GPFS_O_BACKUP |
---|
| 648 | * all other cases set to NULL |
---|
| 649 | * symLink: used only with O_CREAT/GPFS_O_BACKUP for a symbolic link |
---|
| 650 | * all other cases set to NULL |
---|
| 651 | * |
---|
| 652 | * Returns: pointer to gpfs_ifile_t (Successful) |
---|
| 653 | * NULL and errno is set (Failure) |
---|
| 654 | * |
---|
| 655 | * Errno: ENOSYS function not available |
---|
| 656 | * EINVAL missing or bad parameter |
---|
| 657 | * EPERM caller must have superuser priviledges |
---|
| 658 | * ESTALE cached fs information was invalid |
---|
| 659 | * ENOMEM unable to allocate memory for request |
---|
| 660 | * EFORMAT invalid fs version number |
---|
| 661 | * EIO error reading original inode |
---|
| 662 | * GPFS_E_INVAL_IATTR iattr structure was corrupted |
---|
| 663 | * see dup() and malloc() ERRORS |
---|
| 664 | */ |
---|
| 665 | gpfs_ifile_t * |
---|
| 666 | gpfs_iopen(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 667 | gpfs_ino_t ino, |
---|
| 668 | int open_flags, |
---|
| 669 | const gpfs_iattr_t *statxbuf, |
---|
| 670 | const char *symLink); |
---|
| 671 | |
---|
| 672 | /* Define gpfs_iopen flags as used by the backup & restore by inode. |
---|
| 673 | The backup code will only read the source files. |
---|
| 674 | The restore code writes the target files & creates them if they |
---|
| 675 | don't already exist. The file length is set by the inode attributes. |
---|
| 676 | Consequently, to restore a user file it is unnecessary to include |
---|
| 677 | the O_TRUNC flag. */ |
---|
| 678 | #define GPFS_O_BACKUP (O_RDONLY) |
---|
| 679 | #define GPFS_O_RESTORE (O_WRONLY | O_CREAT) |
---|
| 680 | |
---|
| 681 | |
---|
| 682 | /* NAME: gpfs_iread() |
---|
| 683 | * |
---|
| 684 | * FUNCTION: Read file opened by gpfs_iopen. |
---|
| 685 | * |
---|
| 686 | * Input: ifile: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 687 | * buffer: buffer for data to be read |
---|
| 688 | * bufferSize: size of buffer (ie amount of data to be read) |
---|
| 689 | * In/Out offset: offset of where within the file to read |
---|
| 690 | * if successful, offset will be updated to the |
---|
| 691 | * next byte after the last one that was read |
---|
| 692 | * |
---|
| 693 | * Returns: number of bytes read (Successful) |
---|
| 694 | * -1 and errno is set (Failure) |
---|
| 695 | * |
---|
| 696 | * Errno: ENOSYS function not available |
---|
| 697 | * EISDIR file is a directory |
---|
| 698 | * EPERM caller must have superuser priviledges |
---|
| 699 | * ESTALE cached fs information was invalid |
---|
| 700 | * GPFS_E_INVAL_IFILE bad ifile parameters |
---|
| 701 | * see system call read() ERRORS |
---|
| 702 | */ |
---|
| 703 | int |
---|
| 704 | gpfs_iread(gpfs_ifile_t *ifile, |
---|
| 705 | void *buffer, |
---|
| 706 | int bufferSize, |
---|
| 707 | gpfs_off64_t *offset); |
---|
| 708 | |
---|
| 709 | |
---|
| 710 | /* NAME: gpfs_iwrite() |
---|
| 711 | * |
---|
| 712 | * FUNCTION: Write file opened by gpfs_iopen. |
---|
| 713 | * |
---|
| 714 | * Input: ifile: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 715 | * buffer: the data to be written |
---|
| 716 | * writeLen: how much to write |
---|
| 717 | * In/Out offset: offset of where within the file to write |
---|
| 718 | * if successful, offset will be updated to the |
---|
| 719 | * next byte after the last one that was written |
---|
| 720 | * |
---|
| 721 | * Returns: number of bytes written (Successful) |
---|
| 722 | * -1 and errno is set (Failure) |
---|
| 723 | * |
---|
| 724 | * Errno: ENOSYS function not available |
---|
| 725 | * EISDIR file is a directory |
---|
| 726 | * EPERM caller must have superuser priviledges |
---|
| 727 | * ESTALE cached fs information was invalid |
---|
| 728 | * GPFS_E_INVAL_IFILE bad ifile parameters |
---|
| 729 | * see system call write() ERRORS |
---|
| 730 | */ |
---|
| 731 | int |
---|
| 732 | gpfs_iwrite(gpfs_ifile_t *ifile, |
---|
| 733 | void *buffer, |
---|
| 734 | int writeLen, |
---|
| 735 | gpfs_off64_t *offset); |
---|
| 736 | |
---|
| 737 | |
---|
| 738 | /* NAME: gpfs_ireaddir() |
---|
| 739 | * |
---|
| 740 | * FUNCTION: Get next directory entry. |
---|
| 741 | * |
---|
| 742 | * Input: idir: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 743 | * dirent: pointer to returned pointer to directory entry |
---|
| 744 | * |
---|
| 745 | * Returns: 0 and pointer to gpfs_direntx set (Successful) |
---|
| 746 | * 0 and pointer to gpfs_direntx set to NULL (End of directory) |
---|
| 747 | * -1 and errno is set (Failure) |
---|
| 748 | * |
---|
| 749 | * Errno: ENOSYS function not available |
---|
| 750 | * ENOTDIR file is not a directory |
---|
| 751 | * EPERM caller must have superuser priviledges |
---|
| 752 | * ESTALE cached fs information was invalid |
---|
| 753 | * GPFS_E_INVAL_IFILE bad ifile parameter |
---|
| 754 | * ENOMEM unable to allocate memory for request |
---|
| 755 | * |
---|
| 756 | * Notes: The data returned by gpfs_ireaddir() is overwritten by |
---|
| 757 | * subsequent calls to gpfs_ireaddir(). |
---|
| 758 | */ |
---|
| 759 | int |
---|
| 760 | gpfs_ireaddir(gpfs_ifile_t *idir, |
---|
| 761 | const gpfs_direntx_t **dirent); |
---|
| 762 | |
---|
| 763 | |
---|
| 764 | /* NAME: gpfs_iwritedir() |
---|
| 765 | * |
---|
| 766 | * FUNCTION: Create a directory entry in a directory opened by gpfs_iopen. |
---|
| 767 | * |
---|
| 768 | * Input: idir: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 769 | * dirent: directory entry to be written |
---|
| 770 | * |
---|
| 771 | * Returns: 0 (Successful) |
---|
| 772 | * -1 and errno is set (Failure) |
---|
| 773 | * |
---|
| 774 | * Errno: ENOSYS function not available |
---|
| 775 | * GPFS_E_INVAL_IFILE bad file pointer |
---|
| 776 | * ENOTDIR file is not a directory |
---|
| 777 | * EPERM caller must have superuser priviledges |
---|
| 778 | * ESTALE cached fs information was invalid |
---|
| 779 | * ENOMEM unable to allocate memory for request |
---|
| 780 | * EFORMAT invalid dirent version number |
---|
| 781 | * see system call write() ERRORS |
---|
| 782 | */ |
---|
| 783 | int |
---|
| 784 | gpfs_iwritedir(gpfs_ifile_t *idir, |
---|
| 785 | const gpfs_direntx_t *dirent); |
---|
| 786 | |
---|
| 787 | |
---|
| 788 | /* NAME: gpfs_igetattrs() |
---|
| 789 | * |
---|
| 790 | * FUNCTION: Retrieves all extended file attributes in opaque format. |
---|
| 791 | * This function together with gpfs_iputattrs is intended for |
---|
| 792 | * use by a backup program to save (gpfs_igetattrs) and |
---|
| 793 | * restore (gpfs_iputattrs) all extended file attributes |
---|
| 794 | * (ACLs, dmapi attributes, ...) in one call. |
---|
| 795 | * |
---|
| 796 | * Input: ifile: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 797 | * buffer: pointer to buffer for returned attributes |
---|
| 798 | * bufferSize: size of buffer |
---|
| 799 | * attrSize: ptr to returned size of attributes |
---|
| 800 | * |
---|
| 801 | * Returns: 0 Successful |
---|
| 802 | * -1 Failure and errno is set |
---|
| 803 | * |
---|
| 804 | * Errno: ENOSYS function not available |
---|
| 805 | * EPERM caller must have superuser priviledges |
---|
| 806 | * ESTALE cached fs information was invalid |
---|
| 807 | * ENOSPC buffer too small to return all attributes |
---|
| 808 | * *attrSizeP will be set to the size necessary |
---|
| 809 | * GPFS_E_INVAL_IFILE bad ifile parameters |
---|
| 810 | */ |
---|
| 811 | int |
---|
| 812 | gpfs_igetattrs(gpfs_ifile_t *ifile, |
---|
| 813 | void *buffer, |
---|
| 814 | int bufferSize, |
---|
| 815 | int *attrSize); |
---|
| 816 | |
---|
| 817 | |
---|
| 818 | /* NAME: gpfs_iputattrs() |
---|
| 819 | * |
---|
| 820 | * FUNCTION: Sets all extended file attributes of a file. |
---|
| 821 | * The buffer passed in should contain extended attribute data |
---|
| 822 | * that was obtained by a previous call to gpfs_igetattrs. |
---|
| 823 | * |
---|
| 824 | * Input: ifile: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 825 | * buffer: pointer to buffer for returned attributes |
---|
| 826 | * |
---|
| 827 | * Returns: 0 Successful |
---|
| 828 | * -1 Failure and errno is set |
---|
| 829 | * |
---|
| 830 | * Errno: ENOSYS function not available |
---|
| 831 | * EINVAL the buffer does not contain valid attribute data |
---|
| 832 | * EPERM caller must have superuser priviledges |
---|
| 833 | * ESTALE cached fs information was invalid |
---|
| 834 | * GPFS_E_INVAL_IFILE bad ifile parameters |
---|
| 835 | */ |
---|
| 836 | int |
---|
| 837 | gpfs_iputattrs(gpfs_ifile_t *ifile, |
---|
| 838 | void *buffer); |
---|
| 839 | |
---|
| 840 | |
---|
| 841 | /* NAME: gpfs_igetfilesetname() |
---|
| 842 | * |
---|
| 843 | * FUNCTION: Retrieves the name of the fileset which contains this file. |
---|
| 844 | * The fileset name is a null-terminated string, with a |
---|
| 845 | * a maximum length of GPFS_MAXNAMLEN. |
---|
| 846 | * |
---|
| 847 | * Input: iscan: ptr to gpfs_iscan_t from gpfs_open_inodescan() |
---|
| 848 | * filesetId: ia_filesetId returned in an iattr from the iscan |
---|
| 849 | * buffer: pointer to buffer for returned fileset name |
---|
| 850 | * bufferSize: size of buffer |
---|
| 851 | * |
---|
| 852 | * Returns: 0 Successful |
---|
| 853 | * -1 Failure and errno is set |
---|
| 854 | * |
---|
| 855 | * Errno: ENOSYS function not available |
---|
| 856 | * EPERM caller must have superuser priviledges |
---|
| 857 | * ESTALE cached fs information was invalid |
---|
| 858 | * ENOSPC buffer too small to return fileset name |
---|
| 859 | * GPFS_E_INVAL_ISCAN bad iscan parameter |
---|
| 860 | */ |
---|
| 861 | int |
---|
| 862 | gpfs_igetfilesetname(gpfs_iscan_t *iscan, |
---|
| 863 | unsigned int filesetId, |
---|
| 864 | void *buffer, |
---|
| 865 | int bufferSize); |
---|
| 866 | |
---|
| 867 | |
---|
| 868 | /* NAME: gpfs_igetstoragepool() |
---|
| 869 | * |
---|
| 870 | * FUNCTION: Retrieves the name of the storage pool assigned for |
---|
| 871 | * this file's data. The storage pool name is a null-terminated |
---|
| 872 | * string, with a maximum length of GPFS_MAXNAMLEN. |
---|
| 873 | * |
---|
| 874 | * Input: iscan: ptr to gpfs_iscan_t from gpfs_open_inodescan() |
---|
| 875 | * dataPoolId: ia_dataPoolId returned in an iattr from the iscan |
---|
| 876 | * buffer: pointer to buffer for returned attributes |
---|
| 877 | * bufferSize: size of buffer |
---|
| 878 | * |
---|
| 879 | * Returns: 0 Successful |
---|
| 880 | * -1 Failure and errno is set |
---|
| 881 | * |
---|
| 882 | * Errno: ENOSYS function not available |
---|
| 883 | * EPERM caller must have superuser priviledges |
---|
| 884 | * ESTALE cached fs information was invalid |
---|
| 885 | * ENOSPC buffer too small to return all storage pool name |
---|
| 886 | * GPFS_E_INVAL_ISCAN bad iscan parameters |
---|
| 887 | */ |
---|
| 888 | int |
---|
| 889 | gpfs_igetstoragepool(gpfs_iscan_t *iscan, |
---|
| 890 | unsigned int dataPoolId, |
---|
| 891 | void *buffer, |
---|
| 892 | int bufferSize); |
---|
| 893 | |
---|
| 894 | |
---|
| 895 | /* NAME: gpfs_iclose() |
---|
| 896 | * |
---|
| 897 | * FUNCTION: Close file opened by inode and update dates. |
---|
| 898 | * |
---|
| 899 | * Input: ifile: pointer to gpfs_ifile_t from gpfs_iopen |
---|
| 900 | * |
---|
| 901 | * Returns: void |
---|
| 902 | * |
---|
| 903 | * Errno: ENOSYS function not available |
---|
| 904 | * EPERM caller must have superuser priviledges |
---|
| 905 | * ESTALE cached fs information was invalid |
---|
| 906 | */ |
---|
| 907 | void |
---|
| 908 | gpfs_iclose(gpfs_ifile_t *ifile); |
---|
| 909 | |
---|
| 910 | |
---|
| 911 | /* NAME: gpfs_ireadlink() |
---|
| 912 | * |
---|
| 913 | * FUNCTION: Read symbolic link by inode number. |
---|
| 914 | * |
---|
| 915 | * Input: fssnapHandle: handle for file system & snapshot being scanned |
---|
| 916 | * ino: inode number of link file to read |
---|
| 917 | * buffer: pointer to buffer for returned link data |
---|
| 918 | * bufferSize: size of the buffer |
---|
| 919 | * |
---|
| 920 | * Returns: number of bytes read (Successful) |
---|
| 921 | * -1 and errno is set (Failure) |
---|
| 922 | * |
---|
| 923 | * Errno: ENOSYS function not available |
---|
| 924 | * EPERM caller must have superuser priviledges |
---|
| 925 | * ESTALE cached fs information was invalid |
---|
| 926 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnap handle |
---|
| 927 | * see system call readlink() ERRORS |
---|
| 928 | */ |
---|
| 929 | int |
---|
| 930 | gpfs_ireadlink(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 931 | gpfs_ino_t ino, |
---|
| 932 | char *buffer, |
---|
| 933 | int bufferSize); |
---|
| 934 | |
---|
| 935 | |
---|
| 936 | /* NAME: gpfs_sync_fs() |
---|
| 937 | * |
---|
| 938 | * FUNCTION: sync file system. |
---|
| 939 | * |
---|
| 940 | * Input: fssnapHandle: handle for file system being restored |
---|
| 941 | * |
---|
| 942 | * Returns: 0 all data flushed to disk (Successful) |
---|
| 943 | * -1 and errno is set (Failure) |
---|
| 944 | * |
---|
| 945 | * Errno: ENOSYS function not available |
---|
| 946 | * ENOMEM unable to allocate memory for request |
---|
| 947 | * EPERM caller must have superuser priviledges |
---|
| 948 | * ESTALE cached fs information was invalid |
---|
| 949 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnapHandle |
---|
| 950 | */ |
---|
| 951 | int |
---|
| 952 | gpfs_sync_fs(gpfs_fssnap_handle_t *fssnapHandle); |
---|
| 953 | |
---|
| 954 | |
---|
| 955 | /* NAME: gpfs_enable_restore() |
---|
| 956 | * |
---|
| 957 | * FUNCTION: Mark file system as enabled for restore on/off |
---|
| 958 | * |
---|
| 959 | * Input: fssnapHandle: handle for file system to be enabled |
---|
| 960 | * or disabled for restore |
---|
| 961 | * on_off: flag set to 1 to enable restore |
---|
| 962 | * 0 to disable restore |
---|
| 963 | * |
---|
| 964 | * Returns: 0 (Successful) |
---|
| 965 | * -1 and errno is set (Failure) |
---|
| 966 | * |
---|
| 967 | * Errno: ENOSYS function not available |
---|
| 968 | * EINVAL bad parameters |
---|
| 969 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnapHandle |
---|
| 970 | * EPERM caller must have superuser priviledges |
---|
| 971 | * ESTALE cached fs information was invalid |
---|
| 972 | * ENOMEM unable to allocate memory for request |
---|
| 973 | * E_FS_NOT_RESTORABLE fs is not clean |
---|
| 974 | * EALREADY fs already marked as requested |
---|
| 975 | * E_RESTORE_STARTED restore in progress |
---|
| 976 | * |
---|
| 977 | * Notes: EALREADY indicates enable/disable restore was already called |
---|
| 978 | * for this fs. The caller must decide if EALREADY represents an |
---|
| 979 | * error condition. |
---|
| 980 | */ |
---|
| 981 | int |
---|
| 982 | gpfs_enable_restore(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 983 | int on_off); |
---|
| 984 | |
---|
| 985 | |
---|
| 986 | /* NAME: gpfs_start_restore() |
---|
| 987 | * |
---|
| 988 | * FUNCTION: Start a restore session. |
---|
| 989 | * |
---|
| 990 | * Input: fssnapHandle: handle for file system to be restored |
---|
| 991 | * restore_flags: Flag to indicate the restore should be started |
---|
| 992 | * even if a prior restore has not completed. |
---|
| 993 | * old_fssnapId: fssnapId of last restored snapshot |
---|
| 994 | * new_fssnapId: fssnapId of snapshot being restored |
---|
| 995 | * |
---|
| 996 | * Returns: pointer to gpfs_restore_t (Successful) |
---|
| 997 | * NULL and errno is set (Failure) |
---|
| 998 | * |
---|
| 999 | * Errno: ENOSYS function not available |
---|
| 1000 | * ENOMEM unable to allocate memory for request |
---|
| 1001 | * EINVAL missing parameter |
---|
| 1002 | * EPERM caller must have superuser priviledges |
---|
| 1003 | * ESTALE cached fs information was invalid |
---|
| 1004 | * EDOM restore fs does not match existing fs |
---|
| 1005 | * ERANGE restore is missing updates |
---|
| 1006 | * EFORMAT invalid fs version number |
---|
| 1007 | * GPFS_E_INVAL_FSSNAPHANDLE invalid fssnaphandle |
---|
| 1008 | * GPFS_E_INVAL_FSSNAPID bad fssnapId parameter |
---|
| 1009 | * E_FS_NOT_RESTORABLE fs is not clean for restore |
---|
| 1010 | * E_RESTORE_NOT_ENABLED fs is not enabled for restore |
---|
| 1011 | * EALREADY Restore already in progress |
---|
| 1012 | * |
---|
| 1013 | * Note: EALREADY indicates start restore was already called for |
---|
| 1014 | * this fs. This could be due to a prior restore process that failed |
---|
| 1015 | * or it could be due to a concurrent restore process still running. |
---|
| 1016 | * The caller must decide if EALREADY represents an error condition. |
---|
| 1017 | */ |
---|
| 1018 | gpfs_restore_t * |
---|
| 1019 | gpfs_start_restore(gpfs_fssnap_handle_t *fssnapHandle, |
---|
| 1020 | int restore_flags, |
---|
| 1021 | const gpfs_fssnap_id_t *old_fssnapId, |
---|
| 1022 | const gpfs_fssnap_id_t *new_fssnapId); |
---|
| 1023 | |
---|
| 1024 | #define GPFS_RESTORE_NORMAL 0 /* Restore not started if prior restore |
---|
| 1025 | has not completed. */ |
---|
| 1026 | #define GPFS_RESTORE_FORCED 1 /* Restore starts even if prior restore |
---|
| 1027 | has not completed. */ |
---|
| 1028 | |
---|
| 1029 | |
---|
| 1030 | /* NAME: gpfs_end_restore() |
---|
| 1031 | * |
---|
| 1032 | * FUNCTION: End a restore session. |
---|
| 1033 | * |
---|
| 1034 | * Input: restoreId: ptr to gpfs_restore_t |
---|
| 1035 | * |
---|
| 1036 | * Returns: 0 (Successful) |
---|
| 1037 | * -1 and errno is set (Failure) |
---|
| 1038 | * |
---|
| 1039 | * Errno: ENOSYS function not available |
---|
| 1040 | * EINVAL bad parameters |
---|
| 1041 | * EPERM caller must have superuser priviledges |
---|
| 1042 | * ESTALE cached fs information was invalid |
---|
| 1043 | * GPFS_E_INVAL_RESTORE bad restoreId parameter |
---|
| 1044 | * GPFS_E_FS_NOT_RESTORABLE fs is not clean for restore |
---|
| 1045 | * GPFS_E_RESTORE_NOT_ENABLED fs is not enabled for restore |
---|
| 1046 | * EALREADY Restore already ended |
---|
| 1047 | * |
---|
| 1048 | * Note: EALREADY indicates end restore was already called for |
---|
| 1049 | * this fs. This could be due to a concurrent restore process that |
---|
| 1050 | * already completed. The caller must decide if EALREADY represents |
---|
| 1051 | * an error condition. |
---|
| 1052 | */ |
---|
| 1053 | int |
---|
| 1054 | gpfs_end_restore(gpfs_restore_t *restoreId); |
---|
| 1055 | |
---|
| 1056 | |
---|
| 1057 | |
---|
| 1058 | /* NAME: gpfs_ireadx() |
---|
| 1059 | * |
---|
| 1060 | * FUNCTION: Block level incremental read on a file opened by gpfs_iopen |
---|
| 1061 | * with a given incremental scan opened via gpfs_open_inodescan. |
---|
| 1062 | * |
---|
| 1063 | * Input: ifile: ptr to gpfs_file_t returned from gpfs_iopen() |
---|
| 1064 | * iscan: ptr to gpfs_iscan_t from gpfs_open_inodescan() |
---|
| 1065 | * buffer: ptr to buffer for returned data |
---|
| 1066 | * bufferSize: size of buffer for returned data |
---|
| 1067 | * offset: ptr to offset value |
---|
| 1068 | * termOffset: read terminates before reading this offset |
---|
| 1069 | * caller may specify ia_size for the file's gpfs_iattr_t |
---|
| 1070 | * or 0 to scan the entire file. |
---|
| 1071 | * hole: ptr to returned flag to indicate a hole in the file |
---|
| 1072 | * |
---|
| 1073 | * Returns: number of bytes read and returned in buffer |
---|
| 1074 | * or size of hole encountered in the file. (Success) |
---|
| 1075 | * -1 and errno is set (Failure) |
---|
| 1076 | * |
---|
| 1077 | * On input, *offset contains the offset in the file |
---|
| 1078 | * at which to begin reading to find a difference same file |
---|
| 1079 | * in a previous snapshot specified when the inodescan was opened. |
---|
| 1080 | * On return, *offset contains the offset of the first |
---|
| 1081 | * difference. |
---|
| 1082 | * |
---|
| 1083 | * On return, *hole indicates if the change in the file |
---|
| 1084 | * was data (*hole == 0) and the data is returned in the |
---|
| 1085 | * buffer provided. The function's value is the amount of data |
---|
| 1086 | * returned. If the change is a hole in the file, |
---|
| 1087 | * *hole != 0 and the size of the changed hole is returned |
---|
| 1088 | * as the function value. |
---|
| 1089 | * |
---|
| 1090 | * A call with a NULL buffer pointer will query the next increment |
---|
| 1091 | * to be read from the current offset. The *offset, *hole and |
---|
| 1092 | * returned length will be set for the next increment to be read, |
---|
| 1093 | * but no data will be returned. The bufferSize parameter is |
---|
| 1094 | * ignored, but the termOffset parameter will limit the |
---|
| 1095 | * increment returned. |
---|
| 1096 | * |
---|
| 1097 | * Errno: ENOSYS function not available |
---|
| 1098 | * EINVAL missing or bad parameter |
---|
| 1099 | * EISDIR file is a directory |
---|
| 1100 | * EPERM caller must have superuser priviledges |
---|
| 1101 | * ESTALE cached fs information was invalid |
---|
| 1102 | * ENOMEM unable to allocate memory for request |
---|
| 1103 | * EDOM fs snapId does match local fs |
---|
| 1104 | * ERANGE previous snapId is more recent than scanned snapId |
---|
| 1105 | * GPFS_E_INVAL_IFILE bad ifile parameter |
---|
| 1106 | * GPFS_E_INVAL_ISCAN bad iscan parameter |
---|
| 1107 | * see system call read() ERRORS |
---|
| 1108 | * |
---|
| 1109 | * Notes: The termOffset parameter provides a means to partition a |
---|
| 1110 | * file's data such that it may be read on more than one node. |
---|
| 1111 | */ |
---|
| 1112 | gpfs_off64_t |
---|
| 1113 | gpfs_ireadx(gpfs_ifile_t *ifile, /* in only */ |
---|
| 1114 | gpfs_iscan_t *iscan, /* in only */ |
---|
| 1115 | void *buffer, /* in only */ |
---|
| 1116 | int bufferSize, /* in only */ |
---|
| 1117 | gpfs_off64_t *offset, /* in/out */ |
---|
| 1118 | gpfs_off64_t termOffset, /* in only */ |
---|
| 1119 | int *hole); /* out only */ |
---|
| 1120 | |
---|
| 1121 | |
---|
| 1122 | /* NAME: gpfs_iwritex() |
---|
| 1123 | * |
---|
| 1124 | * FUNCTION: Write file opened by gpfs_iopen. |
---|
| 1125 | * If parameter hole == 0, then write data |
---|
| 1126 | * addressed by buffer to the given offset for the |
---|
| 1127 | * given length. If hole != 0, then write |
---|
| 1128 | * a hole at the given offset for the given length. |
---|
| 1129 | * |
---|
| 1130 | * Input: ifile : ptr to gpfs_file_t returned from gpfs_iopen() |
---|
| 1131 | * buffer: ptr to data buffer |
---|
| 1132 | * writeLen: length of data to write |
---|
| 1133 | * offset: offset in file to write data |
---|
| 1134 | * hole: flag =1 to write a "hole" |
---|
| 1135 | * =0 to write data |
---|
| 1136 | * |
---|
| 1137 | * Returns: number of bytes/size of hole written (Success) |
---|
| 1138 | * -1 and errno is set (Failure) |
---|
| 1139 | * |
---|
| 1140 | * Errno: ENOSYS function not available |
---|
| 1141 | * EINVAL missing or bad parameter |
---|
| 1142 | * EISDIR file is a directory |
---|
| 1143 | * EPERM caller must have superuser priviledges |
---|
| 1144 | * ESTALE cached fs information was invalid |
---|
| 1145 | * GPFS_E_INVAL_IFILE bad ifile parameter |
---|
| 1146 | * see system call write() ERRORS |
---|
| 1147 | */ |
---|
| 1148 | gpfs_off64_t |
---|
| 1149 | gpfs_iwritex(gpfs_ifile_t *ifile, /* in only */ |
---|
| 1150 | void *buffer, /* in only */ |
---|
| 1151 | gpfs_off64_t writeLen, /* in only */ |
---|
| 1152 | gpfs_off64_t offset, /* in only */ |
---|
| 1153 | int hole); /* in only */ |
---|
| 1154 | |
---|
| 1155 | |
---|
| 1156 | /* NAME: gpfs_statfspool() |
---|
| 1157 | * |
---|
| 1158 | * FUNCTION: Obtain status information about the storage pools |
---|
| 1159 | * |
---|
| 1160 | * Input: pathname : path to any file in the file system |
---|
| 1161 | * poolId : id of first pool to return |
---|
| 1162 | * on return set to next poolId or -1 |
---|
| 1163 | * to indicate there are no more pools. |
---|
| 1164 | * options : option flags (currently not used) |
---|
| 1165 | * nPools : number of stat structs requested or 0 |
---|
| 1166 | * on return number of stat structs in buffer |
---|
| 1167 | * or if nPools was 0 its value is the max number |
---|
| 1168 | * of storage pools currently defined |
---|
| 1169 | * buffer : ptr to return stat structures |
---|
| 1170 | * bufferSize : sizeof stat buffer |
---|
| 1171 | * |
---|
| 1172 | * The user is expected to issue two or more calls. On the first |
---|
| 1173 | * call the user should pass nPools set to 0 and gpfs will |
---|
| 1174 | * return in nPools the total number of storage pools currently |
---|
| 1175 | * defined for the file system indicated by the pathname |
---|
| 1176 | * and it returns in poolId the id of the first storage pool. |
---|
| 1177 | * The buffer parameter may be set to NULL for this call. |
---|
| 1178 | * |
---|
| 1179 | * The user may then allocate a buffer large enough to contain |
---|
| 1180 | * a gpfs_statpool_t structure for each of the pools and issue |
---|
| 1181 | * a second call to obtain stat information about each pool. |
---|
| 1182 | * Parameter nPools should be set the number of pools requested. |
---|
| 1183 | * On return, nPools will be set to the number of stat structs |
---|
| 1184 | * contained in the buffer, and poolId will be set to the id |
---|
| 1185 | * of the next storage pool or -1 to indicate there are no |
---|
| 1186 | * additional storage pools defined. |
---|
| 1187 | * |
---|
| 1188 | * Alternatively, if the user has a valid poolId from a previous |
---|
| 1189 | * call, the user may provide that poolId and a buffer large |
---|
| 1190 | * enough for a single gpfs_statpool_t structure, and the call |
---|
| 1191 | * will return the status for a single storage pool. |
---|
| 1192 | * |
---|
| 1193 | * |
---|
| 1194 | * Returns: 0 Successful |
---|
| 1195 | * -1 Failure |
---|
| 1196 | * |
---|
| 1197 | * Errno: Specific error indication |
---|
| 1198 | * EINVAL |
---|
| 1199 | */ |
---|
| 1200 | int |
---|
| 1201 | gpfs_statfspool(const char *pathname, /* in only: path to file system*/ |
---|
| 1202 | gpfs_pool_t *poolId, /* in out: id of first pool to return |
---|
| 1203 | on return set to next poolId |
---|
| 1204 | or -1 when there are no more pools */ |
---|
| 1205 | unsigned int options, /* in only: option flags */ |
---|
| 1206 | int *nPools, /* in out: number of pool stats requested |
---|
| 1207 | on return number of stat structs |
---|
| 1208 | returned in buffer or if nPools was |
---|
| 1209 | set to 0, the return value is the |
---|
| 1210 | number of pools currently defined */ |
---|
| 1211 | void *buffer, /* ptr to return stat structures */ |
---|
| 1212 | int bufferSize); /* sizeof stat buffer or 0 */ |
---|
| 1213 | |
---|
| 1214 | |
---|
| 1215 | |
---|
| 1216 | /* NAME: gpfs_getpoolname() |
---|
| 1217 | * |
---|
| 1218 | * FUNCTION: Retrieves the name of the storage pool assigned for |
---|
| 1219 | * this file's data. The storage pool name is a null-terminated |
---|
| 1220 | * string, with a maximum length of GPFS_MAXNAMLEN. |
---|
| 1221 | * |
---|
| 1222 | * Input: pathname: path to any file in the file system |
---|
| 1223 | * poolId: f_poolid returned in gpfs_statfspool_t |
---|
| 1224 | * buffer: pointer to buffer for returned name |
---|
| 1225 | * bufferSize: size of buffer |
---|
| 1226 | * |
---|
| 1227 | * Returns: 0 Successful |
---|
| 1228 | * -1 Failure and errno is set |
---|
| 1229 | * |
---|
| 1230 | * Errno: ENOSYS function not available |
---|
| 1231 | * ESTALE file system was unmounted |
---|
| 1232 | * E_FORMAT_INCOMPAT file system does not support pools |
---|
| 1233 | * E2BIG buffer too small to return storage pool name |
---|
| 1234 | */ |
---|
| 1235 | int |
---|
| 1236 | gpfs_getpoolname(const char *pathname, |
---|
| 1237 | gpfs_pool_t poolId, |
---|
| 1238 | void *buffer, |
---|
| 1239 | int bufferSize); |
---|
| 1240 | |
---|
| 1241 | |
---|
| 1242 | /* GPFS QUOTACTL */ |
---|
| 1243 | |
---|
| 1244 | /* |
---|
| 1245 | * Command definitions for the 'gpfs_quotactl' system call. |
---|
| 1246 | * The commands are broken into a main command defined below |
---|
| 1247 | * and a subcommand that is used to convey the type of |
---|
| 1248 | * quota that is being manipulated (see above). |
---|
| 1249 | */ |
---|
| 1250 | |
---|
| 1251 | #define SUBCMDMASK 0x00ff |
---|
| 1252 | #define SUBCMDSHIFT 8 |
---|
| 1253 | #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) |
---|
| 1254 | |
---|
| 1255 | #define Q_QUOTAON 0x0100 /* enable quotas */ |
---|
| 1256 | #define Q_QUOTAOFF 0x0200 /* disable quotas */ |
---|
| 1257 | #define Q_GETQUOTA 0x0300 /* get limits and usage */ |
---|
| 1258 | #ifndef _LINUX_SOURCE_COMPAT |
---|
| 1259 | /* Standard AIX definitions of quota commands */ |
---|
| 1260 | #define Q_SETQUOTA 0x0400 /* set limits */ |
---|
| 1261 | #define Q_SETQLIM Q_SETQUOTA |
---|
| 1262 | #else |
---|
| 1263 | /* Alternate definitions, for Linux Affinity */ |
---|
| 1264 | #define Q_SETQLIM 0x0400 /* set limits */ |
---|
| 1265 | #define Q_SETQUOTA 0x0700 /* set limits and usage */ |
---|
| 1266 | #endif |
---|
| 1267 | #define Q_SETUSE 0x0500 /* set usage */ |
---|
| 1268 | #define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */ |
---|
| 1269 | |
---|
| 1270 | /* gpfs quota types */ |
---|
| 1271 | #define GPFS_USRQUOTA 0 |
---|
| 1272 | #define GPFS_GRPQUOTA 1 |
---|
| 1273 | #define GPFS_FILESETQUOTA 2 |
---|
| 1274 | |
---|
| 1275 | typedef struct gpfs_quotaInfo |
---|
| 1276 | { |
---|
| 1277 | gpfs_off64_t blockUsage; /* current block count in 1 KB units*/ |
---|
| 1278 | gpfs_off64_t blockHardLimit; /* absolute limit on disk blks alloc */ |
---|
| 1279 | gpfs_off64_t blockSoftLimit; /* preferred limit on disk blks */ |
---|
| 1280 | gpfs_off64_t blockInDoubt; /* distributed shares + "lost" usage for blks */ |
---|
| 1281 | int inodeUsage; /* current # allocated inodes */ |
---|
| 1282 | int inodeHardLimit; /* absolute limit on allocated inodes */ |
---|
| 1283 | int inodeSoftLimit; /* preferred inode limit */ |
---|
| 1284 | int inodeInDoubt; /* distributed shares + "lost" usage for inodes */ |
---|
| 1285 | gpfs_uid_t quoId; /* uid, gid or fileset id */ |
---|
| 1286 | int entryType; /* entry type, not used */ |
---|
| 1287 | unsigned int blockGraceTime; /* time limit for excessive disk use */ |
---|
| 1288 | unsigned int inodeGraceTime; /* time limit for excessive inode use */ |
---|
| 1289 | } gpfs_quotaInfo_t; |
---|
| 1290 | |
---|
| 1291 | |
---|
| 1292 | /* |
---|
| 1293 | * NAME: gpfs_quotactl |
---|
| 1294 | * |
---|
| 1295 | * FUNCTION: Manipulate disk quotas |
---|
| 1296 | * INPUT: pathname: specifies the pathname of any file within the |
---|
| 1297 | * mounted file system to which the command is to |
---|
| 1298 | * be applied |
---|
| 1299 | * cmd: specifies a quota control command to be applied |
---|
| 1300 | * to UID/GID/FILESETID id. |
---|
| 1301 | * the cmd parameter can be constructed using QCMD(cmd, type) |
---|
| 1302 | * macro defined in gpfs.h |
---|
| 1303 | * of quota. |
---|
| 1304 | * id: UID or GID or FILESETID that command applied to. |
---|
| 1305 | * bufferP: points to the address of an optional, command |
---|
| 1306 | * specific, data structure that is copied in or out of |
---|
| 1307 | * the system. |
---|
| 1308 | * |
---|
| 1309 | * OUTPUT: bufferP, if applicable. |
---|
| 1310 | * |
---|
| 1311 | * Returns: 0 success |
---|
| 1312 | * -1 failure |
---|
| 1313 | * |
---|
| 1314 | * Errno: EACCESS |
---|
| 1315 | * EFAULT An invalid bufferP parameter is supplied; |
---|
| 1316 | * the associated structure could not be copied |
---|
| 1317 | * in or out of the kernel |
---|
| 1318 | * EINVAL |
---|
| 1319 | * ENOENT No such file or directory |
---|
| 1320 | * EPERM The quota control command is privileged and |
---|
| 1321 | * the caller did not have root user authority |
---|
| 1322 | * EOPNOTSUPP |
---|
| 1323 | * E_NO_QUOTA_INST The file system does not support quotas |
---|
| 1324 | */ |
---|
| 1325 | |
---|
| 1326 | int |
---|
| 1327 | gpfs_quotactl(char *pathname, int cmd, int id, void *bufferP); |
---|
| 1328 | |
---|
| 1329 | #ifdef __cplusplus |
---|
| 1330 | } |
---|
| 1331 | #endif |
---|
| 1332 | |
---|
| 1333 | #endif /* H_GPFS */ |
---|