[pnfs] [PATCH 3/4] pnfs: Add file layout comments and debugging info.
Benny Halevy
bhalevy at panasas.com
Sun May 11 12:20:31 EDT 2008
checkpatch.pl complains about several formatting issues with this patch:
Mind fixing them and resending?
Benny
ERROR: use tabs not spaces
#28: FILE: fs/nfs/nfs4filelayout.c:213:
+^I ^Idprintk("%s new off %llu orig offset %llu\n",$
ERROR: use tabs not spaces
#41: FILE: fs/nfs/nfs4filelayout.c:226:
+^I ^Idprintk("%s new off %llu orig offset %llu\n",$
ERROR: "foo* bar" should be "foo *bar"
#136: FILE: fs/nfs/nfs4filelayoutdev.c:432:
+ u32 ip_addr, u32 port, char* r_addr, int len)
WARNING: line over 80 characters
#163: FILE: fs/nfs/nfs4filelayoutdev.c:764:
+ printk(KERN_ERR "%s: No data server for device id!! \n", __func__);
ERROR: space required after that ',' (ctx:VxV)
#200: FILE: fs/nfs/pnfs.c:1466:
+ dprintk("%s:retry with NFS \n",__func__);
^
total: 4 errors, 1 warnings, 156 lines checked
On May. 11, 2008, 0:07 -0700, Dean Hildebrand <seattleplus at gmail.com> wrote:
> Other than comments, the main change is adding the
> string version of the ip addr to the device so
> it can be printed out for easier debugging.
>
> Signed-off-by: Dean Hildebrand <dhildeb at us.ibm.com>
> ---
> fs/nfs/nfs4filelayout.c | 20 +++++++++++++++-----
> fs/nfs/nfs4filelayout.h | 4 ++++
> fs/nfs/nfs4filelayoutdev.c | 16 +++++++++++-----
> fs/nfs/pnfs.c | 8 ++++----
> 4 files changed, 34 insertions(+), 14 deletions(-)
>
> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> index c9b184e..bc1d0fe 100644
> --- a/fs/nfs/nfs4filelayout.c
> +++ b/fs/nfs/nfs4filelayout.c
> @@ -208,8 +208,12 @@ static void filelayout_read_call_done(struct rpc_task *task, void *data)
> {
> struct nfs_read_data *rdata = (struct nfs_read_data *)data;
>
> - if (rdata->orig_offset)
> +
> + if (rdata->orig_offset) {
> + dprintk("%s new off %llu orig offset %llu\n",
> + __func__, rdata->args.offset, rdata->orig_offset);
> rdata->args.offset = rdata->orig_offset;
> + }
>
> pnfs_callback_ops->nfs_readlist_complete(rdata);
> }
> @@ -218,8 +222,11 @@ static void filelayout_write_call_done(struct rpc_task *task, void *data)
> {
> struct nfs_write_data *wdata = (struct nfs_write_data *)data;
>
> - if (wdata->orig_offset)
> + if (wdata->orig_offset) {
> + dprintk("%s new off %llu orig offset %llu\n",
> + __func__, wdata->args.offset, wdata->orig_offset);
> wdata->args.offset = wdata->orig_offset;
> + }
>
> pnfs_callback_ops->nfs_writelist_complete(wdata);
> }
> @@ -274,7 +281,8 @@ static int filelayout_read_pagelist(
> } else {
> ds = dserver.dev->ds_list[0];
>
> - dprintk("%s USE DS:ip %x\n", __func__, htonl(ds->ds_ip_addr));
> + dprintk("%s USE DS:ip %x %s\n", __func__,
> + htonl(ds->ds_ip_addr), ds->r_addr);
>
> /* just try the first data server for the index..*/
> data->pnfs_client = ds->ds_clp->cl_rpcclient;
> @@ -308,6 +316,7 @@ print_ds(struct nfs4_pnfs_ds *ds)
> dprintk(" ds->ds_port %hu\n", ntohs(ds->ds_port));
> dprintk(" ds->ds_clp %p\n", ds->ds_clp);
> dprintk(" ds->ds_count %d\n", atomic_read(&ds->ds_count));
> + dprintk(" %s\n", ds->r_addr);
> }
>
> /* Perform async writes. */
> @@ -347,9 +356,10 @@ static int filelayout_write_pagelist(
> /* use the first multipath data server */
> ds = dserver.dev->ds_list[0];
>
> - dprintk("%s ino %lu %Zu@%Lu DS:%x:%hu\n",
> + dprintk("%s ino %lu %Zu@%Lu DS:%x:%hu %s\n",
> __func__, inode->i_ino, count, offset,
> - htonl(ds->ds_ip_addr), ntohs(ds->ds_port));
> + htonl(ds->ds_ip_addr), ntohs(ds->ds_port),
> + ds->r_addr);
>
> data->pnfs_client = ds->ds_clp->cl_rpcclient;
> data->ds_nfs_client = ds->ds_clp;
> diff --git a/fs/nfs/nfs4filelayout.h b/fs/nfs/nfs4filelayout.h
> index b1f0284..4a75da7 100644
> --- a/fs/nfs/nfs4filelayout.h
> +++ b/fs/nfs/nfs4filelayout.h
> @@ -32,14 +32,17 @@ enum stripetype4 {
> STRIPE_DENSE = 2
> };
>
> +/* Individual ip address */
> struct nfs4_pnfs_ds {
> struct hlist_node ds_node; /* nfs4_pnfs_dev_hlist dev_dslist */
> u32 ds_ip_addr;
> u32 ds_port;
> struct nfs_client *ds_clp;
> atomic_t ds_count;
> + char r_addr[29];
> };
>
> +/* Individual data server with list of mutipath ip's*/
> struct nfs4_pnfs_dev {
> u32 stripe_index;
> int num_ds;
> @@ -60,6 +63,7 @@ struct nfs4_pnfs_dev_hlist {
> struct hlist_head dev_dslist[NFS4_PNFS_DEV_HASH_SIZE];
> };
>
> +/* Actual file layout device (single devid) */
> struct nfs4_pnfs_dserver {
> struct nfs_fh *fh;
> struct nfs4_pnfs_dev *dev;
> diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
> index ede71b0..e6b9b55 100644
> --- a/fs/nfs/nfs4filelayoutdev.c
> +++ b/fs/nfs/nfs4filelayoutdev.c
> @@ -81,6 +81,7 @@ print_ds_list(struct nfs4_pnfs_dev *fdev)
> if (ds->ds_clp)
> dprintk(" cl_exchange_flags %x\n",
> ds->ds_clp->cl_exchange_flags);
> + dprintk(" ip:port %s\n", ds->r_addr);
> ds++;
> }
> }
> @@ -216,7 +217,8 @@ nfs4_pnfs_ds_create(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds)
> int addrlen;
> int err = 0;
>
> - dprintk("--> %s\n", __func__);
> + dprintk("--> %s ip:port %s\n", __func__, ds->r_addr);
> +
> sin.sin_family = AF_INET;
> sin.sin_addr.s_addr = ds->ds_ip_addr;
> sin.sin_port = ds->ds_port;
> @@ -427,7 +429,7 @@ nfs4_pnfs_device_add(struct filelayout_mount_type *mt,
>
> static void
> nfs4_pnfs_ds_add(struct filelayout_mount_type *mt, struct nfs4_pnfs_ds **dsp,
> - u32 ip_addr, u32 port)
> + u32 ip_addr, u32 port, char* r_addr, int len)
> {
> struct nfs4_pnfs_ds *tmp_ds, *ds;
> struct nfs4_pnfs_dev_hlist *hlist = mt->hlist;
> @@ -441,6 +443,7 @@ nfs4_pnfs_ds_add(struct filelayout_mount_type *mt, struct nfs4_pnfs_ds **dsp,
> /* Initialize ds */
> ds->ds_ip_addr = ip_addr;
> ds->ds_port = port;
> + strncpy(ds->r_addr, r_addr, len);
> atomic_set(&ds->ds_count, 1);
> INIT_HLIST_NODE(&ds->ds_node);
>
> @@ -496,7 +499,7 @@ decode_and_add_ds(uint32_t **pp, struct filelayout_mount_type *mt)
> ip_addr = htonl((tmp[0]<<24) | (tmp[1]<<16) | (tmp[2]<<8) | (tmp[3]));
> port = htons((tmp[4] << 8) | (tmp[5]));
>
> - nfs4_pnfs_ds_add(mt, &ds, ip_addr, port);
> + nfs4_pnfs_ds_add(mt, &ds, ip_addr, port, r_addr, len);
>
> /* XXX: Do we connect to data servers here?
> * Don't want a lot of un-used (never used!) connections....
> @@ -757,15 +760,18 @@ nfs4_pnfs_dserver_get(struct pnfs_layout_segment *lseg,
> BUG_ON(stripe_idx >= di->stripe_count);
>
> dserver->dev = &di->stripe_devs[stripe_idx];
> - if (dserver->dev == NULL)
> + if (dserver->dev == NULL) {
> + printk(KERN_ERR "%s: No data server for device id!! \n", __func__);
> return 1;
> + }
> if (layout->num_fh == 1)
> dserver->fh = &layout->fh_array[0];
> else
> dserver->fh = &layout->fh_array[stripe_idx];
>
> - dprintk("%s: dev_id=%s idx=%u, offset=%Lu, count=%Zu\n",
> + dprintk("%s: dev_id=%s ip:port=%s, idx=%u, offset=%Lu, count=%Zu\n",
> __func__, deviceid_fmt(&layout->dev_id),
> + dserver->dev->ds_list[0]->r_addr,
> stripe_idx, offset, count);
>
> return 0;
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index c09f72b..f7d59d8 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -1421,10 +1421,9 @@ pnfs_file_write(struct file *filp, const char __user *buf, size_t count,
> *pos,
> IOMODE_RW,
> NULL);
> - if (status) {
> - dprintk("%s: Unable to get a layout for %Zd@%llu iomode %d)\n",
> - __func__, count, *pos, IOMODE_RW);
> - }
> + if (status)
> + dprintk("%s: Unable to get a layout for %Zu@%llu iomode %d)\n",
> + __func__, count, *pos, IOMODE_RW);
> out:
> return do_sync_write(filp, buf, count, pos);
> }
> @@ -1464,6 +1463,7 @@ pnfs_writepages(struct nfs_write_data *wdata, int how)
> IOMODE_RW,
> &lseg);
> if (status) {
> + dprintk("%s:retry with NFS \n",__func__);
> status = 1; /* retry with nfs I/O */
> goto out;
> }
--
Benny Halevy
Software Architect
Tel/Fax: +972-3-647-8340
Mobile: +972-54-802-8340
US: +1-412-203-3187
bhalevy at panasas.com
Panasas, Inc.
Leader in Parallel Storage
www.panasas.com
More information about the pNFS
mailing list