mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-02 18:54:10 +08:00
NFS: Add a helper nfs_client_for_each_server()
Add a helper nfs_client_for_each_server() to iterate through all the filesystems that are attached to a struct nfs_client, and apply a function to all the active ones. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
58ac3e5923
commit
3c9e502b59
@ -417,7 +417,9 @@ extern int __init register_nfs_fs(void);
|
|||||||
extern void __exit unregister_nfs_fs(void);
|
extern void __exit unregister_nfs_fs(void);
|
||||||
extern bool nfs_sb_active(struct super_block *sb);
|
extern bool nfs_sb_active(struct super_block *sb);
|
||||||
extern void nfs_sb_deactive(struct super_block *sb);
|
extern void nfs_sb_deactive(struct super_block *sb);
|
||||||
|
extern int nfs_client_for_each_server(struct nfs_client *clp,
|
||||||
|
int (*fn)(struct nfs_server *, void *),
|
||||||
|
void *data);
|
||||||
/* io.c */
|
/* io.c */
|
||||||
extern void nfs_start_io_read(struct inode *inode);
|
extern void nfs_start_io_read(struct inode *inode);
|
||||||
extern void nfs_end_io_read(struct inode *inode);
|
extern void nfs_end_io_read(struct inode *inode);
|
||||||
|
@ -176,6 +176,41 @@ void nfs_sb_deactive(struct super_block *sb)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_sb_deactive);
|
EXPORT_SYMBOL_GPL(nfs_sb_deactive);
|
||||||
|
|
||||||
|
static int __nfs_list_for_each_server(struct list_head *head,
|
||||||
|
int (*fn)(struct nfs_server *, void *),
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
struct nfs_server *server, *last = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
list_for_each_entry_rcu(server, head, client_link) {
|
||||||
|
if (!nfs_sb_active(server->super))
|
||||||
|
continue;
|
||||||
|
rcu_read_unlock();
|
||||||
|
if (last)
|
||||||
|
nfs_sb_deactive(last->super);
|
||||||
|
last = server;
|
||||||
|
ret = fn(server, data);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
rcu_read_lock();
|
||||||
|
}
|
||||||
|
rcu_read_unlock();
|
||||||
|
out:
|
||||||
|
if (last)
|
||||||
|
nfs_sb_deactive(last->super);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nfs_client_for_each_server(struct nfs_client *clp,
|
||||||
|
int (*fn)(struct nfs_server *, void *),
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
return __nfs_list_for_each_server(&clp->cl_superblocks, fn, data);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nfs_client_for_each_server);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deliver file system statistics to userspace
|
* Deliver file system statistics to userspace
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user