Bluetooth: Read LE Max data length command
[platform/kernel/linux-starfive.git] / fs / dlm / lock.c
index 94a72ed..0b1bc24 100644 (file)
@@ -3611,9 +3611,10 @@ static int create_message(struct dlm_rsb *r, struct dlm_lkb *lkb,
 /* further lowcomms enhancements or alternate implementations may make
    the return value from this function useful at some point */
 
-static int send_message(struct dlm_mhandle *mh, struct dlm_message *ms)
+static int send_message(struct dlm_mhandle *mh, struct dlm_message *ms,
+                       const void *name, int namelen)
 {
-       dlm_midcomms_commit_mhandle(mh);
+       dlm_midcomms_commit_mhandle(mh, name, namelen);
        return 0;
 }
 
@@ -3679,7 +3680,7 @@ static int send_common(struct dlm_rsb *r, struct dlm_lkb *lkb, int mstype)
 
        send_args(r, lkb, ms);
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
        if (error)
                goto fail;
        return 0;
@@ -3742,7 +3743,7 @@ static int send_grant(struct dlm_rsb *r, struct dlm_lkb *lkb)
 
        ms->m_result = 0;
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
  out:
        return error;
 }
@@ -3763,7 +3764,7 @@ static int send_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int mode)
 
        ms->m_bastmode = cpu_to_le32(mode);
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
  out:
        return error;
 }
@@ -3786,7 +3787,7 @@ static int send_lookup(struct dlm_rsb *r, struct dlm_lkb *lkb)
 
        send_args(r, lkb, ms);
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
        if (error)
                goto fail;
        return 0;
@@ -3811,7 +3812,7 @@ static int send_remove(struct dlm_rsb *r)
        memcpy(ms->m_extra, r->res_name, r->res_length);
        ms->m_hash = cpu_to_le32(r->res_hash);
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
  out:
        return error;
 }
@@ -3833,7 +3834,7 @@ static int send_common_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
 
        ms->m_result = cpu_to_le32(to_dlm_errno(rv));
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, r->res_name, r->res_length);
  out:
        return error;
 }
@@ -3874,7 +3875,7 @@ static int send_lookup_reply(struct dlm_ls *ls, struct dlm_message *ms_in,
        ms->m_result = cpu_to_le32(to_dlm_errno(rv));
        ms->m_nodeid = cpu_to_le32(ret_nodeid);
 
-       error = send_message(mh, ms);
+       error = send_message(mh, ms, ms_in->m_extra, receive_extralen(ms_in));
  out:
        return error;
 }
@@ -4044,66 +4045,6 @@ out:
        return error;
 }
 
-static void send_repeat_remove(struct dlm_ls *ls, char *ms_name, int len)
-{
-       char name[DLM_RESNAME_MAXLEN + 1];
-       struct dlm_message *ms;
-       struct dlm_mhandle *mh;
-       struct dlm_rsb *r;
-       uint32_t hash, b;
-       int rv, dir_nodeid;
-
-       memset(name, 0, sizeof(name));
-       memcpy(name, ms_name, len);
-
-       hash = jhash(name, len, 0);
-       b = hash & (ls->ls_rsbtbl_size - 1);
-
-       dir_nodeid = dlm_hash2nodeid(ls, hash);
-
-       log_error(ls, "send_repeat_remove dir %d %s", dir_nodeid, name);
-
-       spin_lock(&ls->ls_rsbtbl[b].lock);
-       rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
-       if (!rv) {
-               spin_unlock(&ls->ls_rsbtbl[b].lock);
-               log_error(ls, "repeat_remove on keep %s", name);
-               return;
-       }
-
-       rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
-       if (!rv) {
-               spin_unlock(&ls->ls_rsbtbl[b].lock);
-               log_error(ls, "repeat_remove on toss %s", name);
-               return;
-       }
-
-       /* use ls->remove_name2 to avoid conflict with shrink? */
-
-       spin_lock(&ls->ls_remove_spin);
-       ls->ls_remove_len = len;
-       memcpy(ls->ls_remove_name, name, DLM_RESNAME_MAXLEN);
-       spin_unlock(&ls->ls_remove_spin);
-       spin_unlock(&ls->ls_rsbtbl[b].lock);
-
-       rv = _create_message(ls, sizeof(struct dlm_message) + len,
-                            dir_nodeid, DLM_MSG_REMOVE, &ms, &mh);
-       if (rv)
-               goto out;
-
-       memcpy(ms->m_extra, name, len);
-       ms->m_hash = cpu_to_le32(hash);
-
-       send_message(mh, ms);
-
-out:
-       spin_lock(&ls->ls_remove_spin);
-       ls->ls_remove_len = 0;
-       memset(ls->ls_remove_name, 0, DLM_RESNAME_MAXLEN);
-       spin_unlock(&ls->ls_remove_spin);
-       wake_up(&ls->ls_remove_wait);
-}
-
 static int receive_request(struct dlm_ls *ls, struct dlm_message *ms)
 {
        struct dlm_lkb *lkb;
@@ -4173,25 +4114,11 @@ static int receive_request(struct dlm_ls *ls, struct dlm_message *ms)
           ENOTBLK request failures when the lookup reply designating us
           as master is delayed. */
 
-       /* We could repeatedly return -EBADR here if our send_remove() is
-          delayed in being sent/arriving/being processed on the dir node.
-          Another node would repeatedly lookup up the master, and the dir
-          node would continue returning our nodeid until our send_remove
-          took effect.
-
-          We send another remove message in case our previous send_remove
-          was lost/ignored/missed somehow. */
-
        if (error != -ENOTBLK) {
                log_limit(ls, "receive_request %x from %d %d",
                          le32_to_cpu(ms->m_lkid), from_nodeid, error);
        }
 
-       if (namelen && error == -EBADR) {
-               send_repeat_remove(ls, ms->m_extra, namelen);
-               msleep(1000);
-       }
-
        setup_stub_lkb(ls, ms);
        send_request_reply(&ls->ls_stub_rsb, &ls->ls_stub_lkb, error);
        return error;
@@ -6374,7 +6301,7 @@ static int send_purge(struct dlm_ls *ls, int nodeid, int pid)
        ms->m_nodeid = cpu_to_le32(nodeid);
        ms->m_pid = cpu_to_le32(pid);
 
-       return send_message(mh, ms);
+       return send_message(mh, ms, NULL, 0);
 }
 
 int dlm_user_purge(struct dlm_ls *ls, struct dlm_user_proc *proc,