+2002-10-01 Phil Schwan <phil@clusterfs.com>
+ * version 0_5_13
+ * bug fixes:
+ - locks would be cancelled without throwing away data pages,
+ resulting in inconsistent data (605627)
+ - inode attributes were not always being refreshed (605627, 612449)
+ - lconf now continues to cleanup after lctl reports an error
+ - MDS now enforces user permissions (602707)
+ - lprocfs cleanup fixed, but not yet enabled (614157)
+ - fixed infinite server hang, should a client not respond to an AST
+ - avoid going into recovery if user calls readlink() with a buffer
+ that's too small (613941)
+ - AST RPCs no longer require replies (614867) -- this may be changed
+ - don't crash server if client sends an IOV that's too big (611336)
+ - fixed lock conversion deadlock (611892)
+ - fixed the following of symlinks (614622)
+ * recovery: the server can remove locks from a client that dies, other
+ clients can make progress
+ * more extN patch fixes
+
2002-09-20 Andreas Dilger <adilger@clusterfs.com>
* version v0_5_12
* bug fix
DEV_PROF_START(mds, device, gen, open);
- for(i = 0; i < 50; i++){
+ for (i = 0; i < 50; i++) {
DEV_PROF_START(mds, device, gen, close);
- for(j=0; j<2000; j++)
+ for (j = 0; j < 2000; j++)
continue;
DEV_PROF_END(mds, device, gen, close);
}
if (!(strcmp(device->obd_type->typ_name, "ldlm"))) {
DEV_PROF_START(ldlm, device, ldlm, mgmt_connect);
- for(i = 0; i < 200; i++) {
+ for (i = 0; i < 200; i++) {
DEV_PROF_START(ldlm, device, ldlm, mgmt_disconnect);
- for (j = 0; j< 2000; j++)
+ for (j = 0; j < 2000; j++)
continue;
DEV_PROF_END(ldlm, device, ldlm, mgmt_disconnect);
}
}
-int lprocfs_ll_rd(char* page, char **start, off_t off,
- int count, int *eof, void *data)
+int lprocfs_ll_rd(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
{
int len;
- __u64 *temp = (__u64*)data;
+ __u64 *temp = (__u64 *)data;
- len = sprintf(page, "%lld\n", *temp);
+ len = snprintf(page, count, "%Lu\n", *temp);
return len;
}
rc = PtlMDBind(desc->bd_connection->c_peer.peer_ni, desc->bd_md,
&desc->bd_md_h);
- ptlrpc_put_bulk_iov (desc, iov); /* move down to reduce latency to send */
+ ptlrpc_put_bulk_iov (desc, iov); /*move down to reduce latency to send*/
if (rc != PTL_OK) {
CERROR("PtlMDBind failed: %d\n", rc);
remote_id.nid = desc->bd_connection->c_peer.peer_nid;
remote_id.pid = 0;
- CDEBUG(D_NET, "Sending %u pages %u bytes to portal %d nid "LPX64" pid %d xid %d\n",
- desc->bd_md.niov, desc->bd_md.length,
+ CDEBUG(D_NET, "Sending %u pages %u bytes to portal %d nid "LPX64" pid "
+ "%d xid %d\n", desc->bd_md.niov, desc->bd_md.length,
desc->bd_portal, remote_id.nid, remote_id.pid, xid);
rc = PtlPut(desc->bd_md_h, PTL_ACK_REQ, remote_id,
ptl_process_id_t source_id;
ENTRY;
- if (desc->bd_page_count > PTL_MD_MAX_IOV) {
- CERROR("iov longer than %d not supported\n", PTL_MD_MAX_IOV);
+ if (desc->bd_page_count > PTL_MD_MAX_IOV) {
+ CERROR("iov longer than %d pages not supported (count=%d)\n",
+ PTL_MD_MAX_IOV, desc->bd_page_count);
RETURN(-EINVAL);
}
/* request->rq_repmsg is set only when the reply comes in, in
* client_packet_callback() */
if (request->rq_reply_md.start)
- OBD_FREE(request->rq_reply_md.start, request->rq_replen);
-
+ OBD_FREE(request->rq_reply_md.start,
+ request->rq_replen);
+
OBD_ALLOC(repbuf, request->rq_replen);
if (!repbuf) {
LBUG();
request->rq_reply_md.options = PTL_MD_OP_PUT;
request->rq_reply_md.user_ptr = request;
request->rq_reply_md.eventq = reply_in_eq;
-
+
rc = PtlMDAttach(request->rq_reply_me_h, request->rq_reply_md,
PTL_UNLINK, &request->rq_reply_md_h);
if (rc != PTL_OK) {
LBUG();
GOTO(cleanup2, rc);
}
-
+
CDEBUG(D_NET, "Setup reply buffer: %u bytes, xid "LPU64
", portal %u\n",
request->rq_replen, request->rq_xid,
ptl_handle_md_t md_h;
LASSERT (atomic_read (&rqbd->rqbd_refcount) == 0);
-
+
/* Attach the leading ME on which we build the ring */
rc = PtlMEAttach(service->srv_self.peer_ni, service->srv_req_portal,
match_id, 0, ~0,
LBUG();
}
- dummy.start = rqbd->rqbd_buffer;
- dummy.length = service->srv_buf_size;
- dummy.max_size = service->srv_max_req_size;
- dummy.threshold = PTL_MD_THRESH_INF;
- dummy.options = PTL_MD_OP_PUT | PTL_MD_MAX_SIZE | PTL_MD_AUTO_UNLINK;
- dummy.user_ptr = rqbd;
- dummy.eventq = service->srv_eq_h;
+ dummy.start = rqbd->rqbd_buffer;
+ dummy.length = service->srv_buf_size;
+ dummy.max_size = service->srv_max_req_size;
+ dummy.threshold = PTL_MD_THRESH_INF;
+ dummy.options = PTL_MD_OP_PUT | PTL_MD_MAX_SIZE | PTL_MD_AUTO_UNLINK;
+ dummy.user_ptr = rqbd;
+ dummy.eventq = service->srv_eq_h;
atomic_inc (&service->srv_nrqbds_receiving);
atomic_set (&rqbd->rqbd_refcount, 1); /* 1 ref for portals */
-
+
rc = PtlMDAttach(rqbd->rqbd_me_h, dummy, PTL_UNLINK, &md_h);
if (rc != PTL_OK) {
CERROR("PtlMDAttach failed: %d\n", rc);