All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boaz Harrosh <bharrosh@panasas.com>
To: Benny Halevy <bhalevy@panasas.com>,
	open-osd <osd-dev@open-osd.org>,
	NFS list <linux-nfs@vger.kernel.org>
Subject: [PATCH 6/8] pnfsd-exofs: get_device_info implementation.
Date: Tue, 14 Jun 2011 17:03:31 -0400	[thread overview]
Message-ID: <1308085411-12630-1-git-send-email-bharrosh@panasas.com> (raw)
In-Reply-To: <4DF7CA2F.7030407@panasas.com>

Implement a .get_device_info operation from the
pnfs_export_operations.

Retrieve to system_id and osdname for the requested
devices.

TODO: Return also UNC hints for the device login
information.

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
---
 fs/exofs/export.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/fs/exofs/export.c b/fs/exofs/export.c
index 0a068b7..23c1666 100644
--- a/fs/exofs/export.c
+++ b/fs/exofs/export.c
@@ -185,11 +185,65 @@ static int exofs_layout_return(
 	return 0;
 }
 
+int exofs_get_device_info(struct super_block *sb, struct exp_xdr_stream *xdr,
+			  u32 layout_type,
+			  const struct nfsd4_pnfs_deviceid *devid)
+{
+	struct exofs_sb_info *sbi = sb->s_fs_info;
+	struct pnfs_osd_deviceaddr devaddr;
+	const struct osd_dev_info *odi;
+	u64 devno = devid->devid;
+	__be32 *start;
+	int err;
+
+	memset(&devaddr, 0, sizeof(devaddr));
+
+	if (unlikely(devno >= sbi->layout.s_numdevs)) {
+		EXOFS_DBGMSG("Error: Device((%llx,%llx) does not exist\n",
+			     devid->sbid, devno);
+		return -ENODEV;
+	}
+
+	odi = osduld_device_info(sbi->layout.s_ods[devno]);
+
+	devaddr.oda_systemid.len = odi->systemid_len;
+	devaddr.oda_systemid.data = (void *)odi->systemid; /* !const cast */
+
+	devaddr.oda_osdname.len = odi->osdname_len ;
+	devaddr.oda_osdname.data = (void *)odi->osdname;/* !const cast */
+
+	/* skip opaque size, will be filled-in later */
+	start = exp_xdr_reserve_qwords(xdr, 1);
+	if (!start) {
+		err = -ETOOSMALL;
+		goto err;
+	}
+
+	err = pnfs_osd_xdr_encode_deviceaddr(xdr, &devaddr);
+	if (err) {
+		err = -ETOOSMALL;
+		goto err;
+	}
+
+	exp_xdr_encode_opaque_len(start, xdr->p);
+
+	EXOFS_DBGMSG("xdr_bytes=%Zu devid=(%llx,%llx) osdname-%s\n",
+		     exp_xdr_qbytes(xdr->p - start), devid->sbid, devno,
+		     odi->osdname);
+	return 0;
+
+err:
+	EXOFS_DBGMSG("Error: err=%d at_byte=%zu\n",
+		     err, exp_xdr_qbytes(xdr->p - start));
+	return err;
+}
+
 struct pnfs_export_operations exofs_pnfs_ops = {
 	.layout_type	= exofs_layout_type,
 	.layout_get	= exofs_layout_get,
 	.layout_commit	= exofs_layout_commit,
 	.layout_return	= exofs_layout_return,
+	.get_device_info = exofs_get_device_info,
 };
 
 void exofs_init_export(struct super_block *sb)
-- 
1.7.3.4


  parent reply	other threads:[~2011-06-14 21:03 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-14 20:53 [PATCHSET 0/8] pnfsd-exofs: New set of exofs pnfs export patches Boaz Harrosh
2011-06-14 21:00 ` Benny Halevy
2011-06-14 22:24   ` Benny Halevy
2011-06-14 21:02 ` [PATCH 1/8] nfs_xdr: Move nfs4_string definition out of #ifdef CONFIG_NFS_V4 Boaz Harrosh
2011-06-14 21:02 ` [PATCH 2/8] exofs: pnfs-tree: Remove pnfs-osd private definitions Boaz Harrosh
2011-06-14 21:03 ` [PATCH 4/8] pnfsd-exofs: pnfs objects server XDR functions Boaz Harrosh
2011-06-14 21:03 ` [PATCH 5/8] pnfsd-exofs: Add pNFS export support Boaz Harrosh
2011-06-14 21:03 ` Boaz Harrosh [this message]
2011-06-14 21:03 ` [PATCH 8/8] pnfsd-exofs: layoutreturn pnfs-obj information decoding Boaz Harrosh
2011-06-14 21:20 ` [PATCH 3/8] pnfs-obj: pnfs_osd_xdr: Remove dead code and cleanup Boaz Harrosh
2011-06-14 21:20 ` [PATCH 7/8] pnfsd-exofs: Recall layouts on truncate Boaz Harrosh
2011-06-14 21:32 ` [PATCHSET 0/10] pnfsd-exofs: SQUASHMES that went into last changes Boaz Harrosh
2011-06-14 21:35   ` [PATCH 01/10] SQUASHME: pnfsd-exofs xdr_srv: Wrong type in comments Boaz Harrosh
2011-06-14 21:35   ` [PATCH 02/10] SQUASHME: pnfsd-exofs: Move all Server xdr definisions to separate header Boaz Harrosh
2011-06-14 21:36   ` [PATCH 03/10] SQUASHME: pnfsd-exofs: Prettify pnfs_osd_xdr_srv.h Boaz Harrosh
2011-06-14 21:36   ` [PATCH 04/10] SQUASHME: pnfsd-exofs: Change layout encoding to two pass Boaz Harrosh
2011-06-14 21:36   ` [PATCH 05/10] SQUASHME: pnfsd-exofs: osd_xdr_srv: Convert XDR API to return enum nfsstat4 Boaz Harrosh
2011-06-14 21:36   ` [PATCH 06/10] SQUASHME: pnfsd-exofs: Server xdr definisions were moved to a separate header Boaz Harrosh
2011-06-14 21:36   ` [PATCH 07/10] SQUASHME: pnfsd-exofs: osd_xdr_srv header moved Boaz Harrosh
2011-06-14 21:36   ` [PATCH 08/10] SQUASHME: pnfsd-exofs: layout encoding was Changed to two pass Boaz Harrosh
2011-06-14 21:36   ` [PATCH 09/10] SQUASHME: pnfsd-exofs: Convert XDR API to return enum nfsstat4 Boaz Harrosh
2011-06-14 21:38   ` [PATCH 10/10] SQUASHME: pnfsd-exofs: checkpatch love and a dprint Boaz Harrosh

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=1308085411-12630-1-git-send-email-bharrosh@panasas.com \
    --to=bharrosh@panasas.com \
    --cc=bhalevy@panasas.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=osd-dev@open-osd.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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.