From 87182759cd6f94875d6aaaac74eaa52aa6aa6f98 Mon Sep 17 00:00:00 2001 From: David Howells Date: Thu, 9 May 2019 16:17:05 +0100 Subject: afs: Fix order-1 allocation in afs_do_lookup() afs_do_lookup() will do an order-1 allocation to allocate status records if there are more than 39 vnodes to stat. Fix this by allocating an array of {status,callback} records for each vnode we want to examine using vmalloc() if larger than a page. This not only gets rid of the order-1 allocation, but makes it easier to grow beyond 50 records for YFS servers. It also allows us to move to {status,callback} tuples for other calls too and makes it easier to lock across the application of the status and the callback to the vnode. Fixes: 5cf9dd55a0ec ("afs: Prospectively look up extra files when doing a single lookup") Signed-off-by: David Howells --- fs/afs/afs.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'fs/afs/afs.h') diff --git a/fs/afs/afs.h b/fs/afs/afs.h index 74913c707bba..8fa0dffff1cc 100644 --- a/fs/afs/afs.h +++ b/fs/afs/afs.h @@ -147,6 +147,12 @@ struct afs_file_status { u32 abort_code; /* Abort if bulk-fetching this failed */ }; +struct afs_status_cb { + struct afs_file_status status; + struct afs_callback callback; + bool have_cb; /* True if cb record was retrieved */ +}; + /* * AFS file status change request */ -- cgit v1.2.3