/**
 *
 * 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 */
示例#2
0
/**
 *
 * 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 */
示例#4
0
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 */