fsal_status_t ZFSFSAL_close(zfsfsal_file_t * file_descriptor /* IN */ ) { int rc = 0; /* sanity checks. */ if(!file_descriptor) Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_close); TakeTokenFSCall(); if(!file_descriptor->is_closed) { rc = libzfswrap_close(file_descriptor->p_vfs, &file_descriptor->cred, file_descriptor->p_vnode, file_descriptor->flags); file_descriptor->is_closed = 1; } ReleaseTokenFSCall(); if(rc) Return(posix2fsal_error(rc), rc, INDEX_FSAL_close); Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_close); }
fsal_status_t ZFSFSAL_close(fsal_file_t * file_desc /* IN */ ) { int rc = 0; zfsfsal_file_t * file_descriptor = (zfsfsal_file_t *)file_desc; /* sanity checks. */ if(!file_descriptor) Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_close); TakeTokenFSCall(); if(!file_descriptor->is_closed) { /* Test that the vfs still exist */ ZFSFSAL_VFS_RDLock(); libzfswrap_vfs_t *p_vfs = ZFSFSAL_GetVFS(&file_descriptor->handle); if(!p_vfs) { ZFSFSAL_VFS_Unlock(); ReleaseTokenFSCall(); Return(ERR_FSAL_NOENT, 0, INDEX_FSAL_close); } rc = libzfswrap_close(p_vfs, &file_descriptor->cred, file_descriptor->p_vnode, file_descriptor->flags); ZFSFSAL_VFS_Unlock(); file_descriptor->is_closed = 1; } ReleaseTokenFSCall(); if(rc) Return(posix2fsal_error(rc), rc, INDEX_FSAL_close); Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_close); }