From: Jim Rees <rees@umich.edu> To: linux-nfs@vger.kernel.org Cc: peter honeyman <honey@citi.umich.edu> Subject: [PATCH 02/34] pnfs: add set-clear layoutdriver interface Date: Sun, 12 Jun 2011 19:43:50 -0400 Message-ID: <82bae4d34ae6b51c5476108992482d7cdae974d8.1307921137.git.rees@umich.edu> (raw) In-Reply-To: <cover.1307921137.git.rees@umich.edu> From: Benny Halevy <bhalevy@panasas.com> To allow layout driver to issue getdevicelist at mount time, and clean up at umount time. [fixup non NFS_V4_1 set_pnfs_layoutdriver definition] [pnfs: pass mntfh down the init_pnfs path] Signed-off-by: Benny Halevy <bhalevy@panasas.com> --- fs/nfs/client.c | 7 ++++--- fs/nfs/pnfs.c | 15 +++++++++++++-- fs/nfs/pnfs.h | 8 ++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index b3dc2b8..6bdb7da0 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -906,7 +906,8 @@ error: /* * Load up the server record from information gained in an fsinfo record */ -static void nfs_server_set_fsinfo(struct nfs_server *server, struct nfs_fsinfo *fsinfo) +static void nfs_server_set_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, + struct nfs_fsinfo *fsinfo) { unsigned long max_rpc_payload; @@ -936,7 +937,7 @@ static void nfs_server_set_fsinfo(struct nfs_server *server, struct nfs_fsinfo * if (server->wsize > NFS_MAX_FILE_IO_SIZE) server->wsize = NFS_MAX_FILE_IO_SIZE; server->wpages = (server->wsize + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; - set_pnfs_layoutdriver(server, fsinfo->layouttype); + set_pnfs_layoutdriver(server, mntfh, fsinfo->layouttype); server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL); @@ -982,7 +983,7 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str if (error < 0) goto out_error; - nfs_server_set_fsinfo(server, &fsinfo); + nfs_server_set_fsinfo(server, mntfh, &fsinfo); /* Get some general file system info */ if (server->namelen == 0) { diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 8c1309d..e3d618b 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -75,8 +75,11 @@ find_pnfs_driver(u32 id) void unset_pnfs_layoutdriver(struct nfs_server *nfss) { - if (nfss->pnfs_curr_ld) + if (nfss->pnfs_curr_ld) { + if (nfss->pnfs_curr_ld->clear_layoutdriver) + nfss->pnfs_curr_ld->clear_layoutdriver(nfss); module_put(nfss->pnfs_curr_ld->owner); + } nfss->pnfs_curr_ld = NULL; } @@ -87,7 +90,8 @@ unset_pnfs_layoutdriver(struct nfs_server *nfss) * @id layout type. Zero (illegal layout type) indicates pNFS not in use. */ void -set_pnfs_layoutdriver(struct nfs_server *server, u32 id) +set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh, + u32 id) { struct pnfs_layoutdriver_type *ld_type = NULL; @@ -114,6 +118,13 @@ set_pnfs_layoutdriver(struct nfs_server *server, u32 id) goto out_no_driver; } server->pnfs_curr_ld = ld_type; + if (ld_type->set_layoutdriver && ld_type->set_layoutdriver(server, mntfh)) { + printk(KERN_ERR + "%s: Error initializing mount point for layout driver %u.\n", + __func__, id); + module_put(ld_type->owner); + goto out_no_driver; + } dprintk("%s: pNFS module for %u set\n", __func__, id); return; diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index 6113fc6..b071b56 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h @@ -80,6 +80,9 @@ struct pnfs_layoutdriver_type { struct module *owner; unsigned flags; + int (*set_layoutdriver) (struct nfs_server *, const struct nfs_fh *); + int (*clear_layoutdriver) (struct nfs_server *); + struct pnfs_layout_hdr * (*alloc_layout_hdr) (struct inode *inode, gfp_t gfp_flags); void (*free_layout_hdr) (struct pnfs_layout_hdr *); @@ -164,7 +167,7 @@ struct pnfs_layout_segment * pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, loff_t pos, u64 count, enum pnfs_iomode access_type, gfp_t gfp_flags); -void set_pnfs_layoutdriver(struct nfs_server *, u32 id); +void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32); void unset_pnfs_layoutdriver(struct nfs_server *); enum pnfs_try_status pnfs_try_to_write_data(struct nfs_write_data *, const struct rpc_call_ops *, int); @@ -388,7 +391,8 @@ pnfs_roc_drain(struct inode *ino, u32 *barrier) return false; } -static inline void set_pnfs_layoutdriver(struct nfs_server *s, u32 id) +static inline void set_pnfs_layoutdriver(struct nfs_server *s, + const struct nfs_fh *mntfh, u32 id); { } -- 1.7.4.1
next prev parent reply index Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-06-12 23:43 [PATCH 00/34] pnfs block layout driver based on v3.0-rc2 Jim Rees 2011-06-12 23:43 ` [PATCH 01/34] pnfs: GETDEVICELIST Jim Rees 2011-06-12 23:43 ` Jim Rees [this message] 2011-06-12 23:43 ` [PATCH 03/34] pnfs: let layoutcommit code handle multiple segments Jim Rees 2011-06-13 14:36 ` Fred Isaman 2011-06-14 10:40 ` tao.peng 2011-06-14 13:58 ` Fred Isaman 2011-06-14 14:28 ` Benny Halevy 2011-06-12 23:43 ` [PATCH 04/34] pnfs: hook nfs_write_begin/end to allow layout driver manipulation Jim Rees 2011-06-13 14:44 ` Fred Isaman 2011-06-14 11:01 ` tao.peng 2011-06-14 14:05 ` Fred Isaman 2011-06-14 15:53 ` Peng Tao 2011-06-14 16:02 ` Fred Isaman 2011-06-12 23:43 ` [PATCH 05/34] pnfs: ask for layout_blksize and save it in nfs_server Jim Rees 2011-06-14 15:01 ` Benny Halevy 2011-06-14 15:08 ` Peng Tao 2011-06-12 23:44 ` [PATCH 06/34] pnfs: cleanup_layoutcommit Jim Rees 2011-06-13 21:19 ` Benny Halevy 2011-06-14 15:16 ` Peng Tao 2011-06-14 15:10 ` Benny Halevy 2011-06-14 15:21 ` Peng Tao 2011-06-14 15:19 ` Benny Halevy 2011-06-12 23:44 ` [PATCH 07/34] pnfsblock: define PNFS_BLOCK Kconfig option Jim Rees 2011-06-14 15:13 ` Benny Halevy 2011-06-12 23:44 ` [PATCH 08/34] pnfsblock: blocklayout stub Jim Rees 2011-06-12 23:44 ` [PATCH 09/34] pnfsblock: layout alloc and free Jim Rees 2011-06-12 23:44 ` [PATCH 10/34] Add support for simple rpc pipefs Jim Rees 2011-06-12 23:44 ` [PATCH 11/34] pnfs-block: Add block device discovery pipe Jim Rees 2011-06-12 23:44 ` [PATCH 12/34] pnfsblock: basic extent code Jim Rees 2011-06-12 23:44 ` [PATCH 13/34] pnfsblock: add device operations Jim Rees 2011-06-12 23:44 ` [PATCH 14/34] pnfsblock: remove " Jim Rees 2011-06-12 23:44 ` [PATCH 15/34] pnfsblock: lseg alloc and free Jim Rees 2011-06-12 23:44 ` [PATCH 16/34] pnfsblock: merge extents Jim Rees 2011-06-12 23:44 ` [PATCH 17/34] pnfsblock: call and parse getdevicelist Jim Rees 2011-06-14 15:36 ` Benny Halevy 2011-06-12 23:44 ` [PATCH 18/34] pnfsblock: allow use of PG_owner_priv_1 flag Jim Rees 2011-06-13 15:56 ` Fred Isaman 2011-06-12 23:44 ` [PATCH 19/34] pnfsblock: xdr decode pnfs_block_layout4 Jim Rees 2011-06-12 23:44 ` [PATCH 20/34] pnfsblock: find_get_extent Jim Rees 2011-06-12 23:44 ` [PATCH 21/34] pnfsblock: SPLITME: add extent manipulation functions Jim Rees 2011-06-14 15:40 ` Benny Halevy 2011-06-12 23:44 ` [PATCH 22/34] pnfsblock: merge rw extents Jim Rees 2011-06-12 23:44 ` [PATCH 23/34] pnfsblock: encode_layoutcommit Jim Rees 2011-06-14 15:44 ` Benny Halevy 2011-06-12 23:44 ` [PATCH 24/34] pnfsblock: cleanup_layoutcommit Jim Rees 2011-06-12 23:44 ` [PATCH 25/34] pnfsblock: bl_read_pagelist Jim Rees 2011-06-12 23:44 ` [PATCH 26/34] pnfsblock: write_begin Jim Rees 2011-06-12 23:44 ` [PATCH 27/34] pnfsblock: write_end Jim Rees 2011-06-12 23:44 ` [PATCH 28/34] pnfsblock: write_end_cleanup Jim Rees 2011-06-12 23:45 ` [PATCH 29/34] pnfsblock: bl_write_pagelist support functions Jim Rees 2011-06-12 23:45 ` [PATCH 30/34] pnfsblock: bl_write_pagelist Jim Rees 2011-06-12 23:45 ` [PATCH 31/34] pnfsblock: note written INVAL areas for layoutcommit Jim Rees 2011-06-12 23:45 ` [PATCH 32/34] pnfsblock: Implement release_inval_marks Jim Rees 2011-06-12 23:45 ` [PATCH 33/34] Add configurable prefetch size for layoutget Jim Rees 2011-06-12 23:45 ` [PATCH 34/34] NFS41: do not update isize if inode needs layoutcommit Jim Rees 2011-06-14 16:15 ` Benny Halevy 2011-06-14 16:22 ` Fred Isaman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=82bae4d34ae6b51c5476108992482d7cdae974d8.1307921137.git.rees@umich.edu \ --to=rees@umich.edu \ --cc=honey@citi.umich.edu \ --cc=linux-nfs@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-NFS Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-nfs/0 linux-nfs/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-nfs linux-nfs/ https://lore.kernel.org/linux-nfs \ linux-nfs@vger.kernel.org public-inbox-index linux-nfs Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-nfs AGPL code for this site: git clone https://public-inbox.org/public-inbox.git