ceph: include preferred osd in placement seed

Mix the preferred osd (if any) into the placement seed that is fed into
the CRUSH object placement calculation.  This prevents all the placement
pgs from peering with the same osds.

Rev the osd client protocol with this change.

Signed-off-by: Sage Weil <sage@newdream.net>
diff --git a/fs/ceph/osdmap.c b/fs/ceph/osdmap.c
index 6f0aeff..72d75a2 100644
--- a/fs/ceph/osdmap.c
+++ b/fs/ceph/osdmap.c
@@ -791,6 +791,8 @@
 	pgid.pg64 = 0;   /* start with it zeroed out */
 	pgid.pg.ps = ceph_full_name_hash(oid, strlen(oid));
 	pgid.pg.preferred = preferred;
+	if (preferred >= 0)
+		pgid.pg.ps += preferred;
 	pgid.pg.pool = le32_to_cpu(fl->fl_pg_pool);
 	if (preferred >= 0)
 		dout("calc_object_layout '%s' pgid %d.%xp%d (%llx)\n", oid,