X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-file.c;h=1e3d1ad1950e025acf6cfd7711fca6cba3d85624;hb=1f8ac11d4550b1113d9a8c23e62b236cb8ad8404;hp=46d4a28839b9a66d52c39433055914010a4f1d0a;hpb=07aa8f3c18a33af0961e7546980a63ab5f6fba4f;p=palacios.git diff --git a/linux_module/iface-file.c b/linux_module/iface-file.c index 46d4a28..1e3d1ad 100644 --- a/linux_module/iface-file.c +++ b/linux_module/iface-file.c @@ -237,7 +237,7 @@ static void * palacios_file_open(const char * path, int mode, void * private_dat strncpy(pfile->path, path, strlen(path)); pfile->guest = guest; - spin_lock_init(&(pfile->lock)); + palacios_spinlock_init(&(pfile->lock)); if (guest == NULL) { list_add(&(pfile->file_node), &(global_files)); @@ -256,6 +256,8 @@ static int palacios_file_close(void * file_ptr) { list_del(&(pfile->file_node)); + palacios_spinlock_deinit(&(pfile->lock)); + palacios_free(pfile->path); palacios_free(pfile); @@ -342,8 +344,14 @@ static int file_init( void ) { static int file_deinit( void ) { - if (!list_empty(&(global_files))) { - ERROR("Error removing module with open files\n"); + struct palacios_file * pfile = NULL; + struct palacios_file * tmp = NULL; + + list_for_each_entry_safe(pfile, tmp, &(global_files), file_node) { + filp_close(pfile->filp, NULL); + list_del(&(pfile->file_node)); + palacios_free(pfile->path); + palacios_free(pfile); } return 0; @@ -368,9 +376,18 @@ static int guest_file_init(struct v3_guest * guest, void ** vm_data) { static int guest_file_deinit(struct v3_guest * guest, void * vm_data) { + struct vm_file_state * state = (struct vm_file_state *)vm_data; + struct palacios_file * pfile = NULL; + struct palacios_file * tmp = NULL; - palacios_free(vm_data); + list_for_each_entry_safe(pfile, tmp, &(state->open_files), file_node) { + filp_close(pfile->filp, NULL); + list_del(&(pfile->file_node)); + palacios_free(pfile->path); + palacios_free(pfile); + } + palacios_free(state); return 0; }