Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 171099
b: refs/heads/master
c: 244546f
h: refs/heads/master
i:
  171097: 33caf0c
  171095: 3eff1f4
v: v3
  • Loading branch information
Andy Grover authored and David S. Miller committed Oct 30, 2009
1 parent 860b521 commit 2db0d9a
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6639104bd826e0b1388c69a6b7564fffc636c8a8
refs/heads/master: 244546f0d3101c5441f5b14cfe8a79d62679eaea
8 changes: 8 additions & 0 deletions trunk/include/linux/rds.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
/* deprecated: RDS_BARRIER 4 */
#define RDS_RECVERR 5
#define RDS_CONG_MONITOR 6
#define RDS_GET_MR_FOR_DEST 7

/*
* Control message types for SOL_RDS.
Expand Down Expand Up @@ -224,6 +225,13 @@ struct rds_get_mr_args {
uint64_t flags;
};

struct rds_get_mr_for_dest_args {
struct sockaddr_storage dest_addr;
struct rds_iovec vec;
u_int64_t cookie_addr;
uint64_t flags;
};

struct rds_free_mr_args {
rds_rdma_cookie_t cookie;
u_int64_t flags;
Expand Down
3 changes: 3 additions & 0 deletions trunk/net/rds/af_rds.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,9 @@ static int rds_setsockopt(struct socket *sock, int level, int optname,
case RDS_GET_MR:
ret = rds_get_mr(rs, optval, optlen);
break;
case RDS_GET_MR_FOR_DEST:
ret = rds_get_mr_for_dest(rs, optval, optlen);
break;
case RDS_FREE_MR:
ret = rds_free_mr(rs, optval, optlen);
break;
Expand Down
24 changes: 24 additions & 0 deletions trunk/net/rds/rdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,30 @@ int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen)
return __rds_rdma_map(rs, &args, NULL, NULL);
}

int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen)
{
struct rds_get_mr_for_dest_args args;
struct rds_get_mr_args new_args;

if (optlen != sizeof(struct rds_get_mr_for_dest_args))
return -EINVAL;

if (copy_from_user(&args, (struct rds_get_mr_for_dest_args __user *)optval,
sizeof(struct rds_get_mr_for_dest_args)))
return -EFAULT;

/*
* Initially, just behave like get_mr().
* TODO: Implement get_mr as wrapper around this
* and deprecate it.
*/
new_args.vec = args.vec;
new_args.cookie_addr = args.cookie_addr;
new_args.flags = args.flags;

return __rds_rdma_map(rs, &new_args, NULL, NULL);
}

/*
* Free the MR indicated by the given R_Key
*/
Expand Down
1 change: 1 addition & 0 deletions trunk/net/rds/rdma.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ static inline u32 rds_rdma_cookie_offset(rds_rdma_cookie_t cookie)
}

int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen);
int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen);
int rds_free_mr(struct rds_sock *rs, char __user *optval, int optlen);
void rds_rdma_drop_keys(struct rds_sock *rs);
int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
Expand Down

0 comments on commit 2db0d9a

Please sign in to comment.