diff options
author | Weston Andros Adamson <dros@primarydata.com> | 2014-07-17 20:42:18 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-08-03 17:05:25 -0400 |
commit | e6cf82d1830f5e16a10d566f58db70f297ba5da8 (patch) | |
tree | 6f6a35753bd58e1d273d68934bacead69a9dbab8 /fs/nfs/pnfs.c | |
parent | 02d1426c7053da7c5a828ae9cd7b636ea4e46bf7 (diff) | |
download | op-kernel-dev-e6cf82d1830f5e16a10d566f58db70f297ba5da8.zip op-kernel-dev-e6cf82d1830f5e16a10d566f58db70f297ba5da8.tar.gz |
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 83ff8a0..4e85315 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) { |