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 void yaffs_delete_inode(struct inode *inode) { yaffs_Object *obj = yaffs_InodeToObject(inode); yaffs_Device *dev; T(YAFFS_TRACE_OS, ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino, atomic_read(&inode->i_count), obj ? "object exists" : "null object")); if (obj) { dev = obj->myDev; yaffs_GrossLock(dev); yaffs_DeleteFile(obj); yaffs_GrossUnlock(dev); } #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) truncate_inode_pages (&inode->i_data, 0); #endif clear_inode(inode); }