static int rtas_flash_release(struct inode *inode, struct file *file) { struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); struct rtas_update_flash_t *uf; uf = (struct rtas_update_flash_t *) dp->data; if (uf->flist) { /* File was opened in write mode for a new flash attempt */ /* Clear saved list */ if (rtas_firmware_flash_list.next) { free_flash_list(rtas_firmware_flash_list.next); rtas_firmware_flash_list.next = NULL; } if (uf->status != FLASH_AUTH) uf->status = flash_list_valid(uf->flist); if (uf->status == FLASH_IMG_READY) rtas_firmware_flash_list.next = uf->flist; else free_flash_list(uf->flist); uf->flist = NULL; } atomic_dec(&dp->count); return 0; }
static int rtas_flash_release(struct inode *inode, struct file *file) { struct rtas_update_flash_t *const uf = &rtas_update_flash_data; mutex_lock(&rtas_update_flash_mutex); if (uf->flist) { /* File was opened in write mode for a new flash attempt */ /* Clear saved list */ if (rtas_firmware_flash_list) { free_flash_list(rtas_firmware_flash_list); rtas_firmware_flash_list = NULL; } if (uf->status != FLASH_AUTH) uf->status = flash_list_valid(uf->flist); if (uf->status == FLASH_IMG_READY) rtas_firmware_flash_list = uf->flist; else free_flash_list(uf->flist); uf->flist = NULL; } mutex_unlock(&rtas_update_flash_mutex); return 0; }