This is a note to let you know that I've just added the patch titled pnfs: add pnfs_put_lseg_async to the 3.16-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: pnfs-add-pnfs_put_lseg_async.patch and it can be found in the queue-3.16 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From trond.myklebust@xxxxxxxxxxxxxxx Thu Oct 2 16:49:03 2014 From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> Date: Mon, 15 Sep 2014 14:14:37 -0400 Subject: pnfs: add pnfs_put_lseg_async To: stable@xxxxxxxxxxxxxxx Cc: Weston Andros Adamson <dros@xxxxxxxxxxxxxxx>, linux-nfs@xxxxxxxxxxxxxxx Message-ID: <1410804885-17228-7-git-send-email-trond.myklebust@xxxxxxxxxxxxxxx> From: Weston Andros Adamson <dros@xxxxxxxxxxxxxxx> commit e6cf82d1830f5e16a10d566f58db70f297ba5da8 upstream. This is useful when lsegs need to be released while holding locks. Signed-off-by: Weston Andros Adamson <dros@xxxxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- fs/nfs/pnfs.c | 17 +++++++++++++++++ fs/nfs/pnfs.h | 7 +++++++ 2 files changed, 24 insertions(+) --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -361,6 +361,23 @@ pnfs_put_lseg(struct pnfs_layout_segment } 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) { --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h @@ -32,6 +32,7 @@ #include <linux/nfs_fs.h> #include <linux/nfs_page.h> +#include <linux/workqueue.h> enum { NFS_LSEG_VALID = 0, /* cleared when lseg is recalled/returned */ @@ -46,6 +47,7 @@ struct pnfs_layout_segment { atomic_t pls_refcount; unsigned long pls_flags; struct pnfs_layout_hdr *pls_layout; + struct work_struct pls_work; }; enum pnfs_try_status { @@ -179,6 +181,7 @@ extern int nfs4_proc_layoutreturn(struct /* pnfs.c */ void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo); void pnfs_put_lseg(struct pnfs_layout_segment *lseg); +void pnfs_put_lseg_async(struct pnfs_layout_segment *lseg); void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32); void unset_pnfs_layoutdriver(struct nfs_server *); @@ -410,6 +413,10 @@ static inline void pnfs_put_lseg(struct { } +static inline void pnfs_put_lseg_async(struct pnfs_layout_segment *lseg) +{ +} + static inline int pnfs_return_layout(struct inode *ino) { return 0; Patches currently in stable-queue which might be from trond.myklebust@xxxxxxxxxxxxxxx are queue-3.16/nfs-move-nfs_pgio_data-and-remove-nfs_rw_header.patch queue-3.16/nfs-use-blocking-page_group_lock-in-add_request.patch queue-3.16/nfs-remove-pgio_header-refcount-related-cleanup.patch queue-3.16/pnfs-add-pnfs_put_lseg_async.patch queue-3.16/nfs-can_coalesce_requests-must-enforce-contiguity.patch queue-3.16/nfs-disallow-duplicate-pages-in-pgio-page-vectors.patch queue-3.16/nfs-fix-error-handling-in-lock_and_join_requests.patch queue-3.16/nfs-change-nfs_page_group_lock-argument.patch queue-3.16/nfsv4-nfs4_state_manager-vs.-nfs_server_remove_lists.patch queue-3.16/nfsv4-fix-another-bug-in-the-close-open_downgrade-code.patch queue-3.16/nfs-check-wait_on_bit_lock-err-in-page_group_lock.patch queue-3.16/nfs-don-t-sleep-with-inode-lock-in-lock_and_join_requests.patch queue-3.16/nfs-rename-members-of-nfs_pgio_data.patch queue-3.16/nfs-fix-nonblocking-calls-to-nfs_page_group_lock.patch queue-3.16/nfs-merge-nfs_pgio_data-into-_header.patch queue-3.16/nfs-clear_request_commit-while-holding-i_lock.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html