1 /* NFSv4.1 client for Windows
2 * Copyright © 2012 The Regents of the University of Michigan
4 * Olga Kornievskaia <aglo@umich.edu>
5 * Casey Bodley <cbodley@umich.edu>
7 * This library is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 2.1 of the License, or (at
10 * your option) any later version.
12 * This library is distributed in the hope that it will be useful, but
13 * without any warranty; without even the implied warranty of merchantability
14 * or fitness for a particular purpose. See the GNU Lesser General Public
15 * License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this library; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 #include "daemon_debug.h"
28 const char* pnfs_error_string(enum pnfs_status status
)
31 case PNFS_SUCCESS
: return "PNFS_SUCCESS";
32 case PNFS_PENDING
: return "PNFS_PENDING";
33 case PNFS_READ_EOF
: return "PNFS_READ_EOF";
34 case PNFSERR_NOT_SUPPORTED
: return "PNFSERR_NOT_SUPPORTED";
35 case PNFSERR_NOT_CONNECTED
: return "PNFSERR_NOT_CONNECTED";
36 case PNFSERR_IO
: return "PNFSERR_IO";
37 case PNFSERR_NO_DEVICE
: return "PNFSERR_NO_DEVICE";
38 case PNFSERR_NO_LAYOUT
: return "PNFSERR_NO_LAYOUT";
39 case PNFSERR_INVALID_FH_LIST
: return "PNFSERR_INVALID_FH_LIST";
40 case PNFSERR_INVALID_DS_INDEX
: return "PNFSERR_INVALID_DS_INDEX";
41 case PNFSERR_RESOURCES
: return "PNFSERR_RESOURCES";
42 case PNFSERR_LAYOUT_RECALLED
: return "PNFSERR_LAYOUT_RECALLED";
43 case PNFSERR_LAYOUT_CHANGED
: return "PNFSERR_LAYOUT_CHANGED";
44 default: return "Invalid pnfs status";
48 const char* pnfs_layout_type_string(enum pnfs_layout_type type
)
51 case PNFS_LAYOUTTYPE_FILE
: return "PNFS_LAYOUTTYPE_FILE";
52 case PNFS_LAYOUTTYPE_OBJECT
: return "PNFS_LAYOUTTYPE_OBJECT";
53 case PNFS_LAYOUTTYPE_BLOCK
: return "PNFS_LAYOUTTYPE_BLOCK";
54 default: return "Invalid layout type";
58 const char* pnfs_iomode_string(enum pnfs_iomode iomode
)
61 case PNFS_IOMODE_READ
: return "PNFS_IOMODE_READ";
62 case PNFS_IOMODE_RW
: return "PNFS_IOMODE_RW";
63 case PNFS_IOMODE_ANY
: return "PNFS_IOMODE_ANY";
64 default: return "Invalid io mode";
71 IN
const unsigned char *deviceid
)
73 /* deviceid is 16 bytes, so print it as 4 uints */
74 uint32_t *p
= (uint32_t*)deviceid
;
75 dprintf(level
, "%s%08X.%08X.%08X.%08X\n",
76 title
, htonl(p
[0]), htonl(p
[1]), htonl(p
[2]), htonl(p
[3]));
81 IN
const pnfs_file_layout
*layout
)
83 dprintf(level
, " type: %s\n", pnfs_layout_type_string(layout
->layout
.type
));
84 dprintf(level
, " iomode: %s\n", pnfs_iomode_string(layout
->layout
.iomode
));
85 dprint_deviceid(level
, " deviceid: ", layout
->deviceid
);
86 dprintf(level
, " offset: %llu\n", layout
->layout
.offset
);
87 dprintf(level
, " length: %llu\n", layout
->layout
.length
);
88 dprintf(level
, " pattern_offset: %llu\n", layout
->pattern_offset
);
89 dprintf(level
, " first_index: %u\n", layout
->first_index
);
90 dprintf(level
, " dense: %u\n", is_dense(layout
));
91 dprintf(level
, " commit_to_mds: %u\n", should_commit_to_mds(layout
));
92 dprintf(level
, " stripe_unit_size: %u\n", layout_unit_size(layout
));
93 dprintf(level
, " file handles: %u\n", layout
->filehandles
.count
);
96 #define MULTI_ADDR_BUFFER_LEN \
97 (NFS41_ADDRS_PER_SERVER*(NFS41_UNIVERSAL_ADDR_LEN+1)+1)
99 static void dprint_multi_addr(
102 IN
const multi_addr4
*addrs
)
104 char buffer
[MULTI_ADDR_BUFFER_LEN
] = "";
106 for (i
= 0; i
< addrs
->count
; i
++) {
107 StringCchCatA(buffer
, MULTI_ADDR_BUFFER_LEN
, addrs
->arr
[i
].uaddr
);
108 StringCchCatA(buffer
, MULTI_ADDR_BUFFER_LEN
, " ");
110 dprintf(level
, " servers[%d]: [ %s]\n", index
, buffer
);
115 IN
const pnfs_file_device
*device
)
118 dprint_deviceid(level
, " deviceid: ", device
->device
.deviceid
);
119 dprintf(level
, " type: %s\n", pnfs_layout_type_string(device
->device
.type
));
120 dprintf(level
, " stripes: %u\n", device
->stripes
.count
);
121 for (i
= 0; i
< device
->servers
.count
; i
++)
122 dprint_multi_addr(level
, i
, &device
->servers
.arr
[i
].addrs
);