GNU Linux-libre 6.8.9-gnu
[releases.git] / fs / cachefiles / ondemand.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 #include <linux/fdtable.h>
3 #include <linux/anon_inodes.h>
4 #include <linux/uio.h>
5 #include "internal.h"
6
7 static int cachefiles_ondemand_fd_release(struct inode *inode,
8                                           struct file *file)
9 {
10         struct cachefiles_object *object = file->private_data;
11         struct cachefiles_cache *cache = object->volume->cache;
12         struct cachefiles_ondemand_info *info = object->ondemand;
13         int object_id = info->ondemand_id;
14         struct cachefiles_req *req;
15         XA_STATE(xas, &cache->reqs, 0);
16
17         xa_lock(&cache->reqs);
18         info->ondemand_id = CACHEFILES_ONDEMAND_ID_CLOSED;
19         cachefiles_ondemand_set_object_close(object);
20
21         /* Only flush CACHEFILES_REQ_NEW marked req to avoid race with daemon_read */
22         xas_for_each_marked(&xas, req, ULONG_MAX, CACHEFILES_REQ_NEW) {
23                 if (req->msg.object_id == object_id &&
24                     req->msg.opcode == CACHEFILES_OP_CLOSE) {
25                         complete(&req->done);
26                         xas_store(&xas, NULL);
27                 }
28         }
29         xa_unlock(&cache->reqs);
30
31         xa_erase(&cache->ondemand_ids, object_id);
32         trace_cachefiles_ondemand_fd_release(object, object_id);
33         cachefiles_put_object(object, cachefiles_obj_put_ondemand_fd);
34         cachefiles_put_unbind_pincount(cache);
35         return 0;
36 }
37
38 static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,
39                                                  struct iov_iter *iter)
40 {
41         struct cachefiles_object *object = kiocb->ki_filp->private_data;
42         struct cachefiles_cache *cache = object->volume->cache;
43         struct file *file = object->file;
44         size_t len = iter->count;
45         loff_t pos = kiocb->ki_pos;
46         const struct cred *saved_cred;
47         int ret;
48
49         if (!file)
50                 return -ENOBUFS;
51
52         cachefiles_begin_secure(cache, &saved_cred);
53         ret = __cachefiles_prepare_write(object, file, &pos, &len, len, true);
54         cachefiles_end_secure(cache, saved_cred);
55         if (ret < 0)
56                 return ret;
57
58         trace_cachefiles_ondemand_fd_write(object, file_inode(file), pos, len);
59         ret = __cachefiles_write(object, file, pos, iter, NULL, NULL);
60         if (!ret)
61                 ret = len;
62
63         return ret;
64 }
65
66 static loff_t cachefiles_ondemand_fd_llseek(struct file *filp, loff_t pos,
67                                             int whence)
68 {
69         struct cachefiles_object *object = filp->private_data;
70         struct file *file = object->file;
71
72         if (!file)
73                 return -ENOBUFS;
74
75         return vfs_llseek(file, pos, whence);
76 }
77
78 static long cachefiles_ondemand_fd_ioctl(struct file *filp, unsigned int ioctl,
79                                          unsigned long arg)
80 {
81         struct cachefiles_object *object = filp->private_data;
82         struct cachefiles_cache *cache = object->volume->cache;
83         struct cachefiles_req *req;
84         unsigned long id;
85
86         if (ioctl != CACHEFILES_IOC_READ_COMPLETE)
87                 return -EINVAL;
88
89         if (!test_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags))
90                 return -EOPNOTSUPP;
91
92         id = arg;
93         req = xa_erase(&cache->reqs, id);
94         if (!req)
95                 return -EINVAL;
96
97         trace_cachefiles_ondemand_cread(object, id);
98         complete(&req->done);
99         return 0;
100 }
101
102 static const struct file_operations cachefiles_ondemand_fd_fops = {
103         .owner          = THIS_MODULE,
104         .release        = cachefiles_ondemand_fd_release,
105         .write_iter     = cachefiles_ondemand_fd_write_iter,
106         .llseek         = cachefiles_ondemand_fd_llseek,
107         .unlocked_ioctl = cachefiles_ondemand_fd_ioctl,
108 };
109
110 /*
111  * OPEN request Completion (copen)
112  * - command: "copen <id>,<cache_size>"
113  *   <cache_size> indicates the object size if >=0, error code if negative
114  */
115 int cachefiles_ondemand_copen(struct cachefiles_cache *cache, char *args)
116 {
117         struct cachefiles_req *req;
118         struct fscache_cookie *cookie;
119         char *pid, *psize;
120         unsigned long id;
121         long size;
122         int ret;
123
124         if (!test_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags))
125                 return -EOPNOTSUPP;
126
127         if (!*args) {
128                 pr_err("Empty id specified\n");
129                 return -EINVAL;
130         }
131
132         pid = args;
133         psize = strchr(args, ',');
134         if (!psize) {
135                 pr_err("Cache size is not specified\n");
136                 return -EINVAL;
137         }
138
139         *psize = 0;
140         psize++;
141
142         ret = kstrtoul(pid, 0, &id);
143         if (ret)
144                 return ret;
145
146         req = xa_erase(&cache->reqs, id);
147         if (!req)
148                 return -EINVAL;
149
150         /* fail OPEN request if copen format is invalid */
151         ret = kstrtol(psize, 0, &size);
152         if (ret) {
153                 req->error = ret;
154                 goto out;
155         }
156
157         /* fail OPEN request if daemon reports an error */
158         if (size < 0) {
159                 if (!IS_ERR_VALUE(size)) {
160                         req->error = -EINVAL;
161                         ret = -EINVAL;
162                 } else {
163                         req->error = size;
164                         ret = 0;
165                 }
166                 goto out;
167         }
168
169         cookie = req->object->cookie;
170         cookie->object_size = size;
171         if (size)
172                 clear_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
173         else
174                 set_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
175         trace_cachefiles_ondemand_copen(req->object, id, size);
176
177         cachefiles_ondemand_set_object_open(req->object);
178         wake_up_all(&cache->daemon_pollwq);
179
180 out:
181         complete(&req->done);
182         return ret;
183 }
184
185 int cachefiles_ondemand_restore(struct cachefiles_cache *cache, char *args)
186 {
187         struct cachefiles_req *req;
188
189         XA_STATE(xas, &cache->reqs, 0);
190
191         if (!test_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags))
192                 return -EOPNOTSUPP;
193
194         /*
195          * Reset the requests to CACHEFILES_REQ_NEW state, so that the
196          * requests have been processed halfway before the crash of the
197          * user daemon could be reprocessed after the recovery.
198          */
199         xas_lock(&xas);
200         xas_for_each(&xas, req, ULONG_MAX)
201                 xas_set_mark(&xas, CACHEFILES_REQ_NEW);
202         xas_unlock(&xas);
203
204         wake_up_all(&cache->daemon_pollwq);
205         return 0;
206 }
207
208 static int cachefiles_ondemand_get_fd(struct cachefiles_req *req)
209 {
210         struct cachefiles_object *object;
211         struct cachefiles_cache *cache;
212         struct cachefiles_open *load;
213         struct file *file;
214         u32 object_id;
215         int ret, fd;
216
217         object = cachefiles_grab_object(req->object,
218                         cachefiles_obj_get_ondemand_fd);
219         cache = object->volume->cache;
220
221         ret = xa_alloc_cyclic(&cache->ondemand_ids, &object_id, NULL,
222                               XA_LIMIT(1, INT_MAX),
223                               &cache->ondemand_id_next, GFP_KERNEL);
224         if (ret < 0)
225                 goto err;
226
227         fd = get_unused_fd_flags(O_WRONLY);
228         if (fd < 0) {
229                 ret = fd;
230                 goto err_free_id;
231         }
232
233         file = anon_inode_getfile("[cachefiles]", &cachefiles_ondemand_fd_fops,
234                                   object, O_WRONLY);
235         if (IS_ERR(file)) {
236                 ret = PTR_ERR(file);
237                 goto err_put_fd;
238         }
239
240         file->f_mode |= FMODE_PWRITE | FMODE_LSEEK;
241         fd_install(fd, file);
242
243         load = (void *)req->msg.data;
244         load->fd = fd;
245         object->ondemand->ondemand_id = object_id;
246
247         cachefiles_get_unbind_pincount(cache);
248         trace_cachefiles_ondemand_open(object, &req->msg, load);
249         return 0;
250
251 err_put_fd:
252         put_unused_fd(fd);
253 err_free_id:
254         xa_erase(&cache->ondemand_ids, object_id);
255 err:
256         cachefiles_put_object(object, cachefiles_obj_put_ondemand_fd);
257         return ret;
258 }
259
260 static void ondemand_object_worker(struct work_struct *work)
261 {
262         struct cachefiles_ondemand_info *info =
263                 container_of(work, struct cachefiles_ondemand_info, ondemand_work);
264
265         cachefiles_ondemand_init_object(info->object);
266 }
267
268 /*
269  * If there are any inflight or subsequent READ requests on the
270  * closed object, reopen it.
271  * Skip read requests whose related object is reopening.
272  */
273 static struct cachefiles_req *cachefiles_ondemand_select_req(struct xa_state *xas,
274                                                               unsigned long xa_max)
275 {
276         struct cachefiles_req *req;
277         struct cachefiles_object *object;
278         struct cachefiles_ondemand_info *info;
279
280         xas_for_each_marked(xas, req, xa_max, CACHEFILES_REQ_NEW) {
281                 if (req->msg.opcode != CACHEFILES_OP_READ)
282                         return req;
283                 object = req->object;
284                 info = object->ondemand;
285                 if (cachefiles_ondemand_object_is_close(object)) {
286                         cachefiles_ondemand_set_object_reopening(object);
287                         queue_work(fscache_wq, &info->ondemand_work);
288                         continue;
289                 }
290                 if (cachefiles_ondemand_object_is_reopening(object))
291                         continue;
292                 return req;
293         }
294         return NULL;
295 }
296
297 ssize_t cachefiles_ondemand_daemon_read(struct cachefiles_cache *cache,
298                                         char __user *_buffer, size_t buflen)
299 {
300         struct cachefiles_req *req;
301         struct cachefiles_msg *msg;
302         unsigned long id = 0;
303         size_t n;
304         int ret = 0;
305         XA_STATE(xas, &cache->reqs, cache->req_id_next);
306
307         xa_lock(&cache->reqs);
308         /*
309          * Cyclically search for a request that has not ever been processed,
310          * to prevent requests from being processed repeatedly, and make
311          * request distribution fair.
312          */
313         req = cachefiles_ondemand_select_req(&xas, ULONG_MAX);
314         if (!req && cache->req_id_next > 0) {
315                 xas_set(&xas, 0);
316                 req = cachefiles_ondemand_select_req(&xas, cache->req_id_next - 1);
317         }
318         if (!req) {
319                 xa_unlock(&cache->reqs);
320                 return 0;
321         }
322
323         msg = &req->msg;
324         n = msg->len;
325
326         if (n > buflen) {
327                 xa_unlock(&cache->reqs);
328                 return -EMSGSIZE;
329         }
330
331         xas_clear_mark(&xas, CACHEFILES_REQ_NEW);
332         cache->req_id_next = xas.xa_index + 1;
333         xa_unlock(&cache->reqs);
334
335         id = xas.xa_index;
336
337         if (msg->opcode == CACHEFILES_OP_OPEN) {
338                 ret = cachefiles_ondemand_get_fd(req);
339                 if (ret) {
340                         cachefiles_ondemand_set_object_close(req->object);
341                         goto error;
342                 }
343         }
344
345         msg->msg_id = id;
346         msg->object_id = req->object->ondemand->ondemand_id;
347
348         if (copy_to_user(_buffer, msg, n) != 0) {
349                 ret = -EFAULT;
350                 goto err_put_fd;
351         }
352
353         /* CLOSE request has no reply */
354         if (msg->opcode == CACHEFILES_OP_CLOSE) {
355                 xa_erase(&cache->reqs, id);
356                 complete(&req->done);
357         }
358
359         return n;
360
361 err_put_fd:
362         if (msg->opcode == CACHEFILES_OP_OPEN)
363                 close_fd(((struct cachefiles_open *)msg->data)->fd);
364 error:
365         xa_erase(&cache->reqs, id);
366         req->error = ret;
367         complete(&req->done);
368         return ret;
369 }
370
371 typedef int (*init_req_fn)(struct cachefiles_req *req, void *private);
372
373 static int cachefiles_ondemand_send_req(struct cachefiles_object *object,
374                                         enum cachefiles_opcode opcode,
375                                         size_t data_len,
376                                         init_req_fn init_req,
377                                         void *private)
378 {
379         struct cachefiles_cache *cache = object->volume->cache;
380         struct cachefiles_req *req = NULL;
381         XA_STATE(xas, &cache->reqs, 0);
382         int ret;
383
384         if (!test_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags))
385                 return 0;
386
387         if (test_bit(CACHEFILES_DEAD, &cache->flags)) {
388                 ret = -EIO;
389                 goto out;
390         }
391
392         req = kzalloc(sizeof(*req) + data_len, GFP_KERNEL);
393         if (!req) {
394                 ret = -ENOMEM;
395                 goto out;
396         }
397
398         req->object = object;
399         init_completion(&req->done);
400         req->msg.opcode = opcode;
401         req->msg.len = sizeof(struct cachefiles_msg) + data_len;
402
403         ret = init_req(req, private);
404         if (ret)
405                 goto out;
406
407         do {
408                 /*
409                  * Stop enqueuing the request when daemon is dying. The
410                  * following two operations need to be atomic as a whole.
411                  *   1) check cache state, and
412                  *   2) enqueue request if cache is alive.
413                  * Otherwise the request may be enqueued after xarray has been
414                  * flushed, leaving the orphan request never being completed.
415                  *
416                  * CPU 1                        CPU 2
417                  * =====                        =====
418                  *                              test CACHEFILES_DEAD bit
419                  * set CACHEFILES_DEAD bit
420                  * flush requests in the xarray
421                  *                              enqueue the request
422                  */
423                 xas_lock(&xas);
424
425                 if (test_bit(CACHEFILES_DEAD, &cache->flags)) {
426                         xas_unlock(&xas);
427                         ret = -EIO;
428                         goto out;
429                 }
430
431                 /* coupled with the barrier in cachefiles_flush_reqs() */
432                 smp_mb();
433
434                 if (opcode == CACHEFILES_OP_CLOSE &&
435                         !cachefiles_ondemand_object_is_open(object)) {
436                         WARN_ON_ONCE(object->ondemand->ondemand_id == 0);
437                         xas_unlock(&xas);
438                         ret = -EIO;
439                         goto out;
440                 }
441
442                 xas.xa_index = 0;
443                 xas_find_marked(&xas, UINT_MAX, XA_FREE_MARK);
444                 if (xas.xa_node == XAS_RESTART)
445                         xas_set_err(&xas, -EBUSY);
446                 xas_store(&xas, req);
447                 xas_clear_mark(&xas, XA_FREE_MARK);
448                 xas_set_mark(&xas, CACHEFILES_REQ_NEW);
449                 xas_unlock(&xas);
450         } while (xas_nomem(&xas, GFP_KERNEL));
451
452         ret = xas_error(&xas);
453         if (ret)
454                 goto out;
455
456         wake_up_all(&cache->daemon_pollwq);
457         wait_for_completion(&req->done);
458         ret = req->error;
459         kfree(req);
460         return ret;
461 out:
462         /* Reset the object to close state in error handling path.
463          * If error occurs after creating the anonymous fd,
464          * cachefiles_ondemand_fd_release() will set object to close.
465          */
466         if (opcode == CACHEFILES_OP_OPEN)
467                 cachefiles_ondemand_set_object_close(object);
468         kfree(req);
469         return ret;
470 }
471
472 static int cachefiles_ondemand_init_open_req(struct cachefiles_req *req,
473                                              void *private)
474 {
475         struct cachefiles_object *object = req->object;
476         struct fscache_cookie *cookie = object->cookie;
477         struct fscache_volume *volume = object->volume->vcookie;
478         struct cachefiles_open *load = (void *)req->msg.data;
479         size_t volume_key_size, cookie_key_size;
480         void *volume_key, *cookie_key;
481
482         /*
483          * Volume key is a NUL-terminated string. key[0] stores strlen() of the
484          * string, followed by the content of the string (excluding '\0').
485          */
486         volume_key_size = volume->key[0] + 1;
487         volume_key = volume->key + 1;
488
489         /* Cookie key is binary data, which is netfs specific. */
490         cookie_key_size = cookie->key_len;
491         cookie_key = fscache_get_key(cookie);
492
493         if (!(object->cookie->advice & FSCACHE_ADV_WANT_CACHE_SIZE)) {
494                 pr_err("WANT_CACHE_SIZE is needed for on-demand mode\n");
495                 return -EINVAL;
496         }
497
498         load->volume_key_size = volume_key_size;
499         load->cookie_key_size = cookie_key_size;
500         memcpy(load->data, volume_key, volume_key_size);
501         memcpy(load->data + volume_key_size, cookie_key, cookie_key_size);
502
503         return 0;
504 }
505
506 static int cachefiles_ondemand_init_close_req(struct cachefiles_req *req,
507                                               void *private)
508 {
509         struct cachefiles_object *object = req->object;
510
511         if (!cachefiles_ondemand_object_is_open(object))
512                 return -ENOENT;
513
514         trace_cachefiles_ondemand_close(object, &req->msg);
515         return 0;
516 }
517
518 struct cachefiles_read_ctx {
519         loff_t off;
520         size_t len;
521 };
522
523 static int cachefiles_ondemand_init_read_req(struct cachefiles_req *req,
524                                              void *private)
525 {
526         struct cachefiles_object *object = req->object;
527         struct cachefiles_read *load = (void *)req->msg.data;
528         struct cachefiles_read_ctx *read_ctx = private;
529
530         load->off = read_ctx->off;
531         load->len = read_ctx->len;
532         trace_cachefiles_ondemand_read(object, &req->msg, load);
533         return 0;
534 }
535
536 int cachefiles_ondemand_init_object(struct cachefiles_object *object)
537 {
538         struct fscache_cookie *cookie = object->cookie;
539         struct fscache_volume *volume = object->volume->vcookie;
540         size_t volume_key_size, cookie_key_size, data_len;
541
542         if (!object->ondemand)
543                 return 0;
544
545         /*
546          * CacheFiles will firstly check the cache file under the root cache
547          * directory. If the coherency check failed, it will fallback to
548          * creating a new tmpfile as the cache file. Reuse the previously
549          * allocated object ID if any.
550          */
551         if (cachefiles_ondemand_object_is_open(object))
552                 return 0;
553
554         volume_key_size = volume->key[0] + 1;
555         cookie_key_size = cookie->key_len;
556         data_len = sizeof(struct cachefiles_open) +
557                    volume_key_size + cookie_key_size;
558
559         return cachefiles_ondemand_send_req(object, CACHEFILES_OP_OPEN,
560                         data_len, cachefiles_ondemand_init_open_req, NULL);
561 }
562
563 void cachefiles_ondemand_clean_object(struct cachefiles_object *object)
564 {
565         cachefiles_ondemand_send_req(object, CACHEFILES_OP_CLOSE, 0,
566                         cachefiles_ondemand_init_close_req, NULL);
567 }
568
569 int cachefiles_ondemand_init_obj_info(struct cachefiles_object *object,
570                                 struct cachefiles_volume *volume)
571 {
572         if (!cachefiles_in_ondemand_mode(volume->cache))
573                 return 0;
574
575         object->ondemand = kzalloc(sizeof(struct cachefiles_ondemand_info),
576                                         GFP_KERNEL);
577         if (!object->ondemand)
578                 return -ENOMEM;
579
580         object->ondemand->object = object;
581         INIT_WORK(&object->ondemand->ondemand_work, ondemand_object_worker);
582         return 0;
583 }
584
585 void cachefiles_ondemand_deinit_obj_info(struct cachefiles_object *object)
586 {
587         kfree(object->ondemand);
588         object->ondemand = NULL;
589 }
590
591 int cachefiles_ondemand_read(struct cachefiles_object *object,
592                              loff_t pos, size_t len)
593 {
594         struct cachefiles_read_ctx read_ctx = {pos, len};
595
596         return cachefiles_ondemand_send_req(object, CACHEFILES_OP_READ,
597                         sizeof(struct cachefiles_read),
598                         cachefiles_ondemand_init_read_req, &read_ctx);
599 }