DAOS API: src/include/daos_fs.h File Reference

| DAOS API (v2.1 - dev)

Loading...
Searching...
No Matches
daos_fs.h File Reference
`#include <dirent.h>`
`#include <sys/stat.h>`

Go to the source code of this file.

## Data Structures
struct | dfs_attr_t
struct | dfs_iod_t
struct | dfs_obj_info_t

## Macros
#define | DFS_MAX_NAME NAME_MAX
#define | DFS_MAX_PATH PATH_MAX
#define | DFS_MAX_FSIZE (~0ULL)
#define | DFS_DEFAULT_CHUNK_SIZE 1048576
#define | DFS_MAX_XATTR_NAME 255
#define | DFS_MAX_XATTR_LEN 65536
#define | DFS_BALANCED 4
#define | DFS_RELAXED 0
#define | DFS_RDONLY O_RDONLY
#define | DFS_RDWR O_RDWR
#define | DFS_SET_ATTR_MODE (1 << 0)
#define | DFS_SET_ATTR_ATIME (1 << 1)
#define | DFS_SET_ATTR_MTIME (1 << 2)
#define | DFS_SET_ATTR_SIZE (1 << 3)
#define | DFS_SET_ATTR_UID (1 << 4)
#define | DFS_SET_ATTR_GID (1 << 5)

## Typedefs
typedef struct dfs_obj | dfs_obj_t
typedef struct dfs | dfs_t
typedef int(* | dfs_filler_cb_t) (dfs_t *dfs, dfs_obj_t *obj, const char name[], void *arg)

## Enumerations
enum | { DFS_CHECK_PRINT = (1 << 0) , DFS_CHECK_REMOVE = (1 << 1) , DFS_CHECK_RELINK = (1 << 2) , DFS_CHECK_VERIFY = (1 << 3) , DFS_CHECK_EVICT_ALL = (1 << 4) }

## Functions
int | dfs_init (void)
int | dfs_fini (void)
int | dfs_connect (const char *pool, const char *sys, const char *cont, int flags, dfs_attr_t *attr, dfs_t **dfs)
int | dfs_disconnect (dfs_t *dfs)
int | dfs_destroy (const char *pool, const char *sys, const char *cont, int force, daos_event_t *ev)
int | dfs_cont_create (daos_handle_t poh, uuid_t *uuid, dfs_attr_t *attr, daos_handle_t *coh, dfs_t **dfs)
int | dfs_cont_create_with_label (daos_handle_t poh, const char *label, dfs_attr_t *attr, uuid_t *uuid, daos_handle_t *coh, dfs_t **dfs)
int | dfs_mount (daos_handle_t poh, daos_handle_t coh, int flags, dfs_t **dfs)
int | dfs_umount (dfs_t *dfs)
int | dfs_pool_get (dfs_t *dfs, daos_handle_t *poh)
int | dfs_pool_put (dfs_t *dfs, daos_handle_t poh)
int | dfs_cont_get (dfs_t *dfs, daos_handle_t *coh)
int | dfs_cont_put (dfs_t *dfs, daos_handle_t coh)
int | dfs_query (dfs_t *dfs, dfs_attr_t *attr)
int | dfs_local2global (dfs_t *dfs, d_iov_t *glob)
int | dfs_global2local (daos_handle_t poh, daos_handle_t coh, int flags, d_iov_t glob, dfs_t **dfs)
int | dfs_local2global_all (dfs_t *dfs, d_iov_t *glob)
int | dfs_global2local_all (int flags, d_iov_t glob, dfs_t **dfs)
int | dfs_set_prefix (dfs_t *dfs, const char *prefix)
int | dfs_obj2id (dfs_obj_t *obj, daos_obj_id_t *oid)
int | dfs_lookup (dfs_t *dfs, const char *path, int flags, dfs_obj_t **obj, mode_t *mode, struct stat *stbuf)
int | dfs_lookup_rel (dfs_t *dfs, dfs_obj_t *parent, const char *name, int flags, dfs_obj_t **obj, mode_t *mode, struct stat *stbuf)
int | dfs_suggest_oclass (dfs_t *dfs, const char *hint, daos_oclass_id_t *cid)
int | dfs_open (dfs_t *dfs, dfs_obj_t *parent, const char *name, mode_t mode, int flags, daos_oclass_id_t cid, daos_size_t chunk_size, const char *value, dfs_obj_t **obj)
int | dfs_dup (dfs_t *dfs, dfs_obj_t *obj, int flags, dfs_obj_t **new_obj)
int | dfs_obj_local2global (dfs_t *dfs, dfs_obj_t *obj, d_iov_t *glob)
int | dfs_obj_global2local (dfs_t *dfs, int flags, d_iov_t glob, dfs_obj_t **obj)
int | dfs_release (dfs_obj_t *obj)
int | dfs_read (dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_size_t *read_size, daos_event_t *ev)
int | dfs_readx (dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_size_t *read_size, daos_event_t *ev)
int | dfs_write (dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_event_t *ev)
int | dfs_writex (dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_event_t *ev)
int | dfs_get_size (dfs_t *dfs, dfs_obj_t *obj, daos_size_t *size)
int | dfs_punch (dfs_t *dfs, dfs_obj_t *obj, daos_off_t offset, daos_size_t len)
int | dfs_readdir (dfs_t *dfs, dfs_obj_t *obj, daos_anchor_t *anchor, uint32_t *nr, struct dirent *dirs)
int | dfs_readdirplus (dfs_t *dfs, dfs_obj_t *obj, daos_anchor_t *anchor, uint32_t *nr, struct dirent *dirs, struct stat *stbufs)
int | dfs_iterate (dfs_t *dfs, dfs_obj_t *obj, daos_anchor_t *anchor, uint32_t *nr, size_t size, dfs_filler_cb_t op, void *arg)
int | dfs_dir_anchor_set (dfs_obj_t *obj, const char name[], daos_anchor_t *anchor)
int | dfs_obj_anchor_split (dfs_obj_t *obj, uint32_t *nr, daos_anchor_t *anchors)
int | dfs_obj_anchor_set (dfs_obj_t *obj, uint32_t index, daos_anchor_t *anchor)
int | dfs_mkdir (dfs_t *dfs, dfs_obj_t *parent, const char *name, mode_t mode, daos_oclass_id_t cid)
int | dfs_remove (dfs_t *dfs, dfs_obj_t *parent, const char *name, bool force, daos_obj_id_t *oid)
int | dfs_move (dfs_t *dfs, dfs_obj_t *parent, const char *name, dfs_obj_t *new_parent, const char *new_name, daos_obj_id_t *oid)
int | dfs_exchange (dfs_t *dfs, dfs_obj_t *parent1, const char *name1, dfs_obj_t *parent2, const char *name2)
int | dfs_get_mode (dfs_obj_t *obj, mode_t *mode)
int | dfs_obj_get_info (dfs_t *dfs, dfs_obj_t *obj, dfs_obj_info_t *info)
int | dfs_obj_set_oclass (dfs_t *dfs, dfs_obj_t *obj, int flags, daos_oclass_id_t cid)
int | dfs_obj_set_chunk_size (dfs_t *dfs, dfs_obj_t *obj, int flags, daos_size_t csize)
int | dfs_get_file_oh (dfs_obj_t *obj, daos_handle_t *oh)
int | dfs_get_chunk_size (dfs_obj_t *obj, daos_size_t *chunk_size)
int | dfs_get_symlink_value (dfs_obj_t *obj, char *buf, daos_size_t *size)
int | dfs_update_parent (dfs_obj_t *obj, dfs_obj_t *src_obj, const char *name)
int | dfs_stat (dfs_t *dfs, dfs_obj_t *parent, const char *name, struct stat *stbuf)
int | dfs_ostat (dfs_t *dfs, dfs_obj_t *obj, struct stat *stbuf)
int | dfs_osetattr (dfs_t *dfs, dfs_obj_t *obj, struct stat *stbuf, int flags)
int | dfs_access (dfs_t *dfs, dfs_obj_t *parent, const char *name, int mask)
int | dfs_chmod (dfs_t *dfs, dfs_obj_t *parent, const char *name, mode_t mode)
int | dfs_chown (dfs_t *dfs, dfs_obj_t *parent, const char *name, uid_t uid, gid_t gid, int flags)
int | dfs_sync (dfs_t *dfs)
int | dfs_setxattr (dfs_t *dfs, dfs_obj_t *obj, const char *name, const void *value, daos_size_t size, int flags)
int | dfs_getxattr (dfs_t *dfs, dfs_obj_t *obj, const char *name, void *value, daos_size_t *size)
int | dfs_removexattr (dfs_t *dfs, dfs_obj_t *obj, const char *name)
int | dfs_listxattr (dfs_t *dfs, dfs_obj_t *obj, char *list, daos_size_t *size)
int | dfs_cont_check (daos_handle_t poh, const char *cont, uint64_t flags, const char *name)

## Detailed Description

DAOS File System API

The DFS API provides an encapuslated namespace with a POSIX like API directly on top of the DAOS API. The namespace is encapsulated under a single DAOS container where directories and files are objects in that container.

Definition in file daos_fs.h.

## Macro Definition Documentation

## ◆ DFS_BALANCED

#define DFS_BALANCED 4

DFS container balanced consistency mode. DFS operations using a DTX

Definition at line 53 of file daos_fs.h.

## ◆ DFS_DEFAULT_CHUNK_SIZE

#define DFS_DEFAULT_CHUNK_SIZE 1048576

Default chunk size for files (arrays)

Definition at line 33 of file daos_fs.h.

## ◆ DFS_MAX_FSIZE

#define DFS_MAX_FSIZE (~0ULL)

Maximum file size

Definition at line 31 of file daos_fs.h.

## ◆ DFS_MAX_NAME

#define DFS_MAX_NAME NAME_MAX

Maximum Name length

Definition at line 27 of file daos_fs.h.

## ◆ DFS_MAX_PATH

#define DFS_MAX_PATH PATH_MAX

Maximum PATH length

Definition at line 29 of file daos_fs.h.

## ◆ DFS_MAX_XATTR_LEN

#define DFS_MAX_XATTR_LEN 65536

Maximum xattr value

Definition at line 37 of file daos_fs.h.

## ◆ DFS_MAX_XATTR_NAME

#define DFS_MAX_XATTR_NAME 255

Maximum xattr name

Definition at line 35 of file daos_fs.h.

## ◆ DFS_RDONLY

#define DFS_RDONLY O_RDONLY

read-only access

Definition at line 57 of file daos_fs.h.

## ◆ DFS_RDWR

#define DFS_RDWR O_RDWR

read/write access

Definition at line 59 of file daos_fs.h.

## ◆ DFS_RELAXED

#define DFS_RELAXED 0

DFS container relaxed consistency mode. DFS operations do not use a DTX (default mode)

Definition at line 55 of file daos_fs.h.

## ◆ DFS_SET_ATTR_ATIME

#define DFS_SET_ATTR_ATIME (1 << 1)

Option to set the access time on an entry

Definition at line 979 of file daos_fs.h.

## ◆ DFS_SET_ATTR_GID

#define DFS_SET_ATTR_GID (1 << 5)

Option to set gid of object

Definition at line 987 of file daos_fs.h.

## ◆ DFS_SET_ATTR_MODE

#define DFS_SET_ATTR_MODE (1 << 0)

Option to set the mode_t on an entry

Definition at line 977 of file daos_fs.h.

## ◆ DFS_SET_ATTR_MTIME

#define DFS_SET_ATTR_MTIME (1 << 2)

Option to set the modify time on an entry

Definition at line 981 of file daos_fs.h.

## ◆ DFS_SET_ATTR_SIZE

#define DFS_SET_ATTR_SIZE (1 << 3)

Option to set size of a file

Definition at line 983 of file daos_fs.h.

## ◆ DFS_SET_ATTR_UID

#define DFS_SET_ATTR_UID (1 << 4)

Option to set uid of object

Definition at line 985 of file daos_fs.h.

## Typedef Documentation

## ◆ dfs_filler_cb_t

typedef int(* dfs_filler_cb_t) (dfs_t *dfs, dfs_obj_t *obj, const char name[], void *arg)

User callback defined for dfs_readdir_size.

Definition at line 678 of file daos_fs.h.

## ◆ dfs_obj_t

typedef struct dfs_obj dfs_obj_t

File/Directory/Symlink object handle struct

Definition at line 40 of file daos_fs.h.

## ◆ dfs_t

typedef struct dfs dfs_t

DFS mount handle struct

Definition at line 42 of file daos_fs.h.

## Enumeration Type Documentation

## ◆ anonymous enum

anonymous enum

Enumerator
DFS_CHECK_PRINT | print the leaked OIDS
DFS_CHECK_REMOVE | remove / punch the leaked objects
DFS_CHECK_RELINK | relink the leaked oids under "/lost+found"
DFS_CHECK_VERIFY | verify data consistency of each oid in the container (note that this will be slow)
DFS_CHECK_EVICT_ALL | Evict all open container handles to ensure exclusive open works for the checker

Definition at line 1138 of file daos_fs.h.

## Function Documentation

## ◆ dfs_access()

int dfs_access | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | int | mask )

Check access permissions on an object. Similar to Linux access(2). Symlinks are dereferenced.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Link name of the object. Can be NULL if parent is root, which means operation will be on root object.
  [in] | mask | accessibility check(s) to be performed. It should be either the value F_OK, or a mask with bitwise OR of one or more of R_OK, W_OK, and X_OK.

Returns
  0 on success, errno code on failure.

## ◆ dfs_chmod()

int dfs_chmod | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | mode_t | mode )

Change permission access bits. Symlinks are dereferenced.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Link name of the object. Can be NULL if parent is root, which means operation will be on root object.
  [in] | mode | New permission access modes. For now, we don't support the sticky bit, setuid, and setgid.

Returns
  0 on success, errno code on failure.

## ◆ dfs_chown()

int dfs_chown | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | uid_t | uid,
|  | gid_t | gid,
|  | int | flags )

Change owner and group. Since uid and gid are not enforced at the DFS level, we do not also enforce the process privileges to be able to change the uid and gid. Any process with write access to the DFS container can make changes to the uid and gid using this function.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Link name of the object. Can be NULL if parent is root, which means operation will be on root object.
  [in] | uid | change owner of file (-1 to leave unchanged).
  [in] | gid | change group of file (-1 to leave unchanged).
  [in] | flags | if 0, symlinks are dereferenced. Pass O_NOFOLLOW to not dereference.

Returns
  0 on success, errno code on failure.

## ◆ dfs_connect()

int dfs_connect | ( | const char * | pool,
|  | const char * | sys,
|  | const char * | cont,
|  | int | flags,
|  | dfs_attr_t * | attr,
|  | dfs_t ** | dfs )

Mount a DFS namespace over the specified pool and container. The container can be optionally created if it doesn't exist, and O_CREAT is passed in flags. The handle must be released using dfs_disconnect() and not dfs_umount(). Using the latter in this case will leak open handles for the pool and container.

This function works only if dfs_init() is called, otherwise would return EACCES. In addition to setting up the pool and container handles for the user, this also utilizes an internal cache for keeping the pool and container handles open internally with a ref count and closes those handles on dfs_finalize().

Parameters

  [in] | pool | Pool label.
  [in] | sys | DAOS system name to use for the pool connect. Pass NULL to use the default system.
  [in] | cont | Container label.
  [in] | flags | Mount flags (O_RDONLY or O_RDWR, O_CREAT). O_CREAT attempts to create the DFS container if it doesn't exists.
  [in] | attr | Optional set of properties and attributes to set on the container (if being created). Pass NULL to use default.
  [out] | dfs | Pointer to the created DFS mount point.

Returns
  0 on success, errno code on failure.

## ◆ dfs_cont_check()

int dfs_cont_check | ( | daos_handle_t | poh,
|  | const char * | cont,
|  | uint64_t | flags,
|  | const char * | name )

Scan the DFS namespace and check if there are any leaked objects. Depending on the flag passed, either remove those leaked objects to reclaim space, add those object to "Lost+Found" directory, or just print the oids to stdout.

Parameters

  [in] | poh | Open pool handle.
  [in] | cont | POSIX container label.
  [in] | flags | Flags to indicate what to do with leaked objects: punch, link to l+f, or print to stdout.
  [in] | name | Optional directory name to be created under lost+found where all oids are stored. If NULL is specified, a directory will be created with a name corresponding to the current timestamp with the format "%Y-%m-%d-%H:%M:%S". If the DFS_CHECK_LINK_LF is not set, this is ignored.

Returns
  0 on success, errno code on failure.

## ◆ dfs_cont_create()

int dfs_cont_create | ( | daos_handle_t | poh,
|  | uuid_t * | uuid,
|  | dfs_attr_t * | attr,
|  | daos_handle_t * | coh,
|  | dfs_t ** | dfs )

Create a DFS container with the POSIX property layout set. Optionally set attributes for hints on the container.

Parameters

  [in] | poh | Pool open handle.
  [out] | uuid | Pointer to uuid_t to hold the implementation-generated container UUID.
  [in] | attr | Optional set of properties and attributes to set on the container. Pass NULL if none.
  [out] | coh | Optionally leave the container open and return its hdl.
  [out] | dfs | Optionally mount DFS on the container and return the dfs handle.

Returns
  0 on success, errno code on failure.

## ◆ dfs_cont_create_with_label()

int dfs_cont_create_with_label | ( | daos_handle_t | poh,
|  | const char * | label,
|  | dfs_attr_t * | attr,
|  | uuid_t * | uuid,
|  | daos_handle_t * | coh,
|  | dfs_t ** | dfs )

Create a DFS container with label label. This is the same as dfs_container_create() with the label property set in attr->da_props.

Parameters

  [in] | poh | Pool open handle.
  [in] | label | Required, label property of the new container. Supersedes any label specified in cont_prop.
  [in] | attr | Optional set of properties and attributes to set on the container. Pass NULL if none.
  [out] | uuid | Optional pointer to uuid_t to hold the implementation-generated container UUID.
  [out] | coh | Optionally leave the container open and return its hdl.
  [out] | dfs | Optionally mount DFS on the container and return the dfs handle.

Returns
  0 on success, errno code on failure.

## ◆ dfs_cont_get()

int dfs_cont_get | ( | dfs_t * | dfs,
|  | daos_handle_t * | coh )

Retrieve the open cont handle on the DFS mount. This is refcounted internally and must be released with dfs_cont_put().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [out] | coh | Open cont handle.

Returns
  0 on success, errno code on failure.

## ◆ dfs_cont_put()

int dfs_cont_put | ( | dfs_t * | dfs,
|  | daos_handle_t | coh )

Release refcount of cont handle taken by dfs_cont_get().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [out] | coh | Cont handle that was returned from dfs_cont_get().

Returns
  0 on success, errno code on failure.

## ◆ dfs_destroy()

int dfs_destroy | ( | const char * | pool,
|  | const char * | sys,
|  | const char * | cont,
|  | int | force,
|  | daos_event_t * | ev )

Evict all the container handles from the hashtable and destroy the container.

Parameters

  [in] | pool | Pool label where the container is.
  [in] | sys | DAOS system name to use for the pool. Pass NULL to use the default system.
  [in] | cont | Container label to destroy.
  [in] | force | Container destroy will return failure if the container is still busy (outstanding open handles from other open calls). This parameter will force the destroy to proceed even if there is an outstanding open handle.
  [in] | ev | Completion event, it is optional and can be NULL. The function will run in blocking mode if ev is NULL.

Returns
  0 on success, errno code on failure.

## ◆ dfs_dir_anchor_set()

int dfs_dir_anchor_set | ( | dfs_obj_t * | obj,
|  | const char | name[],
|  | daos_anchor_t * | anchor )

Set the readdir/iterate anchor to start from a specific entry name in a directory object. When using the anchor in a readdir call, the iteration will start from the position of that entry.

Parameters

  [in] | obj | Opened directory object.
  [in] | name | Entry name of a file/dir in the open directory where anchor should be set.
  [out] | anchor | Hash anchor returned for the position of the entry name in obj.

Returns
  0 on success, errno code on failure.

## ◆ dfs_disconnect()

int dfs_disconnect | ( | dfs_t * | dfs | ) |

Umount the DFS namespace, and release the ref count on the container and pool handles. This should be called on a dfs mount created with dfs_connect() and not dfs_mount().

Parameters

  [in] | dfs | Pointer to the mounted file system from dfs_connect().

Returns
  0 on success, errno code on failure.

## ◆ dfs_dup()

int dfs_dup | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | int | flags,
|  | dfs_obj_t ** | new_obj )

Duplicate the DFS object without any RPCs (locally) by using the existing open handles. This is used mostly for low-level fuse to avoid re-opening. The duplicated object must be released with dfs_release().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Object to dup.
  [in] | flags | Access flags to open with (O_RDONLY or O_RDWR).
  [out] | new_obj | DFS object that is duplicated/opened.

Returns
  0 on success, errno code on failure.

## ◆ dfs_exchange()

int dfs_exchange | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent1,
|  | const char * | name1,
|  | dfs_obj_t * | parent2,
|  | const char * | name2 )

Exchange two objects.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent1 | Parent directory object of name1. If NULL, use root obj.
  [in] | name1 | Link name of first object.
  [in] | parent2 | Parent directory object of name2. If NULL, use root obj.
  [in] | name2 | link name of second object.

Returns
  0 on success, errno code on failure.

## ◆ dfs_fini()

int dfs_fini | ( | void |  | ) |

Finalize the DAOS and DFS library. Typically this is called at the end of a user program or in IO middleware finalization. This is required to be called if dfs_init() was called and closes all cached open pool and container handles that resulted from dfs_connect() calls.

Returns
  0 on success, errno code on failure.

## ◆ dfs_get_chunk_size()

int dfs_get_chunk_size | ( | dfs_obj_t * | obj,
|  | daos_size_t * | chunk_size )

Retrieve the chunk size of a DFS file object.

Parameters

  [in] | obj | Open object.
  [out] | chunk_size | Chunk size of array object.

Returns
  0 on success, errno code on failure.

## ◆ dfs_get_file_oh()

int dfs_get_file_oh | ( | dfs_obj_t * | obj,
|  | daos_handle_t * | oh )

Retrieve the DAOS open handle of a DFS file object. User should not close this handle. This is used in cases like MPI-IO where 1 rank creates the file with dfs, but wants to access the file with the array API directly rather than the DFS API.

Parameters

  [in] | obj | Open object.
  [out] | oh | DAOS object open handle.

Returns
  0 on success, errno code on failure.

## ◆ dfs_get_mode()

int dfs_get_mode | ( | dfs_obj_t * | obj,
|  | mode_t * | mode )

Retrieve mode of an open object.

Parameters

  [in] | obj | Open object to query.
  [out] | mode | mode_t (permissions + type).

Returns
  0 on success, errno code on failure.

## ◆ dfs_get_size()

int dfs_get_size | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | daos_size_t * | size )

Query size of file data.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [out] | size | Size of file.

Returns
  0 on success, errno code on failure.

## ◆ dfs_get_symlink_value()

int dfs_get_symlink_value | ( | dfs_obj_t * | obj,
|  | char * | buf,
|  | daos_size_t * | size )

Retrieve Symlink value of object if it's a symlink. If the buffer size passed in is not large enough, we copy up to size of the buffer, and update the size to actual value size. The size returned includes the null terminator.

Parameters

  [in] | obj | Open object to query.
  [in] | buf | user buffer to copy the symlink value in.
  [in,out] | size | [in]: Size of buffer passed in. [out]: Actual size of value.

Returns
  0 on success, errno code on failure.

## ◆ dfs_getxattr()

int dfs_getxattr | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | const char * | name,
|  | void * | value,
|  | daos_size_t * | size )

Get extended attribute of an open object. If object is a symlink, the link itself is interogated.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object where xattr is checked.
  [in] | name | Name of xattr to get.
  [out] | value | Buffer to place value of xattr.
  [in,out] | size | [in]: Size of buffer value. [out]: Actual size of xattr.

Returns
  0 on success, errno code on failure.

## ◆ dfs_global2local()

int dfs_global2local | ( | daos_handle_t | poh,
|  | daos_handle_t | coh,
|  | int | flags,
|  | d_iov_t | glob,
|  | dfs_t ** | dfs )

Create a dfs mount from global representation data. This has to be closed with dfs_umount().

Parameters

  [in] | poh | Pool connection handle
  [in] | coh | Container open handle.
  [in] | flags | Mount flags (O_RDONLY or O_RDWR). If 0, inherit flags of serialized DFS handle.
  [in] | glob | Global (shared) representation of a collective handle to be extracted
  [out] | dfs | Returned dfs mount

Returns
  0 on success, errno code on failure.

## ◆ dfs_global2local_all()

int dfs_global2local_all | ( | int | flags,
|  | d_iov_t | glob,
|  | dfs_t ** | dfs )

Create a dfs mount from global representation data. This has to be closed with dfs_disconnect() since the pool and container connections are established with it.

Parameters

  [in] | flags | Mount flags (O_RDONLY or O_RDWR). If 0, inherit flags of serialized DFS handle.
  [in] | glob | Global (shared) representation of a collective handle to be extracted.
  [out] | dfs | Returned dfs mount

Returns
  0 on success, errno code on failure.

## ◆ dfs_init()

int dfs_init | ( | void |  | ) |

Initialize the DAOS and DFS library. Typically this is called at the beginning of a user program or in IO middleware initialization. This is required to be called if using the dfs_connect/disconnect calls to setup the DFS cache for the pool and container handles. There is no harm however in calling it whenever using any of the DFS API (mount/umount) and can be equivalent to calling daos_init() instead.

Returns
  0 on success, errno code on failure.

## ◆ dfs_iterate()

int dfs_iterate | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | daos_anchor_t * | anchor,
|  | uint32_t * | nr,
|  | size_t | size,
|  | dfs_filler_cb_t | op,
|  | void * | arg )

Same as dfs_readdir, but this also adds a buffer size limitation when enumerating. On every entry, it issues a user defined callback. If size limitation is reached, function returns E2BIG

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened directory object.
  [in,out] | anchor | Hash anchor for the next call, it should be set to zeroes for the first call, it should not be changed by caller between calls.
  [in,out] | nr | [in]: MAX number of entries to enumerate. [out]: Actual number of entries enumerated.
  [in] | size | Max buffer size to be used internally before breaking.
  [in] | op | Optional callback to be issued on every entry.
  [in] | arg | Pointer to user data to be passed to op.

Returns
  0 on success, errno code on failure.

## ◆ dfs_listxattr()

int dfs_listxattr | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | char * | list,
|  | daos_size_t * | size )

list extended attributes of an open object and place them all in a buffer NULL terminated one after the other. If object is a symlink, the link itself is interogated.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object where xattrs will be listed.
  [in,out] | list | [in]: Allocated buffer for all xattr names. [out]: Names placed after each other (null terminated).
  [in,out] | size | [in]: Size of list. [out]: Actual size of list.

Returns
  0 on success, errno code on failure.

## ◆ dfs_local2global()

int dfs_local2global | ( | dfs_t * | dfs,
|  | d_iov_t * | glob )

Convert a local dfs mount to global representation data which can be shared with peer processes. If glob->iov_buf is set to NULL, the actual size of the global handle is returned through glob->iov_buf_len. This function does not involve any communication and does not block.

Parameters

  [in] | dfs | valid dfs mount to be shared
  [out] | glob | pointer to iov of the buffer to store mount information

Returns
  0 on success, errno code on failure.

## ◆ dfs_local2global_all()

int dfs_local2global_all | ( | dfs_t * | dfs,
|  | d_iov_t * | glob )

Convert a local dfs mount including the pool and container handles to global representation data which can be shared with peer processes. If glob->iov_buf is set to NULL, the actual size of the global handle is returned through glob->iov_buf_len. This function does not involve any communication and does not block.

Parameters

  [in] | dfs | valid dfs mount to be shared
  [out] | glob | pointer to iov of the buffer to store mount information

Returns
  0 on success, errno code on failure.

## ◆ dfs_lookup()

int dfs_lookup | ( | dfs_t * | dfs,
|  | const char * | path,
|  | int | flags,
|  | dfs_obj_t ** | obj,
|  | mode_t * | mode,
|  | struct stat * | stbuf )

Lookup a path in the DFS and return the associated open object and mode. The object must be released with dfs_release().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | path | Path to lookup.
  [in] | flags | Access flags to open with (O_RDONLY or O_RDWR).
  [out] | obj | Pointer to the object looked up.
  [out] | mode | Optional mode_t of object looked up.
  [out] | stbuf | Optional stat struct of object looked up.

Returns
  0 on success, errno code on failure.

## ◆ dfs_lookup_rel()

int dfs_lookup_rel | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | int | flags,
|  | dfs_obj_t ** | obj,
|  | mode_t * | mode,
|  | struct stat * | stbuf )

Lookup an entry in the parent object and return the associated open object and mode of that entry. If the entry is a symlink, the symlink value is not resolved and the user can decide what to do to further resolve the value of the symlink. The object must be released with dfs_release().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj. This is useful in cases where the creator/opener is working in a flat namespace and doesn't need to lookup/release the root object.
  [in] | name | Link name of the object to create/open.
  [in] | flags | Access flags to open with (O_RDONLY or O_RDWR).
  [out] | obj | Pointer to the object looked up.
  [out] | mode | Optional mode_t of object looked up.
  [out] | stbuf | Optional stat struct of object looked up.

Returns
  0 on success, errno code on failure.

## ◆ dfs_mkdir()

int dfs_mkdir | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | mode_t | mode,
|  | daos_oclass_id_t | cid )

Create a directory.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Link name of new dir.
  [in] | mode | mkdir mode.
  [in] | cid | DAOS object class id (pass 0 for default MAX_RW).

Returns
  0 on success, errno code on failure.

## ◆ dfs_mount()

int dfs_mount | ( | daos_handle_t | poh,
|  | daos_handle_t | coh,
|  | int | flags,
|  | dfs_t ** | dfs )

Mount a file system over DAOS. The pool and container handle must remain connected/open until after dfs_umount() is called; otherwise access to the dfs namespace will fail.

The mount will create a root directory (DAOS object) for the file system. The user will associate the dfs object returned with a mount point.

Parameters

  [in] | poh | Pool connection handle
  [in] | coh | Container open handle.
  [in] | flags | Mount flags (O_RDONLY or O_RDWR).
  [out] | dfs | Pointer to the file system object created.

Returns
  0 on success, errno code on failure.

## ◆ dfs_move()

int dfs_move | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | dfs_obj_t * | new_parent,
|  | const char * | new_name,
|  | daos_obj_id_t * | oid )

Move/rename an object.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Source parent directory object. If NULL, use root obj.
  [in] | name | Link name of object.
  [in] | new_parent | Target parent directory object. If NULL, use root obj.
  [in] | new_name | New link name of object.
  [out] | oid | Optional: return the internal object ID of the removed obj if the move clobbered it.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj2id()

int dfs_obj2id | ( | dfs_obj_t * | obj,
|  | daos_obj_id_t * | oid )

Convert from a dfs_obj_t to a daos_obj_id_t.

Parameters

  [in] | obj | Object to convert
  [out] | oid | Daos object ID.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_anchor_set()

int dfs_obj_anchor_set | ( | dfs_obj_t * | obj,
|  | uint32_t | index,
|  | daos_anchor_t * | anchor )

Set an anchor with an index based on split done with dfs_obj_anchor_split. The anchor passed will be re-intialized and set to start and finish iteration based on the specified index.

Parameters

  [in] | obj | Dir object to split anchor for.
  [in] | index | Index of set this anchor for iteration.
  [in,out] | anchor | Hash anchor to set.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_anchor_split()

int dfs_obj_anchor_split | ( | dfs_obj_t * | obj,
|  | uint32_t * | nr,
|  | daos_anchor_t * | anchors )

Provide a function for large directories to split an anchor to be able to execute a parallel readdir or iterate. This routine suggests the optimal number of anchors to use instead of just 1 and optionally returns all those anchors. The user would allocate the array of anchors after querying the number of anchors needed. Alternatively, user does not provide an array and can call dfs_obj_anchor_set() for every anchor to set.

The user could suggest how many anchors to split the iteration over. This feature is not supported yet.

Parameters

  [in] | obj | Dir object to split anchor for.
  [in,out] | nr | [in]: Number of anchors requested and allocated in anchors. Pass 0 for DAOS to recommend split num. [out]: Number of anchors recommended if 0 is passed in.
  [in] | anchors | Optional array of anchors that are split.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_get_info()

int dfs_obj_get_info | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | dfs_obj_info_t * | info )

Retrieve some attributes of DFS object. Those include the object class and the chunk size.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object handle to query.
  [out] | info | info object container object class, chunks size, etc.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_global2local()

int dfs_obj_global2local | ( | dfs_t * | dfs,
|  | int | flags,
|  | d_iov_t | glob,
|  | dfs_obj_t ** | obj )

Create a dfs object from global representation data. This has to be closed with dfs_release().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | flags | Access flags (O_RDONLY/O_RDWR/O_WRONLY). If 0, inherit flags of serialized object handle.
  [in] | glob | Global (shared) representation of a collective handle to be extracted
  [out] | obj | Returned open object handle

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_local2global()

int dfs_obj_local2global | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | d_iov_t * | glob )

Convert a local DFS object to global representation data which can be shared with peer processes. If glob->iov_buf is set to NULL, the actual size of the global handle is returned through glob->iov_buf_len. This function does not involve any communication and does not block.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | DFS Object to serialize
  [out] | glob | pointer to iov of the buffer to store obj information

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_set_chunk_size()

int dfs_obj_set_chunk_size | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | int | flags,
|  | daos_size_t | csize )

Set the chunk size on a directory for new files or sub-dirs that are created in that dir. This does not change the chunk size for existing files or dirs in that directory. Note that this is only supported on directories and will fail if called on non-directory objects.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object handle to access.
  [in] | flags | Flags for setting chunk size (currently ignored)
  [in] | csize | Chunk size to set object to.

Returns
  0 on success, errno code on failure.

## ◆ dfs_obj_set_oclass()

int dfs_obj_set_oclass | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | int | flags,
|  | daos_oclass_id_t | cid )

Set the object class on a directory for new files or sub-dirs that are created in that dir. This does not change the chunk size for existing files or dirs in that directory, nor it does change the object class of the directory itself. Note that this is only supported on directories and will fail if called on non-directory objects.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object handle to access.
  [in] | flags | Flags for setting oclass (currently ignored)
  [in] | cid | object class.

Returns
  0 on success, errno code on failure.

## ◆ dfs_open()

int dfs_open | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | mode_t | mode,
|  | int | flags,
|  | daos_oclass_id_t | cid,
|  | daos_size_t | chunk_size,
|  | const char * | value,
|  | dfs_obj_t ** | obj )

Create/Open a directory, file, or Symlink. The object must be released with dfs_release().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj. This is useful in cases where the creator/opener is working in a flat namespace and doesn't need to lookup/release the root object.
  [in] | name | Link name of the object to create/open.
  [in] | mode | mode_t (permissions + type).
  [in] | flags | Access flags (handles: O_RDONLY, O_RDWR, O_EXCL, O_CREAT, O_TRUNC).
  [in] | cid | DAOS object class id (pass 0 for default MAX_RW). Valid on create only; ignored otherwise.
  [in] | chunk_size | Chunk size of the array object to be created. (pass 0 for default 1 MiB chunk size). Valid on file create only; ignored otherwise.
  [in] | value | Symlink value (NULL if not syml).
  [out] | obj | Pointer to object opened.

Returns
  0 on success, errno code on failure.

## ◆ dfs_osetattr()

int dfs_osetattr | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | struct stat * | stbuf,
|  | int | flags )

set stat attributes for a file and fetch new values. If the object is a symlink the link itself is modified. See dfs_stat() for which entries are filled.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object (File, dir or syml) to modify.
  [in,out] | stbuf | [in]: Stat struct with the members set. [out]: Stat struct with all valid members filled.
  [in] | flags | Bitmask of flags to set

Returns
  0 on Success. errno code on Failure.

## ◆ dfs_ostat()

int dfs_ostat | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | struct stat * | stbuf )

Same as dfs_stat but works directly on an open object.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object (File, dir or syml) to stat.
  [out] | stbuf | Stat struct with the members above filled.

Returns
  0 on success, errno code on failure.

## ◆ dfs_pool_get()

int dfs_pool_get | ( | dfs_t * | dfs,
|  | daos_handle_t * | poh )

Retrieve the open pool handle on the DFS mount. This is refcounted internally and must be released with dfs_pool_put().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [out] | poh | Open pool handle.

Returns
  0 on success, errno code on failure.

## ◆ dfs_pool_put()

int dfs_pool_put | ( | dfs_t * | dfs,
|  | daos_handle_t | poh )

Release refcount of pool handle taken by dfs_pool_get().

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [out] | poh | Pool handle that was returned from dfs_pool_get().

Returns
  0 on success, errno code on failure.

## ◆ dfs_punch()

int dfs_punch | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | daos_off_t | offset,
|  | daos_size_t | len )

Punch a hole in the file starting at offset to len. If len is set to DFS_MAX_FSIZE, this will be equivalent to a truncate operation to shrink or extend the file to offset bytes depending on the file size.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [in] | offset | offset of file to punch at.
  [in] | len | number of bytes to punch.

Returns
  0 on success, errno code on failure.

## ◆ dfs_query()

int dfs_query | ( | dfs_t * | dfs,
|  | dfs_attr_t * | attr )

Query attributes of a DFS mount.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [out] | attr | Attributes on the DFS container.

Returns
  0 on success, errno code on failure.

## ◆ dfs_read()

int dfs_read | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | d_sg_list_t * | sgl,
|  | daos_off_t | off,
|  | daos_size_t * | read_size,
|  | daos_event_t * | ev )

Read data from the file object, and return actual data read.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [in] | sgl | Scatter/Gather list for data buffer.
  [in] | off | Offset into the file to read from.
  [out] | read_size | How much data is actually read.
  [in] | ev | Completion event, it is optional and can be NULL. Function will run in blocking mode if ev is NULL.

Returns
  0 on success, errno code on failure.

## ◆ dfs_readdir()

int dfs_readdir | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | daos_anchor_t * | anchor,
|  | uint32_t * | nr,
|  | struct dirent * | dirs )

directory readdir.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened directory object.
  [in,out] | anchor | Hash anchor for the next call, it should be set to zeroes for the first call, it should not be changed by caller between calls.
  [in,out] | nr | [in]: number of dirents allocated in dirs. [out]: number of returned dirents.
  [in,out] | dirs | [in] preallocated array of dirents. [out]: dirents returned with d_name filled only.

Returns
  0 on success, errno code on failure.

## ◆ dfs_readdirplus()

int dfs_readdirplus | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | daos_anchor_t * | anchor,
|  | uint32_t * | nr,
|  | struct dirent * | dirs,
|  | struct stat * | stbufs )

directory readdir + stat.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened directory object.
  [in,out] | anchor | Hash anchor for the next call, it should be set to zeroes for the first call, it should not be changed by caller between calls.
  [in,out] | nr | [in]: number of dirents allocated in dirs. [out]: number of returned dirents.
  [in,out] | dirs | [in] preallocated array of dirents. [out]: dirents returned with d_name filled only.
  [in,out] | stbufs | [in] preallocated array of struct stat. [out]: stat of every entry in dirs.

Returns
  0 on success, errno code on failure.

## ◆ dfs_readx()

int dfs_readx | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | dfs_iod_t * | iod,
|  | d_sg_list_t * | sgl,
|  | daos_size_t * | read_size,
|  | daos_event_t * | ev )

Non-contiguous read interface to a DFS file. Same as dfs_read with the ability to have a segmented file layout to read.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [in] | iod | IO descriptor for list-io.
  [in] | sgl | Scatter/Gather list for data buffer.
  [out] | read_size | How much data is actually read.
  [in] | ev | Completion event, it is optional and can be NULL. Function will run in blocking mode if ev is NULL.

Returns
  0 on success, errno code on failure.

## ◆ dfs_release()

int dfs_release | ( | dfs_obj_t * | obj | ) |

Close/release open object.

Parameters

  [in] | obj | Object to release.

Returns
  0 on success, errno code on failure.

## ◆ dfs_remove()

int dfs_remove | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | bool | force,
|  | daos_obj_id_t * | oid )

Remove an object from parent directory. If object is a directory and is non-empty; this will fail unless force option is true. If object is a symlink, the symlink is removed.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Name of object to remove in parent dir.
  [in] | force | If true, remove dir even if non-empty.
  [in] | oid | Optionally return the DAOS Object ID of the removed obj.

Returns
  0 on success, errno code on failure.

## ◆ dfs_removexattr()

int dfs_removexattr | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | const char * | name )

Remove extended attribute of an open object. If object is a symlink, the link itself is interogated.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object where xattr will be removed.
  [in] | name | Name of xattr to remove.

Returns
  0 on success, errno code on failure.

## ◆ dfs_set_prefix()

int dfs_set_prefix | ( | dfs_t * | dfs,
|  | const char * | prefix )

Optionally set a prefix on the dfs mount where all paths passed to dfs_lookup are trimmed off that prefix. This is helpful when using DFS API with a dfuse mount and the user would like to reference files in the dfuse mount instead of the absolute path from the root of the DFS container.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | prefix | absolute prefix to trim off path to dfs_lookup. Passing NULL unsets the prefix.

Returns
  0 on success, errno code on failure.

## ◆ dfs_setxattr()

int dfs_setxattr | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | const char * | name,
|  | const void * | value,
|  | daos_size_t | size,
|  | int | flags )

Set extended attribute on an open object (File, dir, syml). If object is a symlink, the value is set on the symlink itself.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Open object where xattr will be added.
  [in] | name | Name of xattr to add.
  [in] | value | Value of xattr.
  [in] | size | Size in bytes of the value.
  [in] | flags | Set flags. passing 0 does not check for xattr existence. XATTR_CREATE: create or fail if xattr exists. XATTR_REPLACE: replace or fail if xattr does not exist.

Returns
  0 on success, errno code on failure.

## ◆ dfs_stat()

int dfs_stat | ( | dfs_t * | dfs,
|  | dfs_obj_t * | parent,
|  | const char * | name,
|  | struct stat * | stbuf )

stat attributes of an entry. If object is a symlink, the link itself is interogated. The following elements of the stat struct are populated (the rest are set to 0): mode_t st_mode; uid_t st_uid; gid_t st_gid; off_t st_size; blkcnt_t st_blocks struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim;

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | parent | Opened parent directory object. If NULL, use root obj.
  [in] | name | Link name of the object. Can be NULL if parent is root, which means operation will be on root object.
  [out] | stbuf | Stat struct with the members above filled.

Returns
  0 on success, errno code on failure.

## ◆ dfs_suggest_oclass()

int dfs_suggest_oclass | ( | dfs_t * | dfs,
|  | const char * | hint,
|  | daos_oclass_id_t * | cid )

Suggest an oclass for creating DFS objects given a hint from the user of the format: obj:val where obj can be either file or dir/directory and val from: single: tiny files or directories to be single sharded. max: large files or directories to be max shared.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | hint | hint from user for a file or directory
  [out] | cid | object class suggested to use

Returns
  0 on success, errno code on failure.

## ◆ dfs_sync()

int dfs_sync | ( | dfs_t * | dfs | ) |

Sync to commit the latest epoch on the container. This applies to the entire namespace and not to a particular file/directory.

TODO: This should take a persistent snapshot at current timestamp.

Parameters

  [in] | dfs | Pointer to the mounted file system.

Returns
  0 on success, errno code on failure.

## ◆ dfs_umount()

int dfs_umount | ( | dfs_t * | dfs | ) |

Unmount a DAOS file system. This closes open handles to the root object and commits the epoch at current timestamp. The internal dfs struct is freed, so further access to that dfs will be invalid.

Parameters

  [in] | dfs | Pointer to the mounted file system.

Returns
  0 on success, errno code on failure.

## ◆ dfs_update_parent()

int dfs_update_parent | ( | dfs_obj_t * | obj,
|  | dfs_obj_t * | src_obj,
|  | const char * | name )

A DFS object open handle has links to its parent (oid) and the entry name of that object in that parent. In some cases a user would want to update the oh of an object in case of a rename. This API would allow modifying an existing open handle of an object to change it's parent and it's entry name. Note this is a local operation and doesn't change anything on the storage.

Parameters

  [in] | obj | Open object handle to update.
  [in] | src_obj | Open object handle of the object whose parent will be used as the new parent of obj.
  [in] | name | Optional new name of entry in parent. Pass NULL to leave the entry name unchanged.

Returns
  0 on Success. errno code on Failure.

## ◆ dfs_write()

int dfs_write | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | d_sg_list_t * | sgl,
|  | daos_off_t | off,
|  | daos_event_t * | ev )

Write data to the file object.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [in] | sgl | Scatter/Gather list for data buffer.
  [in] | off | Offset into the file to write to.
  [in] | ev | Completion event, it is optional and can be NULL. Function will run in blocking mode if ev is NULL.

Returns
  0 on success, errno code on failure.

## ◆ dfs_writex()

int dfs_writex | ( | dfs_t * | dfs,
|  | dfs_obj_t * | obj,
|  | dfs_iod_t * | iod,
|  | d_sg_list_t * | sgl,
|  | daos_event_t * | ev )

Non-contiguous write interface to a DFS file.

Parameters

  [in] | dfs | Pointer to the mounted file system.
  [in] | obj | Opened file object.
  [in] | iod | IO descriptor of file view.
  [in] | sgl | Scatter/Gather list for data buffer.
  [in] | ev | Completion event, it is optional and can be NULL. Function will run in blocking mode if ev is NULL.

Returns
  0 on success, errno code on failure.