mds_client.c (7c1332b8cb5b27656cf6ab1f5fe808a8eb8bb2c0) | mds_client.c (2600d2dd5085ab6fb09540226138a60055abf335) |
---|---|
1#include "ceph_debug.h" 2 3#include <linux/wait.h> 4#include <linux/sched.h> 5 6#include "mds_client.h" 7#include "mon_client.h" 8#include "super.h" --- 295 unchanged lines hidden (view full) --- 304 305static bool __have_session(struct ceph_mds_client *mdsc, int mds) 306{ 307 if (mds >= mdsc->max_sessions) 308 return false; 309 return mdsc->sessions[mds]; 310} 311 | 1#include "ceph_debug.h" 2 3#include <linux/wait.h> 4#include <linux/sched.h> 5 6#include "mds_client.h" 7#include "mon_client.h" 8#include "super.h" --- 295 unchanged lines hidden (view full) --- 304 305static bool __have_session(struct ceph_mds_client *mdsc, int mds) 306{ 307 if (mds >= mdsc->max_sessions) 308 return false; 309 return mdsc->sessions[mds]; 310} 311 |
312static int __verify_registered_session(struct ceph_mds_client *mdsc, 313 struct ceph_mds_session *s) 314{ 315 if (s->s_mds >= mdsc->max_sessions || 316 mdsc->sessions[s->s_mds] != s) 317 return -ENOENT; 318 return 0; 319} 320 |
|
312/* 313 * create+register a new session for given mds. 314 * called under mdsc->mutex. 315 */ 316static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, 317 int mds) 318{ 319 struct ceph_mds_session *s; --- 57 unchanged lines hidden (view full) --- 377fail_realloc: 378 kfree(s); 379 return ERR_PTR(-ENOMEM); 380} 381 382/* 383 * called under mdsc->mutex 384 */ | 321/* 322 * create+register a new session for given mds. 323 * called under mdsc->mutex. 324 */ 325static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, 326 int mds) 327{ 328 struct ceph_mds_session *s; --- 57 unchanged lines hidden (view full) --- 386fail_realloc: 387 kfree(s); 388 return ERR_PTR(-ENOMEM); 389} 390 391/* 392 * called under mdsc->mutex 393 */ |
385static void unregister_session(struct ceph_mds_client *mdsc, | 394static void __unregister_session(struct ceph_mds_client *mdsc, |
386 struct ceph_mds_session *s) 387{ | 395 struct ceph_mds_session *s) 396{ |
388 dout("unregister_session mds%d %p\n", s->s_mds, s); | 397 dout("__unregister_session mds%d %p\n", s->s_mds, s); 398 BUG_ON(mdsc->sessions[s->s_mds] != s); |
389 mdsc->sessions[s->s_mds] = NULL; 390 ceph_con_close(&s->s_con); 391 ceph_put_mds_session(s); 392} 393 394/* 395 * drop session refs in request. 396 * --- 1338 unchanged lines hidden (view full) --- 1735static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) 1736{ 1737 struct ceph_mds_client *mdsc = session->s_mdsc; 1738 struct ceph_mds_request *req; 1739 struct ceph_mds_reply_head *head = msg->front.iov_base; 1740 struct ceph_mds_reply_info_parsed *rinfo; /* parsed reply info */ 1741 u64 tid; 1742 int err, result; | 399 mdsc->sessions[s->s_mds] = NULL; 400 ceph_con_close(&s->s_con); 401 ceph_put_mds_session(s); 402} 403 404/* 405 * drop session refs in request. 406 * --- 1338 unchanged lines hidden (view full) --- 1745static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) 1746{ 1747 struct ceph_mds_client *mdsc = session->s_mdsc; 1748 struct ceph_mds_request *req; 1749 struct ceph_mds_reply_head *head = msg->front.iov_base; 1750 struct ceph_mds_reply_info_parsed *rinfo; /* parsed reply info */ 1751 u64 tid; 1752 int err, result; |
1743 int mds; | 1753 int mds = session->s_mds; |
1744 | 1754 |
1745 if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) 1746 return; | |
1747 if (msg->front.iov_len < sizeof(*head)) { 1748 pr_err("mdsc_handle_reply got corrupt (short) reply\n"); 1749 ceph_msg_dump(msg); 1750 return; 1751 } 1752 1753 /* get request, session */ 1754 tid = le64_to_cpu(msg->hdr.tid); 1755 mutex_lock(&mdsc->mutex); 1756 req = __lookup_request(mdsc, tid); 1757 if (!req) { 1758 dout("handle_reply on unknown tid %llu\n", tid); 1759 mutex_unlock(&mdsc->mutex); 1760 return; 1761 } 1762 dout("handle_reply %p\n", req); | 1755 if (msg->front.iov_len < sizeof(*head)) { 1756 pr_err("mdsc_handle_reply got corrupt (short) reply\n"); 1757 ceph_msg_dump(msg); 1758 return; 1759 } 1760 1761 /* get request, session */ 1762 tid = le64_to_cpu(msg->hdr.tid); 1763 mutex_lock(&mdsc->mutex); 1764 req = __lookup_request(mdsc, tid); 1765 if (!req) { 1766 dout("handle_reply on unknown tid %llu\n", tid); 1767 mutex_unlock(&mdsc->mutex); 1768 return; 1769 } 1770 dout("handle_reply %p\n", req); |
1763 mds = le64_to_cpu(msg->hdr.src.name.num); | |
1764 1765 /* correct session? */ 1766 if (!req->r_session && req->r_session != session) { 1767 pr_err("mdsc_handle_reply got %llu on session mds%d" 1768 " not mds%d\n", tid, session->s_mds, 1769 req->r_session ? req->r_session->s_mds : -1); 1770 mutex_unlock(&mdsc->mutex); 1771 goto out; --- 107 unchanged lines hidden (view full) --- 1879 return; 1880} 1881 1882 1883 1884/* 1885 * handle mds notification that our request has been forwarded. 1886 */ | 1771 1772 /* correct session? */ 1773 if (!req->r_session && req->r_session != session) { 1774 pr_err("mdsc_handle_reply got %llu on session mds%d" 1775 " not mds%d\n", tid, session->s_mds, 1776 req->r_session ? req->r_session->s_mds : -1); 1777 mutex_unlock(&mdsc->mutex); 1778 goto out; --- 107 unchanged lines hidden (view full) --- 1886 return; 1887} 1888 1889 1890 1891/* 1892 * handle mds notification that our request has been forwarded. 1893 */ |
1887static void handle_forward(struct ceph_mds_client *mdsc, struct ceph_msg *msg) | 1894static void handle_forward(struct ceph_mds_client *mdsc, 1895 struct ceph_mds_session *session, 1896 struct ceph_msg *msg) |
1888{ 1889 struct ceph_mds_request *req; 1890 u64 tid; 1891 u32 next_mds; 1892 u32 fwd_seq; 1893 u8 must_resend; 1894 int err = -EINVAL; 1895 void *p = msg->front.iov_base; 1896 void *end = p + msg->front.iov_len; | 1897{ 1898 struct ceph_mds_request *req; 1899 u64 tid; 1900 u32 next_mds; 1901 u32 fwd_seq; 1902 u8 must_resend; 1903 int err = -EINVAL; 1904 void *p = msg->front.iov_base; 1905 void *end = p + msg->front.iov_len; |
1897 int from_mds, state; | 1906 int state; |
1898 | 1907 |
1899 if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) 1900 goto bad; 1901 from_mds = le64_to_cpu(msg->hdr.src.name.num); 1902 | |
1903 ceph_decode_need(&p, end, sizeof(u64)+2*sizeof(u32), bad); 1904 tid = ceph_decode_64(&p); 1905 next_mds = ceph_decode_32(&p); 1906 fwd_seq = ceph_decode_32(&p); 1907 must_resend = ceph_decode_8(&p); 1908 1909 WARN_ON(must_resend); /* shouldn't happen. */ 1910 1911 mutex_lock(&mdsc->mutex); 1912 req = __lookup_request(mdsc, tid); 1913 if (!req) { 1914 dout("forward %llu dne\n", tid); 1915 goto out; /* dup reply? */ 1916 } 1917 | 1908 ceph_decode_need(&p, end, sizeof(u64)+2*sizeof(u32), bad); 1909 tid = ceph_decode_64(&p); 1910 next_mds = ceph_decode_32(&p); 1911 fwd_seq = ceph_decode_32(&p); 1912 must_resend = ceph_decode_8(&p); 1913 1914 WARN_ON(must_resend); /* shouldn't happen. */ 1915 1916 mutex_lock(&mdsc->mutex); 1917 req = __lookup_request(mdsc, tid); 1918 if (!req) { 1919 dout("forward %llu dne\n", tid); 1920 goto out; /* dup reply? */ 1921 } 1922 |
1923 if (next_mds >= mdsc->max_sessions) 1924 goto out; 1925 |
|
1918 state = mdsc->sessions[next_mds]->s_state; 1919 if (fwd_seq <= req->r_num_fwd) { 1920 dout("forward %llu to mds%d - old seq %d <= %d\n", 1921 tid, next_mds, req->r_num_fwd, fwd_seq); 1922 } else { 1923 /* resend. forward race not possible; mds would drop */ 1924 dout("forward %llu to mds%d (we resend)\n", tid, next_mds); 1925 req->r_num_fwd = fwd_seq; --- 14 unchanged lines hidden (view full) --- 1940 * handle a mds session control message 1941 */ 1942static void handle_session(struct ceph_mds_session *session, 1943 struct ceph_msg *msg) 1944{ 1945 struct ceph_mds_client *mdsc = session->s_mdsc; 1946 u32 op; 1947 u64 seq; | 1926 state = mdsc->sessions[next_mds]->s_state; 1927 if (fwd_seq <= req->r_num_fwd) { 1928 dout("forward %llu to mds%d - old seq %d <= %d\n", 1929 tid, next_mds, req->r_num_fwd, fwd_seq); 1930 } else { 1931 /* resend. forward race not possible; mds would drop */ 1932 dout("forward %llu to mds%d (we resend)\n", tid, next_mds); 1933 req->r_num_fwd = fwd_seq; --- 14 unchanged lines hidden (view full) --- 1948 * handle a mds session control message 1949 */ 1950static void handle_session(struct ceph_mds_session *session, 1951 struct ceph_msg *msg) 1952{ 1953 struct ceph_mds_client *mdsc = session->s_mdsc; 1954 u32 op; 1955 u64 seq; |
1948 int mds; | 1956 int mds = session->s_mds; |
1949 struct ceph_mds_session_head *h = msg->front.iov_base; 1950 int wake = 0; 1951 | 1957 struct ceph_mds_session_head *h = msg->front.iov_base; 1958 int wake = 0; 1959 |
1952 if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) 1953 return; 1954 mds = le64_to_cpu(msg->hdr.src.name.num); 1955 | |
1956 /* decode */ 1957 if (msg->front.iov_len != sizeof(*h)) 1958 goto bad; 1959 op = le32_to_cpu(h->op); 1960 seq = le64_to_cpu(h->seq); 1961 1962 mutex_lock(&mdsc->mutex); | 1960 /* decode */ 1961 if (msg->front.iov_len != sizeof(*h)) 1962 goto bad; 1963 op = le32_to_cpu(h->op); 1964 seq = le64_to_cpu(h->seq); 1965 1966 mutex_lock(&mdsc->mutex); |
1967 if (op == CEPH_SESSION_CLOSE) 1968 __unregister_session(mdsc, session); |
|
1963 /* FIXME: this ttl calculation is generous */ 1964 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; 1965 mutex_unlock(&mdsc->mutex); 1966 1967 mutex_lock(&session->s_mutex); 1968 1969 dout("handle_session mds%d %s %p state %s seq %llu\n", 1970 mds, ceph_session_op_name(op), session, --- 14 unchanged lines hidden (view full) --- 1985 break; 1986 1987 case CEPH_SESSION_RENEWCAPS: 1988 if (session->s_renew_seq == seq) 1989 renewed_caps(mdsc, session, 1); 1990 break; 1991 1992 case CEPH_SESSION_CLOSE: | 1969 /* FIXME: this ttl calculation is generous */ 1970 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; 1971 mutex_unlock(&mdsc->mutex); 1972 1973 mutex_lock(&session->s_mutex); 1974 1975 dout("handle_session mds%d %s %p state %s seq %llu\n", 1976 mds, ceph_session_op_name(op), session, --- 14 unchanged lines hidden (view full) --- 1991 break; 1992 1993 case CEPH_SESSION_RENEWCAPS: 1994 if (session->s_renew_seq == seq) 1995 renewed_caps(mdsc, session, 1); 1996 break; 1997 1998 case CEPH_SESSION_CLOSE: |
1993 unregister_session(mdsc, session); | |
1994 remove_session_caps(session); 1995 wake = 1; /* for good measure */ 1996 complete(&mdsc->session_close_waiters); 1997 kick_requests(mdsc, mds, 0); /* cur only */ 1998 break; 1999 2000 case CEPH_SESSION_STALE: 2001 pr_info("mds%d caps went stale, renewing\n", --- 262 unchanged lines hidden (view full) --- 2264 2265 if (memcmp(ceph_mdsmap_get_addr(oldmap, i), 2266 ceph_mdsmap_get_addr(newmap, i), 2267 sizeof(struct ceph_entity_addr))) { 2268 if (s->s_state == CEPH_MDS_SESSION_OPENING) { 2269 /* the session never opened, just close it 2270 * out now */ 2271 __wake_requests(mdsc, &s->s_waiting); | 1999 remove_session_caps(session); 2000 wake = 1; /* for good measure */ 2001 complete(&mdsc->session_close_waiters); 2002 kick_requests(mdsc, mds, 0); /* cur only */ 2003 break; 2004 2005 case CEPH_SESSION_STALE: 2006 pr_info("mds%d caps went stale, renewing\n", --- 262 unchanged lines hidden (view full) --- 2269 2270 if (memcmp(ceph_mdsmap_get_addr(oldmap, i), 2271 ceph_mdsmap_get_addr(newmap, i), 2272 sizeof(struct ceph_entity_addr))) { 2273 if (s->s_state == CEPH_MDS_SESSION_OPENING) { 2274 /* the session never opened, just close it 2275 * out now */ 2276 __wake_requests(mdsc, &s->s_waiting); |
2272 unregister_session(mdsc, s); | 2277 __unregister_session(mdsc, s); |
2273 } else { 2274 /* just close it */ 2275 mutex_unlock(&mdsc->mutex); 2276 mutex_lock(&s->s_mutex); 2277 mutex_lock(&mdsc->mutex); 2278 ceph_con_close(&s->s_con); 2279 mutex_unlock(&s->s_mutex); 2280 s->s_state = CEPH_MDS_SESSION_RESTARTING; --- 43 unchanged lines hidden (view full) --- 2324void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry) 2325{ 2326 struct ceph_dentry_info *di = ceph_dentry(dentry); 2327 2328 ceph_put_mds_session(di->lease_session); 2329 di->lease_session = NULL; 2330} 2331 | 2278 } else { 2279 /* just close it */ 2280 mutex_unlock(&mdsc->mutex); 2281 mutex_lock(&s->s_mutex); 2282 mutex_lock(&mdsc->mutex); 2283 ceph_con_close(&s->s_con); 2284 mutex_unlock(&s->s_mutex); 2285 s->s_state = CEPH_MDS_SESSION_RESTARTING; --- 43 unchanged lines hidden (view full) --- 2329void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry) 2330{ 2331 struct ceph_dentry_info *di = ceph_dentry(dentry); 2332 2333 ceph_put_mds_session(di->lease_session); 2334 di->lease_session = NULL; 2335} 2336 |
2332static void handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg) | 2337static void handle_lease(struct ceph_mds_client *mdsc, 2338 struct ceph_mds_session *session, 2339 struct ceph_msg *msg) |
2333{ 2334 struct super_block *sb = mdsc->client->sb; 2335 struct inode *inode; | 2340{ 2341 struct super_block *sb = mdsc->client->sb; 2342 struct inode *inode; |
2336 struct ceph_mds_session *session; | |
2337 struct ceph_inode_info *ci; 2338 struct dentry *parent, *dentry; 2339 struct ceph_dentry_info *di; | 2343 struct ceph_inode_info *ci; 2344 struct dentry *parent, *dentry; 2345 struct ceph_dentry_info *di; |
2340 int mds; | 2346 int mds = session->s_mds; |
2341 struct ceph_mds_lease *h = msg->front.iov_base; 2342 struct ceph_vino vino; 2343 int mask; 2344 struct qstr dname; 2345 int release = 0; 2346 | 2347 struct ceph_mds_lease *h = msg->front.iov_base; 2348 struct ceph_vino vino; 2349 int mask; 2350 struct qstr dname; 2351 int release = 0; 2352 |
2347 if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) 2348 return; 2349 mds = le64_to_cpu(msg->hdr.src.name.num); | |
2350 dout("handle_lease from mds%d\n", mds); 2351 2352 /* decode */ 2353 if (msg->front.iov_len < sizeof(*h) + sizeof(u32)) 2354 goto bad; 2355 vino.ino = le64_to_cpu(h->ino); 2356 vino.snap = CEPH_NOSNAP; 2357 mask = le16_to_cpu(h->mask); 2358 dname.name = (void *)h + sizeof(*h) + sizeof(u32); 2359 dname.len = msg->front.iov_len - sizeof(*h) - sizeof(u32); 2360 if (dname.len != get_unaligned_le32(h+1)) 2361 goto bad; 2362 | 2353 dout("handle_lease from mds%d\n", mds); 2354 2355 /* decode */ 2356 if (msg->front.iov_len < sizeof(*h) + sizeof(u32)) 2357 goto bad; 2358 vino.ino = le64_to_cpu(h->ino); 2359 vino.snap = CEPH_NOSNAP; 2360 mask = le16_to_cpu(h->mask); 2361 dname.name = (void *)h + sizeof(*h) + sizeof(u32); 2362 dname.len = msg->front.iov_len - sizeof(*h) - sizeof(u32); 2363 if (dname.len != get_unaligned_le32(h+1)) 2364 goto bad; 2365 |
2363 /* find session */ 2364 mutex_lock(&mdsc->mutex); 2365 session = __ceph_lookup_mds_session(mdsc, mds); 2366 mutex_unlock(&mdsc->mutex); 2367 if (!session) { 2368 pr_err("handle_lease got lease but no session mds%d\n", mds); 2369 return; 2370 } 2371 | |
2372 mutex_lock(&session->s_mutex); 2373 session->s_seq++; 2374 2375 /* lookup inode */ 2376 inode = ceph_find_inode(sb, vino); 2377 dout("handle_lease '%s', mask %d, ino %llx %p\n", 2378 ceph_lease_op_name(h->action), mask, vino.ino, inode); 2379 if (inode == NULL) { --- 52 unchanged lines hidden (view full) --- 2432 /* let's just reuse the same message */ 2433 h->action = CEPH_MDS_LEASE_REVOKE_ACK; 2434 ceph_msg_get(msg); 2435 ceph_con_send(&session->s_con, msg); 2436 2437out: 2438 iput(inode); 2439 mutex_unlock(&session->s_mutex); | 2366 mutex_lock(&session->s_mutex); 2367 session->s_seq++; 2368 2369 /* lookup inode */ 2370 inode = ceph_find_inode(sb, vino); 2371 dout("handle_lease '%s', mask %d, ino %llx %p\n", 2372 ceph_lease_op_name(h->action), mask, vino.ino, inode); 2373 if (inode == NULL) { --- 52 unchanged lines hidden (view full) --- 2426 /* let's just reuse the same message */ 2427 h->action = CEPH_MDS_LEASE_REVOKE_ACK; 2428 ceph_msg_get(msg); 2429 ceph_con_send(&session->s_con, msg); 2430 2431out: 2432 iput(inode); 2433 mutex_unlock(&session->s_mutex); |
2440 ceph_put_mds_session(session); | |
2441 return; 2442 2443bad: 2444 pr_err("corrupt lease message\n"); 2445 ceph_msg_dump(msg); 2446} 2447 2448void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, --- 340 unchanged lines hidden (view full) --- 2789 timeout); 2790 mutex_lock(&mdsc->mutex); 2791 } 2792 2793 /* tear down remaining sessions */ 2794 for (i = 0; i < mdsc->max_sessions; i++) { 2795 if (mdsc->sessions[i]) { 2796 session = get_session(mdsc->sessions[i]); | 2434 return; 2435 2436bad: 2437 pr_err("corrupt lease message\n"); 2438 ceph_msg_dump(msg); 2439} 2440 2441void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, --- 340 unchanged lines hidden (view full) --- 2782 timeout); 2783 mutex_lock(&mdsc->mutex); 2784 } 2785 2786 /* tear down remaining sessions */ 2787 for (i = 0; i < mdsc->max_sessions; i++) { 2788 if (mdsc->sessions[i]) { 2789 session = get_session(mdsc->sessions[i]); |
2797 unregister_session(mdsc, session); | 2790 __unregister_session(mdsc, session); |
2798 mutex_unlock(&mdsc->mutex); 2799 mutex_lock(&session->s_mutex); 2800 remove_session_caps(session); 2801 mutex_unlock(&session->s_mutex); 2802 ceph_put_mds_session(session); 2803 mutex_lock(&mdsc->mutex); 2804 } 2805 } --- 80 unchanged lines hidden (view full) --- 2886 return; 2887} 2888 2889static struct ceph_connection *con_get(struct ceph_connection *con) 2890{ 2891 struct ceph_mds_session *s = con->private; 2892 2893 if (get_session(s)) { | 2791 mutex_unlock(&mdsc->mutex); 2792 mutex_lock(&session->s_mutex); 2793 remove_session_caps(session); 2794 mutex_unlock(&session->s_mutex); 2795 ceph_put_mds_session(session); 2796 mutex_lock(&mdsc->mutex); 2797 } 2798 } --- 80 unchanged lines hidden (view full) --- 2879 return; 2880} 2881 2882static struct ceph_connection *con_get(struct ceph_connection *con) 2883{ 2884 struct ceph_mds_session *s = con->private; 2885 2886 if (get_session(s)) { |
2894 dout("mdsc con_get %p %d -> %d\n", s, 2895 atomic_read(&s->s_ref) - 1, atomic_read(&s->s_ref)); | 2887 dout("mdsc con_get %p ok (%d)\n", s, atomic_read(&s->s_ref)); |
2896 return con; 2897 } 2898 dout("mdsc con_get %p FAIL\n", s); 2899 return NULL; 2900} 2901 2902static void con_put(struct ceph_connection *con) 2903{ 2904 struct ceph_mds_session *s = con->private; 2905 | 2888 return con; 2889 } 2890 dout("mdsc con_get %p FAIL\n", s); 2891 return NULL; 2892} 2893 2894static void con_put(struct ceph_connection *con) 2895{ 2896 struct ceph_mds_session *s = con->private; 2897 |
2906 dout("mdsc con_put %p %d -> %d\n", s, atomic_read(&s->s_ref), 2907 atomic_read(&s->s_ref) - 1); | |
2908 ceph_put_mds_session(s); | 2898 ceph_put_mds_session(s); |
2899 dout("mdsc con_put %p (%d)\n", s, atomic_read(&s->s_ref)); |
|
2909} 2910 2911/* 2912 * if the client is unresponsive for long enough, the mds will kill 2913 * the session entirely. 2914 */ 2915static void peer_reset(struct ceph_connection *con) 2916{ --- 4 unchanged lines hidden (view full) --- 2921} 2922 2923static void dispatch(struct ceph_connection *con, struct ceph_msg *msg) 2924{ 2925 struct ceph_mds_session *s = con->private; 2926 struct ceph_mds_client *mdsc = s->s_mdsc; 2927 int type = le16_to_cpu(msg->hdr.type); 2928 | 2900} 2901 2902/* 2903 * if the client is unresponsive for long enough, the mds will kill 2904 * the session entirely. 2905 */ 2906static void peer_reset(struct ceph_connection *con) 2907{ --- 4 unchanged lines hidden (view full) --- 2912} 2913 2914static void dispatch(struct ceph_connection *con, struct ceph_msg *msg) 2915{ 2916 struct ceph_mds_session *s = con->private; 2917 struct ceph_mds_client *mdsc = s->s_mdsc; 2918 int type = le16_to_cpu(msg->hdr.type); 2919 |
2920 mutex_lock(&mdsc->mutex); 2921 if (__verify_registered_session(mdsc, s) < 0) { 2922 mutex_unlock(&mdsc->mutex); 2923 goto out; 2924 } 2925 mutex_unlock(&mdsc->mutex); 2926 |
|
2929 switch (type) { 2930 case CEPH_MSG_MDS_MAP: 2931 ceph_mdsc_handle_map(mdsc, msg); 2932 break; 2933 case CEPH_MSG_CLIENT_SESSION: 2934 handle_session(s, msg); 2935 break; 2936 case CEPH_MSG_CLIENT_REPLY: 2937 handle_reply(s, msg); 2938 break; 2939 case CEPH_MSG_CLIENT_REQUEST_FORWARD: | 2927 switch (type) { 2928 case CEPH_MSG_MDS_MAP: 2929 ceph_mdsc_handle_map(mdsc, msg); 2930 break; 2931 case CEPH_MSG_CLIENT_SESSION: 2932 handle_session(s, msg); 2933 break; 2934 case CEPH_MSG_CLIENT_REPLY: 2935 handle_reply(s, msg); 2936 break; 2937 case CEPH_MSG_CLIENT_REQUEST_FORWARD: |
2940 handle_forward(mdsc, msg); | 2938 handle_forward(mdsc, s, msg); |
2941 break; 2942 case CEPH_MSG_CLIENT_CAPS: 2943 ceph_handle_caps(s, msg); 2944 break; 2945 case CEPH_MSG_CLIENT_SNAP: | 2939 break; 2940 case CEPH_MSG_CLIENT_CAPS: 2941 ceph_handle_caps(s, msg); 2942 break; 2943 case CEPH_MSG_CLIENT_SNAP: |
2946 ceph_handle_snap(mdsc, msg); | 2944 ceph_handle_snap(mdsc, s, msg); |
2947 break; 2948 case CEPH_MSG_CLIENT_LEASE: | 2945 break; 2946 case CEPH_MSG_CLIENT_LEASE: |
2949 handle_lease(mdsc, msg); | 2947 handle_lease(mdsc, s, msg); |
2950 break; 2951 2952 default: 2953 pr_err("received unknown message type %d %s\n", type, 2954 ceph_msg_type_name(type)); 2955 } | 2948 break; 2949 2950 default: 2951 pr_err("received unknown message type %d %s\n", type, 2952 ceph_msg_type_name(type)); 2953 } |
2954out: |
|
2956 ceph_msg_put(msg); 2957} 2958 2959/* 2960 * authentication 2961 */ 2962static int get_authorizer(struct ceph_connection *con, 2963 void **buf, int *len, int *proto, --- 69 unchanged lines hidden --- | 2955 ceph_msg_put(msg); 2956} 2957 2958/* 2959 * authentication 2960 */ 2961static int get_authorizer(struct ceph_connection *con, 2962 void **buf, int *len, int *proto, --- 69 unchanged lines hidden --- |