Subject: linux-next: manual merge of the ceph tree with Linus' tree

From: Stephen Rothwell <[email-masked]>
Date: Wed, 15 Dec 2010 11:14:23 +1100

Hi Sage,

Today's linux-next merge of the ceph tree got a conflict in
fs/ceph/mds_client.c between commit
25933abdd8c562182ca6dc9f8c4c2cc8265c3a80 ("ceph: Handle file locks in
replies from the MDS") from Linus' tree and commit
cba1a66d511d46c426ea02c322293b48f3b88cf2 ("ceph: implement DIRLAYOUTHASH
feature to get dir layout from MDS") from the ceph tree.

I fixed it up (hopefully correctly, see below) and can carry this fix as
necessary.
-- 
Cheers,
Stephen Rothwell                    [email-masked]

diff --cc fs/ceph/mds_client.c
index 38800ea,bb9ff98..0000000
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@@ -202,38 -212,6 +211,38 @@@ out_bad
  }
  
  /*
 + * parse fcntl F_GETLK results
 + */
 +static int parse_reply_info_filelock(void **p, void *end,
 +                struct ceph_mds_reply_info_parsed *info)
 +{
 +	if (*p + sizeof(*info->filelock_reply) > end)
 +		goto bad;
 +
 +	info->filelock_reply = *p;
 +	*p += sizeof(*info->filelock_reply);
 +
 +	if (unlikely(*p != end))
 +		goto bad;
 +	return 0;
 +
 +bad:
 +	return -EIO;
 +}
 +
 +/*
 + * parse extra results
 + */
 +static int parse_reply_info_extra(void **p, void *end,
-                 struct ceph_mds_reply_info_parsed *info)
++                struct ceph_mds_reply_info_parsed *info, int features)
 +{
 +	if (info->head->op == CEPH_MDS_OP_GETFILELOCK)
 +		return parse_reply_info_filelock(p, end, info);
 +	else
- 		return parse_reply_info_dir(p, end, info);
++		return parse_reply_info_dir(p, end, info, features);
 +}
 +
 +/*
   * parse entire mds reply
   */
  static int parse_reply_info(struct ceph_msg *msg,
@@@ -255,10 -234,10 +265,10 @@@
  			goto out_bad;
  	}
  
 -	/* dir content */
 +	/* extra */
  	ceph_decode_32_safe(&p, end, len, bad);
  	if (len > 0) {
- 		err = parse_reply_info_extra(&p, p+len, info);
 -		err = parse_reply_info_dir(&p, p+len, info, features);
++		err = parse_reply_info_extra(&p, p+len, info, features);
  		if (err < 0)
  			goto out_bad;
  	}