NFS: Don't cleanup sysfs superblock entry if uninitialized
authorBenjamin Coddington <bcodding@redhat.com>
Tue, 27 Jun 2023 10:12:11 +0000 (06:12 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 29 Jun 2023 18:25:35 +0000 (14:25 -0400)
Its possible to end up in nfs_free_server() before the server's superblock
sysfs entry has been initialized, in which case calling kobject_put() will
emit a WARNING.  Check if the kobject has been initialized before cleaning
it up.

Fixes: 1c7251187dc0 ("NFS: add superblock sysfs entries")
Reported-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/client.c

index 48c9d8411c0e61d92dd738235346bd396f6d971c..e4c5f193ed5e8d6353b3871b441d9a31f5c75e51 100644 (file)
@@ -1021,8 +1021,10 @@ void nfs_free_server(struct nfs_server *server)
 
        nfs_put_client(server->nfs_client);
 
-       nfs_sysfs_remove_server(server);
-       kobject_put(&server->kobj);
+       if (server->kobj.state_initialized) {
+               nfs_sysfs_remove_server(server);
+               kobject_put(&server->kobj);
+       }
        ida_free(&s_sysfs_ids, server->s_sysfs_id);
 
        ida_destroy(&server->lockowner_id);