diff options
author | Karel Zak | 2013-08-22 11:57:06 +0200 |
---|---|---|
committer | Karel Zak | 2013-08-22 11:57:06 +0200 |
commit | 14104e931e90e224be8139a4a20848cd4001d0ef (patch) | |
tree | 7848a5b5b9a467605965ddb0bf360d92dbd78a4c /libmount | |
parent | pylibmount: use libmount reference counting (diff) | |
download | kernel-qcow2-util-linux-14104e931e90e224be8139a4a20848cd4001d0ef.tar.gz kernel-qcow2-util-linux-14104e931e90e224be8139a4a20848cd4001d0ef.tar.xz kernel-qcow2-util-linux-14104e931e90e224be8139a4a20848cd4001d0ef.zip |
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>
Diffstat (limited to 'libmount')
-rw-r--r-- | libmount/src/fs.c | 11 | ||||
-rw-r--r-- | libmount/src/tab.c | 3 |
2 files changed, 13 insertions, 1 deletions
diff --git a/libmount/src/fs.c b/libmount/src/fs.c index 690428cda..23c873d54 100644 --- a/libmount/src/fs.c +++ b/libmount/src/fs.c @@ -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; } diff --git a/libmount/src/tab.c b/libmount/src/tab.c index b1078cf81..d646d6a83 100644 --- a/libmount/src/tab.c +++ b/libmount/src/tab.c @@ -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; |