aboutsummaryrefslogtreecommitdiff
path: root/fs/afs/internal.h
diff options
context:
space:
mode:
authorGravatar David Howells <dhowells@redhat.com> 2023-11-08 13:01:11 +0000
committerGravatar David Howells <dhowells@redhat.com> 2024-01-01 16:37:27 +0000
commit445f9b6952869586990ec3140dcd87c86d795d2e (patch)
treeae2a5365ed9a1b9d0831c0a81fa4bd877a003b97 /fs/afs/internal.h
parentafs: Make it possible to find the volumes that are using a server (diff)
downloadlinux-445f9b6952869586990ec3140dcd87c86d795d2e.tar.gz
linux-445f9b6952869586990ec3140dcd87c86d795d2e.tar.bz2
linux-445f9b6952869586990ec3140dcd87c86d795d2e.zip
afs: Defer volume record destruction to a workqueue
Defer volume record destruction to a workqueue so that afs_put_volume() isn't going to run the destruction process in the callback workqueue whilst the server is holding up other clients whilst waiting for us to reply to a CB.CallBack notification RPC. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org
Diffstat (limited to 'fs/afs/internal.h')
-rw-r--r--fs/afs/internal.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index 0b726bd2cf8c..a50dfb2f8d7d 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -636,6 +636,7 @@ struct afs_volume {
struct rb_node cell_node; /* Link in cell->volumes */
struct hlist_node proc_link; /* Link in cell->proc_volumes */
struct super_block __rcu *sb; /* Superblock on which inodes reside */
+ struct work_struct destructor; /* Deferred destructor */
unsigned long flags;
#define AFS_VOLUME_NEEDS_UPDATE 0 /* - T if an update needs performing */
#define AFS_VOLUME_UPDATING 1 /* - T if an update is in progress */
@@ -1613,7 +1614,7 @@ extern int afs_activate_volume(struct afs_volume *);
extern void afs_deactivate_volume(struct afs_volume *);
bool afs_try_get_volume(struct afs_volume *volume, enum afs_volume_trace reason);
extern struct afs_volume *afs_get_volume(struct afs_volume *, enum afs_volume_trace);
-extern void afs_put_volume(struct afs_net *, struct afs_volume *, enum afs_volume_trace);
+void afs_put_volume(struct afs_volume *volume, enum afs_volume_trace reason);
extern int afs_check_volume_status(struct afs_volume *, struct afs_operation *);
/*