server.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /* AFS server record management
  3. *
  4. * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
  5. * Written by David Howells (dhowells@redhat.com)
  6. */
  7. #include <linux/sched.h>
  8. #include <linux/slab.h>
  9. #include "afs_fs.h"
  10. #include "internal.h"
  11. #include "protocol_yfs.h"
  12. static unsigned afs_server_gc_delay = 10; /* Server record timeout in seconds */
  13. static atomic_t afs_server_debug_id;
  14. static void __afs_put_server(struct afs_net *, struct afs_server *);
  15. static void afs_server_timer(struct timer_list *timer);
  16. static void afs_server_destroyer(struct work_struct *work);
  17. /*
  18. * Find a server by one of its addresses.
  19. */
  20. struct afs_server *afs_find_server(const struct rxrpc_peer *peer)
  21. {
  22. struct afs_server *server = (struct afs_server *)rxrpc_kernel_get_peer_data(peer);
  23. if (!server)
  24. return NULL;
  25. return afs_use_server(server, false, afs_server_trace_use_cm_call);
  26. }
  27. /*
  28. * Look up a server by its UUID and mark it active. The caller must hold
  29. * cell->fs_lock.
  30. */
  31. static struct afs_server *afs_find_server_by_uuid(struct afs_cell *cell, const uuid_t *uuid)
  32. {
  33. struct afs_server *server;
  34. struct rb_node *p;
  35. int diff;
  36. _enter("%pU", uuid);
  37. p = cell->fs_servers.rb_node;
  38. while (p) {
  39. server = rb_entry(p, struct afs_server, uuid_rb);
  40. diff = memcmp(uuid, &server->uuid, sizeof(*uuid));
  41. if (diff < 0) {
  42. p = p->rb_left;
  43. } else if (diff > 0) {
  44. p = p->rb_right;
  45. } else {
  46. if (test_bit(AFS_SERVER_FL_UNCREATED, &server->flags))
  47. return NULL; /* Need a write lock */
  48. afs_use_server(server, true, afs_server_trace_use_by_uuid);
  49. return server;
  50. }
  51. }
  52. return NULL;
  53. }
  54. /*
  55. * Install a server record in the cell tree. The caller must hold an exclusive
  56. * lock on cell->fs_lock.
  57. */
  58. static struct afs_server *afs_install_server(struct afs_cell *cell,
  59. struct afs_server **candidate)
  60. {
  61. struct afs_server *server;
  62. struct afs_net *net = cell->net;
  63. struct rb_node **pp, *p;
  64. int diff;
  65. _enter("%p", candidate);
  66. /* Firstly install the server in the UUID lookup tree */
  67. pp = &cell->fs_servers.rb_node;
  68. p = NULL;
  69. while (*pp) {
  70. p = *pp;
  71. _debug("- consider %p", p);
  72. server = rb_entry(p, struct afs_server, uuid_rb);
  73. diff = memcmp(&(*candidate)->uuid, &server->uuid, sizeof(uuid_t));
  74. if (diff < 0)
  75. pp = &(*pp)->rb_left;
  76. else if (diff > 0)
  77. pp = &(*pp)->rb_right;
  78. else
  79. goto exists;
  80. }
  81. server = *candidate;
  82. *candidate = NULL;
  83. rb_link_node(&server->uuid_rb, p, pp);
  84. rb_insert_color(&server->uuid_rb, &cell->fs_servers);
  85. write_seqlock(&net->fs_lock);
  86. hlist_add_head_rcu(&server->proc_link, &net->fs_proc);
  87. write_sequnlock(&net->fs_lock);
  88. afs_get_cell(cell, afs_cell_trace_get_server);
  89. exists:
  90. afs_use_server(server, true, afs_server_trace_use_install);
  91. return server;
  92. }
  93. /*
  94. * Allocate a new server record and mark it as active but uncreated.
  95. */
  96. static struct afs_server *afs_alloc_server(struct afs_cell *cell, const uuid_t *uuid)
  97. {
  98. struct afs_server *server;
  99. struct afs_net *net = cell->net;
  100. _enter("");
  101. server = kzalloc_obj(struct afs_server);
  102. if (!server)
  103. return NULL;
  104. refcount_set(&server->ref, 1);
  105. atomic_set(&server->active, 0);
  106. __set_bit(AFS_SERVER_FL_UNCREATED, &server->flags);
  107. server->debug_id = atomic_inc_return(&afs_server_debug_id);
  108. server->uuid = *uuid;
  109. rwlock_init(&server->fs_lock);
  110. INIT_WORK(&server->destroyer, &afs_server_destroyer);
  111. timer_setup(&server->timer, afs_server_timer, 0);
  112. INIT_LIST_HEAD(&server->volumes);
  113. init_waitqueue_head(&server->probe_wq);
  114. mutex_init(&server->cm_token_lock);
  115. INIT_LIST_HEAD(&server->probe_link);
  116. INIT_HLIST_NODE(&server->proc_link);
  117. spin_lock_init(&server->probe_lock);
  118. server->cell = cell;
  119. server->rtt = UINT_MAX;
  120. server->service_id = FS_SERVICE;
  121. server->probe_counter = 1;
  122. server->probed_at = jiffies - LONG_MAX / 2;
  123. afs_inc_servers_outstanding(net);
  124. _leave(" = %p", server);
  125. return server;
  126. }
  127. /*
  128. * Look up an address record for a server
  129. */
  130. static struct afs_addr_list *afs_vl_lookup_addrs(struct afs_server *server,
  131. struct key *key)
  132. {
  133. struct afs_vl_cursor vc;
  134. struct afs_addr_list *alist = NULL;
  135. int ret;
  136. ret = -ERESTARTSYS;
  137. if (afs_begin_vlserver_operation(&vc, server->cell, key)) {
  138. while (afs_select_vlserver(&vc)) {
  139. if (test_bit(AFS_VLSERVER_FL_IS_YFS, &vc.server->flags))
  140. alist = afs_yfsvl_get_endpoints(&vc, &server->uuid);
  141. else
  142. alist = afs_vl_get_addrs_u(&vc, &server->uuid);
  143. }
  144. ret = afs_end_vlserver_operation(&vc);
  145. }
  146. return ret < 0 ? ERR_PTR(ret) : alist;
  147. }
  148. /*
  149. * Get or create a fileserver record and return it with an active-use count on
  150. * it.
  151. */
  152. struct afs_server *afs_lookup_server(struct afs_cell *cell, struct key *key,
  153. const uuid_t *uuid, u32 addr_version)
  154. {
  155. struct afs_addr_list *alist = NULL;
  156. struct afs_server *server, *candidate = NULL;
  157. bool creating = false;
  158. int ret;
  159. _enter("%p,%pU", cell->net, uuid);
  160. down_read(&cell->fs_lock);
  161. server = afs_find_server_by_uuid(cell, uuid);
  162. /* Won't see servers marked uncreated. */
  163. up_read(&cell->fs_lock);
  164. if (server) {
  165. timer_delete_sync(&server->timer);
  166. if (test_bit(AFS_SERVER_FL_CREATING, &server->flags))
  167. goto wait_for_creation;
  168. if (server->addr_version != addr_version)
  169. set_bit(AFS_SERVER_FL_NEEDS_UPDATE, &server->flags);
  170. return server;
  171. }
  172. candidate = afs_alloc_server(cell, uuid);
  173. if (!candidate) {
  174. afs_put_addrlist(alist, afs_alist_trace_put_server_oom);
  175. return ERR_PTR(-ENOMEM);
  176. }
  177. down_write(&cell->fs_lock);
  178. server = afs_install_server(cell, &candidate);
  179. if (test_bit(AFS_SERVER_FL_CREATING, &server->flags)) {
  180. /* We need to wait for creation to complete. */
  181. up_write(&cell->fs_lock);
  182. goto wait_for_creation;
  183. }
  184. if (test_bit(AFS_SERVER_FL_UNCREATED, &server->flags)) {
  185. set_bit(AFS_SERVER_FL_CREATING, &server->flags);
  186. clear_bit(AFS_SERVER_FL_UNCREATED, &server->flags);
  187. creating = true;
  188. }
  189. up_write(&cell->fs_lock);
  190. timer_delete_sync(&server->timer);
  191. /* If we get to create the server, we look up the addresses and then
  192. * immediately dispatch an asynchronous probe to each interface on the
  193. * fileserver. This will make sure the repeat-probing service is
  194. * started.
  195. */
  196. if (creating) {
  197. alist = afs_vl_lookup_addrs(server, key);
  198. if (IS_ERR(alist)) {
  199. ret = PTR_ERR(alist);
  200. goto create_failed;
  201. }
  202. ret = afs_fs_probe_fileserver(cell->net, server, alist, key);
  203. if (ret)
  204. goto create_failed;
  205. clear_and_wake_up_bit(AFS_SERVER_FL_CREATING, &server->flags);
  206. }
  207. out:
  208. afs_put_addrlist(alist, afs_alist_trace_put_server_create);
  209. if (candidate) {
  210. kfree(rcu_access_pointer(server->endpoint_state));
  211. kfree(candidate);
  212. afs_dec_servers_outstanding(cell->net);
  213. }
  214. return server ?: ERR_PTR(ret);
  215. wait_for_creation:
  216. afs_see_server(server, afs_server_trace_wait_create);
  217. wait_on_bit(&server->flags, AFS_SERVER_FL_CREATING, TASK_UNINTERRUPTIBLE);
  218. if (test_bit_acquire(AFS_SERVER_FL_UNCREATED, &server->flags)) {
  219. /* Barrier: read flag before error */
  220. ret = READ_ONCE(server->create_error);
  221. afs_put_server(cell->net, server, afs_server_trace_unuse_create_fail);
  222. server = NULL;
  223. goto out;
  224. }
  225. ret = 0;
  226. goto out;
  227. create_failed:
  228. down_write(&cell->fs_lock);
  229. WRITE_ONCE(server->create_error, ret);
  230. smp_wmb(); /* Barrier: set error before flag. */
  231. set_bit(AFS_SERVER_FL_UNCREATED, &server->flags);
  232. clear_and_wake_up_bit(AFS_SERVER_FL_CREATING, &server->flags);
  233. if (test_bit(AFS_SERVER_FL_UNCREATED, &server->flags)) {
  234. clear_bit(AFS_SERVER_FL_UNCREATED, &server->flags);
  235. creating = true;
  236. }
  237. afs_unuse_server(cell->net, server, afs_server_trace_unuse_create_fail);
  238. server = NULL;
  239. up_write(&cell->fs_lock);
  240. goto out;
  241. }
  242. /*
  243. * Set/reduce a server's timer.
  244. */
  245. static void afs_set_server_timer(struct afs_server *server, unsigned int delay_secs)
  246. {
  247. mod_timer(&server->timer, jiffies + delay_secs * HZ);
  248. }
  249. /*
  250. * Get a reference on a server object.
  251. */
  252. struct afs_server *afs_get_server(struct afs_server *server,
  253. enum afs_server_trace reason)
  254. {
  255. unsigned int a;
  256. int r;
  257. __refcount_inc(&server->ref, &r);
  258. a = atomic_read(&server->active);
  259. trace_afs_server(server->debug_id, r + 1, a, reason);
  260. return server;
  261. }
  262. /*
  263. * Get an active count on a server object and maybe remove from the inactive
  264. * list.
  265. */
  266. struct afs_server *afs_use_server(struct afs_server *server, bool activate,
  267. enum afs_server_trace reason)
  268. {
  269. unsigned int a;
  270. int r;
  271. __refcount_inc(&server->ref, &r);
  272. a = atomic_inc_return(&server->active);
  273. if (a == 1 && activate &&
  274. !test_bit(AFS_SERVER_FL_EXPIRED, &server->flags))
  275. timer_delete(&server->timer);
  276. trace_afs_server(server->debug_id, r + 1, a, reason);
  277. return server;
  278. }
  279. /*
  280. * Release a reference on a server record.
  281. */
  282. void afs_put_server(struct afs_net *net, struct afs_server *server,
  283. enum afs_server_trace reason)
  284. {
  285. unsigned int a, debug_id;
  286. bool zero;
  287. int r;
  288. if (!server)
  289. return;
  290. debug_id = server->debug_id;
  291. a = atomic_read(&server->active);
  292. zero = __refcount_dec_and_test(&server->ref, &r);
  293. trace_afs_server(debug_id, r - 1, a, reason);
  294. if (unlikely(zero))
  295. __afs_put_server(net, server);
  296. }
  297. /*
  298. * Drop an active count on a server object without updating the last-unused
  299. * time.
  300. */
  301. void afs_unuse_server_notime(struct afs_net *net, struct afs_server *server,
  302. enum afs_server_trace reason)
  303. {
  304. if (!server)
  305. return;
  306. if (atomic_dec_and_test(&server->active)) {
  307. if (test_bit(AFS_SERVER_FL_EXPIRED, &server->flags) ||
  308. READ_ONCE(server->cell->state) >= AFS_CELL_REMOVING)
  309. schedule_work(&server->destroyer);
  310. }
  311. afs_put_server(net, server, reason);
  312. }
  313. /*
  314. * Drop an active count on a server object.
  315. */
  316. void afs_unuse_server(struct afs_net *net, struct afs_server *server,
  317. enum afs_server_trace reason)
  318. {
  319. if (!server)
  320. return;
  321. if (atomic_dec_and_test(&server->active)) {
  322. if (!test_bit(AFS_SERVER_FL_EXPIRED, &server->flags) &&
  323. READ_ONCE(server->cell->state) < AFS_CELL_REMOVING) {
  324. time64_t unuse_time = ktime_get_real_seconds();
  325. server->unuse_time = unuse_time;
  326. afs_set_server_timer(server, afs_server_gc_delay);
  327. } else {
  328. schedule_work(&server->destroyer);
  329. }
  330. }
  331. afs_put_server(net, server, reason);
  332. }
  333. static void afs_server_rcu(struct rcu_head *rcu)
  334. {
  335. struct afs_server *server = container_of(rcu, struct afs_server, rcu);
  336. trace_afs_server(server->debug_id, refcount_read(&server->ref),
  337. atomic_read(&server->active), afs_server_trace_free);
  338. afs_put_endpoint_state(rcu_access_pointer(server->endpoint_state),
  339. afs_estate_trace_put_server);
  340. afs_put_cell(server->cell, afs_cell_trace_put_server);
  341. kfree(server->cm_rxgk_appdata.data);
  342. kfree(server);
  343. }
  344. static void __afs_put_server(struct afs_net *net, struct afs_server *server)
  345. {
  346. call_rcu(&server->rcu, afs_server_rcu);
  347. afs_dec_servers_outstanding(net);
  348. }
  349. static void afs_give_up_callbacks(struct afs_net *net, struct afs_server *server)
  350. {
  351. struct afs_endpoint_state *estate = rcu_access_pointer(server->endpoint_state);
  352. struct afs_addr_list *alist = estate->addresses;
  353. afs_fs_give_up_all_callbacks(net, server, &alist->addrs[alist->preferred], NULL);
  354. }
  355. /*
  356. * Check to see if the server record has expired.
  357. */
  358. static bool afs_has_server_expired(const struct afs_server *server)
  359. {
  360. time64_t expires_at;
  361. if (atomic_read(&server->active))
  362. return false;
  363. if (server->cell->net->live ||
  364. server->cell->state >= AFS_CELL_REMOVING) {
  365. trace_afs_server(server->debug_id, refcount_read(&server->ref),
  366. 0, afs_server_trace_purging);
  367. return true;
  368. }
  369. expires_at = server->unuse_time;
  370. if (!test_bit(AFS_SERVER_FL_VL_FAIL, &server->flags) &&
  371. !test_bit(AFS_SERVER_FL_NOT_FOUND, &server->flags))
  372. expires_at += afs_server_gc_delay;
  373. return ktime_get_real_seconds() > expires_at;
  374. }
  375. /*
  376. * Remove a server record from it's parent cell's database.
  377. */
  378. static bool afs_remove_server_from_cell(struct afs_server *server)
  379. {
  380. struct afs_cell *cell = server->cell;
  381. down_write(&cell->fs_lock);
  382. if (!afs_has_server_expired(server)) {
  383. up_write(&cell->fs_lock);
  384. return false;
  385. }
  386. set_bit(AFS_SERVER_FL_EXPIRED, &server->flags);
  387. _debug("expire %pU %u", &server->uuid, atomic_read(&server->active));
  388. afs_see_server(server, afs_server_trace_see_expired);
  389. rb_erase(&server->uuid_rb, &cell->fs_servers);
  390. up_write(&cell->fs_lock);
  391. return true;
  392. }
  393. static void afs_server_destroyer(struct work_struct *work)
  394. {
  395. struct afs_endpoint_state *estate;
  396. struct afs_server *server = container_of(work, struct afs_server, destroyer);
  397. struct afs_net *net = server->cell->net;
  398. afs_see_server(server, afs_server_trace_see_destroyer);
  399. if (test_bit(AFS_SERVER_FL_EXPIRED, &server->flags))
  400. return;
  401. if (!afs_remove_server_from_cell(server))
  402. return;
  403. timer_shutdown_sync(&server->timer);
  404. cancel_work(&server->destroyer);
  405. if (test_bit(AFS_SERVER_FL_MAY_HAVE_CB, &server->flags))
  406. afs_give_up_callbacks(net, server);
  407. /* Unbind the rxrpc_peer records from the server. */
  408. estate = rcu_access_pointer(server->endpoint_state);
  409. if (estate)
  410. afs_set_peer_appdata(server, estate->addresses, NULL);
  411. write_seqlock(&net->fs_lock);
  412. list_del_init(&server->probe_link);
  413. if (!hlist_unhashed(&server->proc_link))
  414. hlist_del_rcu(&server->proc_link);
  415. write_sequnlock(&net->fs_lock);
  416. afs_put_server(net, server, afs_server_trace_destroy);
  417. }
  418. static void afs_server_timer(struct timer_list *timer)
  419. {
  420. struct afs_server *server = container_of(timer, struct afs_server, timer);
  421. afs_see_server(server, afs_server_trace_see_timer);
  422. if (!test_bit(AFS_SERVER_FL_EXPIRED, &server->flags))
  423. schedule_work(&server->destroyer);
  424. }
  425. /*
  426. * Wake up all the servers in a cell so that they can purge themselves.
  427. */
  428. void afs_purge_servers(struct afs_cell *cell)
  429. {
  430. struct afs_server *server;
  431. struct rb_node *rb;
  432. down_read(&cell->fs_lock);
  433. for (rb = rb_first(&cell->fs_servers); rb; rb = rb_next(rb)) {
  434. server = rb_entry(rb, struct afs_server, uuid_rb);
  435. afs_see_server(server, afs_server_trace_see_purge);
  436. schedule_work(&server->destroyer);
  437. }
  438. up_read(&cell->fs_lock);
  439. }
  440. /*
  441. * Wait for outstanding servers.
  442. */
  443. void afs_wait_for_servers(struct afs_net *net)
  444. {
  445. _enter("");
  446. atomic_dec(&net->servers_outstanding);
  447. wait_var_event(&net->servers_outstanding,
  448. !atomic_read(&net->servers_outstanding));
  449. _leave("");
  450. }
  451. /*
  452. * Get an update for a server's address list.
  453. */
  454. static noinline bool afs_update_server_record(struct afs_operation *op,
  455. struct afs_server *server,
  456. struct key *key)
  457. {
  458. struct afs_endpoint_state *estate;
  459. struct afs_addr_list *alist;
  460. bool has_addrs;
  461. _enter("");
  462. trace_afs_server(server->debug_id, refcount_read(&server->ref),
  463. atomic_read(&server->active),
  464. afs_server_trace_update);
  465. alist = afs_vl_lookup_addrs(server, op->key);
  466. if (IS_ERR(alist)) {
  467. rcu_read_lock();
  468. estate = rcu_dereference(server->endpoint_state);
  469. has_addrs = estate->addresses;
  470. rcu_read_unlock();
  471. if ((PTR_ERR(alist) == -ERESTARTSYS ||
  472. PTR_ERR(alist) == -EINTR) &&
  473. (op->flags & AFS_OPERATION_UNINTR) &&
  474. has_addrs) {
  475. _leave(" = t [intr]");
  476. return true;
  477. }
  478. afs_op_set_error(op, PTR_ERR(alist));
  479. _leave(" = f [%d]", afs_op_error(op));
  480. return false;
  481. }
  482. if (server->addr_version != alist->version)
  483. afs_fs_probe_fileserver(op->net, server, alist, key);
  484. afs_put_addrlist(alist, afs_alist_trace_put_server_update);
  485. _leave(" = t");
  486. return true;
  487. }
  488. /*
  489. * See if a server's address list needs updating.
  490. */
  491. bool afs_check_server_record(struct afs_operation *op, struct afs_server *server,
  492. struct key *key)
  493. {
  494. bool success;
  495. int ret, retries = 0;
  496. _enter("");
  497. ASSERT(server);
  498. retry:
  499. if (test_bit(AFS_SERVER_FL_UPDATING, &server->flags))
  500. goto wait;
  501. if (test_bit(AFS_SERVER_FL_NEEDS_UPDATE, &server->flags))
  502. goto update;
  503. _leave(" = t [good]");
  504. return true;
  505. update:
  506. if (!test_and_set_bit_lock(AFS_SERVER_FL_UPDATING, &server->flags)) {
  507. clear_bit(AFS_SERVER_FL_NEEDS_UPDATE, &server->flags);
  508. success = afs_update_server_record(op, server, key);
  509. clear_bit_unlock(AFS_SERVER_FL_UPDATING, &server->flags);
  510. wake_up_bit(&server->flags, AFS_SERVER_FL_UPDATING);
  511. _leave(" = %d", success);
  512. return success;
  513. }
  514. wait:
  515. ret = wait_on_bit(&server->flags, AFS_SERVER_FL_UPDATING,
  516. (op->flags & AFS_OPERATION_UNINTR) ?
  517. TASK_UNINTERRUPTIBLE : TASK_INTERRUPTIBLE);
  518. if (ret == -ERESTARTSYS) {
  519. afs_op_set_error(op, ret);
  520. _leave(" = f [intr]");
  521. return false;
  522. }
  523. retries++;
  524. if (retries == 4) {
  525. _leave(" = f [stale]");
  526. ret = -ESTALE;
  527. return false;
  528. }
  529. goto retry;
  530. }