diff options
author | Weston Andros Adamson <dros@primarydata.com> | 2014-07-18 02:42:18 +0200 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-08-03 23:05:25 +0200 |
commit | e6cf82d1830f5e16a10d566f58db70f297ba5da8 (patch) | |
tree | 6f6a35753bd58e1d273d68934bacead69a9dbab8 /fs/nfs/pnfs.c | |
parent | pnfs: find swapped pages on pnfs commit lists too (diff) | |
download | linux-e6cf82d1830f5e16a10d566f58db70f297ba5da8.tar.xz linux-e6cf82d1830f5e16a10d566f58db70f297ba5da8.zip |
pnfs: add pnfs_put_lseg_async
This is useful when lsegs need to be released while holding locks.
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/pnfs.c')
-rw-r--r-- | fs/nfs/pnfs.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 83ff8a05485a..4e853157fecc 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -361,6 +361,23 @@ pnfs_put_lseg(struct pnfs_layout_segment *lseg) } EXPORT_SYMBOL_GPL(pnfs_put_lseg); +static void pnfs_put_lseg_async_work(struct work_struct *work) +{ + struct pnfs_layout_segment *lseg; + + lseg = container_of(work, struct pnfs_layout_segment, pls_work); + + pnfs_put_lseg(lseg); +} + +void +pnfs_put_lseg_async(struct pnfs_layout_segment *lseg) +{ + INIT_WORK(&lseg->pls_work, pnfs_put_lseg_async_work); + schedule_work(&lseg->pls_work); +} +EXPORT_SYMBOL_GPL(pnfs_put_lseg_async); + static u64 end_offset(u64 start, u64 len) { |