int yaffs_close(int fd) { yaffsfs_Handle *h = NULL; int retVal = 0; yaffsfs_Lock(); h = yaffsfs_GetHandlePointer(fd); if(h && h->inUse) { // clean up yaffs_FlushFile(h->obj,1); h->obj->inUse--; if(h->obj->inUse <= 0 && h->obj->unlinked) { yaffs_DeleteFile(h->obj); } yaffsfs_PutHandle(fd); retVal = 0; } else { // bad handle yaffsfs_SetError(-EBADF); retVal = -1; } yaffsfs_Unlock(); return retVal; }
static int yaffs_file_flush(struct file *file) #endif { yaffs_Object *obj = yaffs_DentryToObject(file->f_dentry); yaffs_Device *dev = obj->myDev; T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_file_flush object %d (%s)\n", obj->objectId, obj->dirty ? "dirty" : "clean")); yaffs_GrossLock(dev); yaffs_FlushFile(obj, 1); yaffs_GrossUnlock(dev); return 0; }