libmount: cleanup libmnt_fs list after mnt_table_remove_fs()
.. otherwise mnt_free_fs() will try to remove FS from non-existing list. Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
20b222ec5c
commit
14104e931e
|
@ -34,6 +34,7 @@ struct libmnt_fs *mnt_new_fs(void)
|
|||
|
||||
fs->refcount = 1;
|
||||
INIT_LIST_HEAD(&fs->ents);
|
||||
/*DBG(FS, mnt_debug_h(fs, "alloc"));*/
|
||||
return fs;
|
||||
}
|
||||
|
||||
|
@ -89,6 +90,7 @@ void mnt_reset_fs(struct libmnt_fs *fs)
|
|||
|
||||
ref = fs->refcount;
|
||||
memset(fs, 0, sizeof(*fs));
|
||||
INIT_LIST_HEAD(&fs->ents);
|
||||
fs->refcount = ref;
|
||||
}
|
||||
|
||||
|
@ -295,7 +297,12 @@ err:
|
|||
void *mnt_fs_get_userdata(struct libmnt_fs *fs)
|
||||
{
|
||||
assert(fs);
|
||||
return fs ? fs->userdata : NULL;
|
||||
|
||||
if (!fs)
|
||||
return NULL;
|
||||
|
||||
/*DBG(FS, mnt_debug_h(fs, "get userdata [%p]", fs->userdata));*/
|
||||
return fs->userdata;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -312,6 +319,8 @@ int mnt_fs_set_userdata(struct libmnt_fs *fs, void *data)
|
|||
assert(fs);
|
||||
if (!fs)
|
||||
return -EINVAL;
|
||||
|
||||
/*DBG(FS, mnt_debug_h(fs, "set userdata [%p]", fs->userdata));*/
|
||||
fs->userdata = data;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -455,7 +455,10 @@ int mnt_table_remove_fs(struct libmnt_table *tb, struct libmnt_fs *fs)
|
|||
|
||||
if (!tb || !fs)
|
||||
return -EINVAL;
|
||||
|
||||
list_del(&fs->ents);
|
||||
INIT_LIST_HEAD(&fs->ents); /* otherwise FS still points to the list */
|
||||
|
||||
mnt_unref_fs(fs);
|
||||
tb->nents--;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue