/** * * MFSL_symlink_async_op: Callback for asynchronous link. * * Callback for asynchronous symlink. * * @param popasyncdes [INOUT] asynchronous operation descriptor * * @return the status of the performed FSAL_symlink. */ fsal_status_t MFSL_symlink_async_op(mfsl_async_op_desc_t * popasyncdesc) { fsal_status_t fsal_status; fsal_attrib_list_t attrsrc, attrdest, chown_attr; fsal_handle_t handle; attrsrc = attrdest = popasyncdesc->op_res.mkdir.attr; LogDebug(COMPONENT_MFSL, "Renaming file to complete asynchronous FSAL_symlink for async op %p", popasyncdesc); P(popasyncdesc->op_args.symlink.pmobject_dirdest->lock); fsal_status = FSAL_rename(&tmp_symlink_dirhandle, &popasyncdesc->op_args.symlink.precreate_name, &(popasyncdesc->op_args.symlink.pmobject_dirdest->handle), &popasyncdesc->op_args.symlink.linkname, &popasyncdesc->fsal_op_context, &attrsrc, &attrdest); if(FSAL_IS_ERROR(fsal_status)) { V(popasyncdesc->op_args.symlink.pmobject_dirdest->lock); return fsal_status; } V(popasyncdesc->op_args.symlink.pmobject_dirdest->lock); return fsal_status; } /* MFSL_symlink_async_op */
/** * * MFSL_create_async_op: Callback for asynchronous link. * * Callback for asynchronous create. * * @param popasyncdes [INOUT] asynchronous operation descriptor * * @return the status of the performed FSAL_create. */ fsal_status_t MFSL_create_async_op(mfsl_async_op_desc_t * popasyncdesc) { fsal_status_t fsal_status; fsal_attrib_list_t attrsrc, attrdest, chown_attr; fsal_handle_t handle; attrsrc = attrdest = popasyncdesc->op_res.mkdir.attr; LogDebug(COMPONENT_MFSL, "Renaming file to complete asynchronous FSAL_create for async op %p", popasyncdesc); P(popasyncdesc->op_args.create.pmfsl_obj_dirdest->lock); fsal_status = FSAL_rename(&dir_handle_precreate, &popasyncdesc->op_args.create.precreate_name, &(popasyncdesc->op_args.create.pmfsl_obj_dirdest->handle), &popasyncdesc->op_args.create.filename, &popasyncdesc->fsal_op_context, &attrsrc, &attrdest); if(FSAL_IS_ERROR(fsal_status)) { V(popasyncdesc->op_args.create.pmfsl_obj_dirdest->lock); return fsal_status; } /* Lookup to get the right attributes for the object */ fsal_status = FSAL_lookup(&(popasyncdesc->op_args.create.pmfsl_obj_dirdest->handle), &popasyncdesc->op_args.create.filename, &popasyncdesc->fsal_op_context, &handle, &popasyncdesc->op_res.create.attr); if(FSAL_IS_ERROR(fsal_status)) { V(popasyncdesc->op_args.create.pmfsl_obj_dirdest->lock); return fsal_status; } /* If user is not root, setattr to chown the entry */ if(popasyncdesc->op_args.create.owner != 0) { chown_attr.asked_attributes = FSAL_ATTR_MODE | FSAL_ATTR_OWNER | FSAL_ATTR_GROUP; chown_attr.mode = popasyncdesc->op_args.create.mode; chown_attr.owner = popasyncdesc->op_args.create.owner; chown_attr.group = popasyncdesc->op_args.create.group; fsal_status = FSAL_setattrs(&handle, &popasyncdesc->fsal_op_context, &chown_attr, &popasyncdesc->op_res.create.attr); } V(popasyncdesc->op_args.create.pmfsl_obj_dirdest->lock); return fsal_status; } /* MFSL_create_async_op */
fsal_status_t MFSL_rename(mfsl_object_t * old_parentdir_handle, /* IN */ fsal_name_t * p_old_name, /* IN */ mfsl_object_t * new_parentdir_handle, /* IN */ fsal_name_t * p_new_name, /* IN */ fsal_op_context_t * p_context, /* IN */ mfsl_context_t * p_mfsl_context, /* IN */ fsal_attrib_list_t * src_dir_attributes, /* [ IN/OUT ] */ fsal_attrib_list_t * tgt_dir_attributes /* [ IN/OUT ] */ ) { return FSAL_rename(&old_parentdir_handle->handle, p_old_name, &new_parentdir_handle->handle, p_new_name, p_context, src_dir_attributes, tgt_dir_attributes); } /* MFSL_rename */
fsal_status_t MFSL_rename(mfsl_object_t * old_parentdir_handle, /* IN */ fsal_name_t * p_old_name, /* IN */ mfsl_object_t * new_parentdir_handle, /* IN */ fsal_name_t * p_new_name, /* IN */ fsal_op_context_t * p_context, /* IN */ mfsl_context_t * p_mfsl_context, /* IN */ fsal_attrib_list_t * src_dir_attributes, /* [ IN/OUT ] */ fsal_attrib_list_t * tgt_dir_attributes, /* [ IN/OUT ] */ void * pextra ) { struct timeval start, stop, delta ; fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ; gettimeofday( &start, 0 ) ; fsal_status = FSAL_rename(&old_parentdir_handle->handle, p_old_name, &new_parentdir_handle->handle, p_new_name, p_context, src_dir_attributes, tgt_dir_attributes); gettimeofday( &stop, 0 ) ; delta = mfsl_timer_diff( &stop, &start ) ; LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ; return fsal_status ; } /* MFSL_rename */