Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[firefly-linux-kernel-4.4.55.git] / drivers / md / md-cluster.c
index 35ac2e8cb7f13c2b2c4bbeea3bdeb6089ef49629..d6a1126d85ce1b9f5f528214a89af7a090647a1b 100644 (file)
@@ -54,7 +54,6 @@ struct md_cluster_info {
        dlm_lockspace_t *lockspace;
        int slot_number;
        struct completion completion;
-       struct mutex sb_mutex;
        struct dlm_lock_resource *bitmap_lockres;
        struct dlm_lock_resource *resync_lockres;
        struct list_head suspend_list;
@@ -81,20 +80,20 @@ enum msg_type {
 };
 
 struct cluster_msg {
-       int type;
-       int slot;
+       __le32 type;
+       __le32 slot;
        /* TODO: Unionize this for smaller footprint */
-       sector_t low;
-       sector_t high;
+       __le64 low;
+       __le64 high;
        char uuid[16];
-       int raid_slot;
+       __le32 raid_slot;
 };
 
 static void sync_ast(void *arg)
 {
        struct dlm_lock_resource *res;
 
-       res = (struct dlm_lock_resource *) arg;
+       res = arg;
        complete(&res->completion);
 }
 
@@ -196,8 +195,8 @@ retry:
        kfree(res);
 }
 
-static void add_resync_info(struct mddev *mddev, struct dlm_lock_resource *lockres,
-               sector_t lo, sector_t hi)
+static void add_resync_info(struct dlm_lock_resource *lockres,
+                           sector_t lo, sector_t hi)
 {
        struct resync_info *ri;
 
@@ -215,7 +214,7 @@ static struct suspend_info *read_resync_info(struct mddev *mddev, struct dlm_loc
        dlm_lock_sync(lockres, DLM_LOCK_CR);
        memcpy(&ri, lockres->lksb.sb_lvbptr, sizeof(struct resync_info));
        hi = le64_to_cpu(ri.hi);
-       if (ri.hi > 0) {
+       if (hi > 0) {
                s = kzalloc(sizeof(struct suspend_info), GFP_KERNEL);
                if (!s)
                        goto out;
@@ -350,7 +349,7 @@ static const struct dlm_lockspace_ops md_ls_ops = {
  */
 static void ack_bast(void *arg, int mode)
 {
-       struct dlm_lock_resource *res = (struct dlm_lock_resource *)arg;
+       struct dlm_lock_resource *res = arg;
        struct md_cluster_info *cinfo = res->mddev->cluster_info;
 
        if (mode == DLM_LOCK_EX)
@@ -465,13 +464,14 @@ static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
        if (WARN(mddev->cluster_info->slot_number - 1 == le32_to_cpu(msg->slot),
                "node %d received it's own msg\n", le32_to_cpu(msg->slot)))
                return;
-       switch (msg->type) {
+       switch (le32_to_cpu(msg->type)) {
        case METADATA_UPDATED:
                process_metadata_update(mddev, msg);
                break;
        case RESYNCING:
-               process_suspend_info(mddev, msg->slot,
-                               msg->low, msg->high);
+               process_suspend_info(mddev, le32_to_cpu(msg->slot),
+                                    le64_to_cpu(msg->low),
+                                    le64_to_cpu(msg->high));
                break;
        case NEWDISK:
                process_add_new_disk(mddev, msg);
@@ -483,7 +483,7 @@ static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
                process_readd_disk(mddev, msg);
                break;
        case BITMAP_NEEDS_SYNC:
-               __recover_slot(mddev, msg->slot);
+               __recover_slot(mddev, le32_to_cpu(msg->slot));
                break;
        default:
                pr_warn("%s:%d Received unknown message from %d\n",
@@ -708,7 +708,6 @@ static int join(struct mddev *mddev, int nodes)
        init_completion(&cinfo->completion);
        set_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state);
 
-       mutex_init(&cinfo->sb_mutex);
        mddev->cluster_info = cinfo;
 
        memset(str, 0, 64);
@@ -847,20 +846,21 @@ static int metadata_update_finish(struct mddev *mddev)
        struct cluster_msg cmsg;
        struct md_rdev *rdev;
        int ret = 0;
+       int raid_slot = -1;
 
        memset(&cmsg, 0, sizeof(cmsg));
        cmsg.type = cpu_to_le32(METADATA_UPDATED);
-       cmsg.raid_slot = -1;
        /* Pick up a good active device number to send.
         */
        rdev_for_each(rdev, mddev)
                if (rdev->raid_disk > -1 && !test_bit(Faulty, &rdev->flags)) {
-                       cmsg.raid_slot = cpu_to_le32(rdev->desc_nr);
+                       raid_slot = rdev->desc_nr;
                        break;
                }
-       if (cmsg.raid_slot >= 0)
+       if (raid_slot >= 0) {
+               cmsg.raid_slot = cpu_to_le32(raid_slot);
                ret = __sendmsg(cinfo, &cmsg);
-       else
+       else
                pr_warn("md-cluster: No good device id found to send\n");
        unlock_comm(cinfo);
        return ret;
@@ -884,7 +884,7 @@ static int resync_info_update(struct mddev *mddev, sector_t lo, sector_t hi)
        struct md_cluster_info *cinfo = mddev->cluster_info;
        struct cluster_msg cmsg = {0};
 
-       add_resync_info(mddev, cinfo->bitmap_lockres, lo, hi);
+       add_resync_info(cinfo->bitmap_lockres, lo, hi);
        /* Re-acquire the lock to refresh LVB */
        dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW);
        cmsg.type = cpu_to_le32(RESYNCING);