• Bob Peterson's avatar
    gfs2: kthread and remount improvements · 5b3a9f34
    Bob Peterson authored
    Before this patch, gfs2 saved the pointers to the two daemon threads
    (logd and quotad) in the superblock, but they were never cleared,
    even if the threads were stopped (e.g. on remount -o ro). That meant
    that certain error conditions (like a withdrawn file system) could
    race. For example, xfstests generic/361 caused an IO error during
    remount -o ro, which caused the kthreads to be stopped, then the
    error flagged. Later, when the test unmounted the file system, it
    would try to stop the threads a second time with kthread_stop.
    
    This patch does two things: First, every time it stops the threads
    it zeroes out the thread pointer, and also checks whether it's NULL
    before trying to stop it. Second, in function gfs2_remount_fs, it
    was returning if an error was logged by either of the two functions
    for gfs2_make_fs_ro and _rw, which caused it to bypass the online
    uevent at the bottom of the function. This removes that bypass in
    favor of just running the whole function, then returning the error.
    That way, unmounts and remounts won't hang forever.
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    5b3a9f34
super.c 42.5 KB