Loading fs/nfs/nfs4proc.c +1 −2 Original line number Diff line number Diff line Loading @@ -1249,8 +1249,7 @@ static void nfs4_opendata_free(struct kref *kref) struct nfs4_opendata, kref); struct super_block *sb = p->dentry->d_sb; if (p->lgp) nfs4_layoutget_release(p->lgp); nfs4_lgopen_release(p->lgp); nfs_free_seqid(p->o_arg.seqid); nfs4_sequence_free_slot(&p->o_res.seq_res); if (p->state != NULL) Loading fs/nfs/pnfs.c +14 −6 Original line number Diff line number Diff line Loading @@ -2129,13 +2129,11 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, lgp->args.inode = ino; } else lo = NFS_I(lgp->args.inode)->layout; pnfs_get_layout_hdr(lo); if (read_seqcount_retry(&srv->nfs_client->cl_callback_count, lgp->callback_count)) goto out; return; lseg = pnfs_layout_process(lgp); atomic_dec(&lo->plh_outstanding); if (IS_ERR(lseg)) { /* ignore lseg, but would like to mark not to try lgopen */ /* clear some lo flags - first and fail ???? */ Loading @@ -2144,9 +2142,19 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, pnfs_layout_clear_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode)); pnfs_put_lseg(lseg); } out: } void nfs4_lgopen_release(struct nfs4_layoutget *lgp) { if (lgp != NULL) { struct inode *inode = lgp->args.inode; if (inode) { struct pnfs_layout_hdr *lo = NFS_I(inode)->layout; atomic_dec(&lo->plh_outstanding); pnfs_clear_first_layoutget(lo); pnfs_put_layout_hdr(lo); } pnfs_layoutget_free(lgp); } } struct pnfs_layout_segment * Loading fs/nfs/pnfs.h +6 −0 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ void pnfs_lgopen_prepare(struct nfs4_opendata *data, struct nfs_open_context *ctx); void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, struct nfs_open_context *ctx); void nfs4_lgopen_release(struct nfs4_layoutget *lgp); static inline bool nfs_have_layout(struct inode *inode) { Loading Loading @@ -795,6 +796,11 @@ static inline void pnfs_parse_lgopen(struct inode *ino, struct nfs_open_context *ctx) { } static inline void nfs4_lgopen_release(struct nfs4_layoutget *lgp) { } #endif /* CONFIG_NFS_V4_1 */ #if IS_ENABLED(CONFIG_NFS_V4_2) Loading Loading
fs/nfs/nfs4proc.c +1 −2 Original line number Diff line number Diff line Loading @@ -1249,8 +1249,7 @@ static void nfs4_opendata_free(struct kref *kref) struct nfs4_opendata, kref); struct super_block *sb = p->dentry->d_sb; if (p->lgp) nfs4_layoutget_release(p->lgp); nfs4_lgopen_release(p->lgp); nfs_free_seqid(p->o_arg.seqid); nfs4_sequence_free_slot(&p->o_res.seq_res); if (p->state != NULL) Loading
fs/nfs/pnfs.c +14 −6 Original line number Diff line number Diff line Loading @@ -2129,13 +2129,11 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, lgp->args.inode = ino; } else lo = NFS_I(lgp->args.inode)->layout; pnfs_get_layout_hdr(lo); if (read_seqcount_retry(&srv->nfs_client->cl_callback_count, lgp->callback_count)) goto out; return; lseg = pnfs_layout_process(lgp); atomic_dec(&lo->plh_outstanding); if (IS_ERR(lseg)) { /* ignore lseg, but would like to mark not to try lgopen */ /* clear some lo flags - first and fail ???? */ Loading @@ -2144,9 +2142,19 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, pnfs_layout_clear_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode)); pnfs_put_lseg(lseg); } out: } void nfs4_lgopen_release(struct nfs4_layoutget *lgp) { if (lgp != NULL) { struct inode *inode = lgp->args.inode; if (inode) { struct pnfs_layout_hdr *lo = NFS_I(inode)->layout; atomic_dec(&lo->plh_outstanding); pnfs_clear_first_layoutget(lo); pnfs_put_layout_hdr(lo); } pnfs_layoutget_free(lgp); } } struct pnfs_layout_segment * Loading
fs/nfs/pnfs.h +6 −0 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ void pnfs_lgopen_prepare(struct nfs4_opendata *data, struct nfs_open_context *ctx); void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp, struct nfs_open_context *ctx); void nfs4_lgopen_release(struct nfs4_layoutget *lgp); static inline bool nfs_have_layout(struct inode *inode) { Loading Loading @@ -795,6 +796,11 @@ static inline void pnfs_parse_lgopen(struct inode *ino, struct nfs_open_context *ctx) { } static inline void nfs4_lgopen_release(struct nfs4_layoutget *lgp) { } #endif /* CONFIG_NFS_V4_1 */ #if IS_ENABLED(CONFIG_NFS_V4_2) Loading