lkdtm/heap: Hide allocation size from -Warray-bounds
[linux-2.6-microblaze.git] / fs / cachefiles / namei.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* CacheFiles path walking and related routines
3  *
4  * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
5  * Written by David Howells (dhowells@redhat.com)
6  */
7
8 #include <linux/fs.h>
9 #include <linux/namei.h>
10 #include "internal.h"
11
12 /*
13  * Mark the backing file as being a cache file if it's not already in use.  The
14  * mark tells the culling request command that it's not allowed to cull the
15  * file or directory.  The caller must hold the inode lock.
16  */
17 static bool __cachefiles_mark_inode_in_use(struct cachefiles_object *object,
18                                            struct dentry *dentry)
19 {
20         struct inode *inode = d_backing_inode(dentry);
21         bool can_use = false;
22
23         if (!(inode->i_flags & S_KERNEL_FILE)) {
24                 inode->i_flags |= S_KERNEL_FILE;
25                 trace_cachefiles_mark_active(object, inode);
26                 can_use = true;
27         } else {
28                 trace_cachefiles_mark_failed(object, inode);
29                 pr_notice("cachefiles: Inode already in use: %pd (B=%lx)\n",
30                           dentry, inode->i_ino);
31         }
32
33         return can_use;
34 }
35
36 static bool cachefiles_mark_inode_in_use(struct cachefiles_object *object,
37                                          struct dentry *dentry)
38 {
39         struct inode *inode = d_backing_inode(dentry);
40         bool can_use;
41
42         inode_lock(inode);
43         can_use = __cachefiles_mark_inode_in_use(object, dentry);
44         inode_unlock(inode);
45         return can_use;
46 }
47
48 /*
49  * Unmark a backing inode.  The caller must hold the inode lock.
50  */
51 static void __cachefiles_unmark_inode_in_use(struct cachefiles_object *object,
52                                              struct dentry *dentry)
53 {
54         struct inode *inode = d_backing_inode(dentry);
55
56         inode->i_flags &= ~S_KERNEL_FILE;
57         trace_cachefiles_mark_inactive(object, inode);
58 }
59
60 /*
61  * Unmark a backing inode and tell cachefilesd that there's something that can
62  * be culled.
63  */
64 void cachefiles_unmark_inode_in_use(struct cachefiles_object *object,
65                                     struct file *file)
66 {
67         struct cachefiles_cache *cache = object->volume->cache;
68         struct inode *inode = file_inode(file);
69
70         if (inode) {
71                 inode_lock(inode);
72                 __cachefiles_unmark_inode_in_use(object, file->f_path.dentry);
73                 inode_unlock(inode);
74
75                 if (!test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags)) {
76                         atomic_long_add(inode->i_blocks, &cache->b_released);
77                         if (atomic_inc_return(&cache->f_released))
78                                 cachefiles_state_changed(cache);
79                 }
80         }
81 }
82
83 /*
84  * get a subdirectory
85  */
86 struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
87                                         struct dentry *dir,
88                                         const char *dirname,
89                                         bool *_is_new)
90 {
91         struct dentry *subdir;
92         struct path path;
93         int ret;
94
95         _enter(",,%s", dirname);
96
97         /* search the current directory for the element name */
98         inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
99
100 retry:
101         ret = cachefiles_inject_read_error();
102         if (ret == 0)
103                 subdir = lookup_one_len(dirname, dir, strlen(dirname));
104         else
105                 subdir = ERR_PTR(ret);
106         trace_cachefiles_lookup(NULL, dir, subdir);
107         if (IS_ERR(subdir)) {
108                 trace_cachefiles_vfs_error(NULL, d_backing_inode(dir),
109                                            PTR_ERR(subdir),
110                                            cachefiles_trace_lookup_error);
111                 if (PTR_ERR(subdir) == -ENOMEM)
112                         goto nomem_d_alloc;
113                 goto lookup_error;
114         }
115
116         _debug("subdir -> %pd %s",
117                subdir, d_backing_inode(subdir) ? "positive" : "negative");
118
119         /* we need to create the subdir if it doesn't exist yet */
120         if (d_is_negative(subdir)) {
121                 ret = cachefiles_has_space(cache, 1, 0,
122                                            cachefiles_has_space_for_create);
123                 if (ret < 0)
124                         goto mkdir_error;
125
126                 _debug("attempt mkdir");
127
128                 path.mnt = cache->mnt;
129                 path.dentry = dir;
130                 ret = security_path_mkdir(&path, subdir, 0700);
131                 if (ret < 0)
132                         goto mkdir_error;
133                 ret = cachefiles_inject_write_error();
134                 if (ret == 0)
135                         ret = vfs_mkdir(&init_user_ns, d_inode(dir), subdir, 0700);
136                 if (ret < 0) {
137                         trace_cachefiles_vfs_error(NULL, d_inode(dir), ret,
138                                                    cachefiles_trace_mkdir_error);
139                         goto mkdir_error;
140                 }
141                 trace_cachefiles_mkdir(dir, subdir);
142
143                 if (unlikely(d_unhashed(subdir))) {
144                         cachefiles_put_directory(subdir);
145                         goto retry;
146                 }
147                 ASSERT(d_backing_inode(subdir));
148
149                 _debug("mkdir -> %pd{ino=%lu}",
150                        subdir, d_backing_inode(subdir)->i_ino);
151                 if (_is_new)
152                         *_is_new = true;
153         }
154
155         /* Tell rmdir() it's not allowed to delete the subdir */
156         inode_lock(d_inode(subdir));
157         inode_unlock(d_inode(dir));
158
159         if (!__cachefiles_mark_inode_in_use(NULL, subdir))
160                 goto mark_error;
161
162         inode_unlock(d_inode(subdir));
163
164         /* we need to make sure the subdir is a directory */
165         ASSERT(d_backing_inode(subdir));
166
167         if (!d_can_lookup(subdir)) {
168                 pr_err("%s is not a directory\n", dirname);
169                 ret = -EIO;
170                 goto check_error;
171         }
172
173         ret = -EPERM;
174         if (!(d_backing_inode(subdir)->i_opflags & IOP_XATTR) ||
175             !d_backing_inode(subdir)->i_op->lookup ||
176             !d_backing_inode(subdir)->i_op->mkdir ||
177             !d_backing_inode(subdir)->i_op->rename ||
178             !d_backing_inode(subdir)->i_op->rmdir ||
179             !d_backing_inode(subdir)->i_op->unlink)
180                 goto check_error;
181
182         _leave(" = [%lu]", d_backing_inode(subdir)->i_ino);
183         return subdir;
184
185 check_error:
186         cachefiles_put_directory(subdir);
187         _leave(" = %d [check]", ret);
188         return ERR_PTR(ret);
189
190 mark_error:
191         inode_unlock(d_inode(subdir));
192         dput(subdir);
193         return ERR_PTR(-EBUSY);
194
195 mkdir_error:
196         inode_unlock(d_inode(dir));
197         dput(subdir);
198         pr_err("mkdir %s failed with error %d\n", dirname, ret);
199         return ERR_PTR(ret);
200
201 lookup_error:
202         inode_unlock(d_inode(dir));
203         ret = PTR_ERR(subdir);
204         pr_err("Lookup %s failed with error %d\n", dirname, ret);
205         return ERR_PTR(ret);
206
207 nomem_d_alloc:
208         inode_unlock(d_inode(dir));
209         _leave(" = -ENOMEM");
210         return ERR_PTR(-ENOMEM);
211 }
212
213 /*
214  * Put a subdirectory.
215  */
216 void cachefiles_put_directory(struct dentry *dir)
217 {
218         if (dir) {
219                 inode_lock(dir->d_inode);
220                 __cachefiles_unmark_inode_in_use(NULL, dir);
221                 inode_unlock(dir->d_inode);
222                 dput(dir);
223         }
224 }
225
226 /*
227  * Remove a regular file from the cache.
228  */
229 static int cachefiles_unlink(struct cachefiles_cache *cache,
230                              struct cachefiles_object *object,
231                              struct dentry *dir, struct dentry *dentry,
232                              enum fscache_why_object_killed why)
233 {
234         struct path path = {
235                 .mnt    = cache->mnt,
236                 .dentry = dir,
237         };
238         int ret;
239
240         trace_cachefiles_unlink(object, d_inode(dentry)->i_ino, why);
241         ret = security_path_unlink(&path, dentry);
242         if (ret < 0) {
243                 cachefiles_io_error(cache, "Unlink security error");
244                 return ret;
245         }
246
247         ret = cachefiles_inject_remove_error();
248         if (ret == 0) {
249                 ret = vfs_unlink(&init_user_ns, d_backing_inode(dir), dentry, NULL);
250                 if (ret == -EIO)
251                         cachefiles_io_error(cache, "Unlink failed");
252         }
253         if (ret != 0)
254                 trace_cachefiles_vfs_error(object, d_backing_inode(dir), ret,
255                                            cachefiles_trace_unlink_error);
256         return ret;
257 }
258
259 /*
260  * Delete an object representation from the cache
261  * - File backed objects are unlinked
262  * - Directory backed objects are stuffed into the graveyard for userspace to
263  *   delete
264  */
265 int cachefiles_bury_object(struct cachefiles_cache *cache,
266                            struct cachefiles_object *object,
267                            struct dentry *dir,
268                            struct dentry *rep,
269                            enum fscache_why_object_killed why)
270 {
271         struct dentry *grave, *trap;
272         struct path path, path_to_graveyard;
273         char nbuffer[8 + 8 + 1];
274         int ret;
275
276         _enter(",'%pd','%pd'", dir, rep);
277
278         if (rep->d_parent != dir) {
279                 inode_unlock(d_inode(dir));
280                 _leave(" = -ESTALE");
281                 return -ESTALE;
282         }
283
284         /* non-directories can just be unlinked */
285         if (!d_is_dir(rep)) {
286                 dget(rep); /* Stop the dentry being negated if it's only pinned
287                             * by a file struct.
288                             */
289                 ret = cachefiles_unlink(cache, object, dir, rep, why);
290                 dput(rep);
291
292                 inode_unlock(d_inode(dir));
293                 _leave(" = %d", ret);
294                 return ret;
295         }
296
297         /* directories have to be moved to the graveyard */
298         _debug("move stale object to graveyard");
299         inode_unlock(d_inode(dir));
300
301 try_again:
302         /* first step is to make up a grave dentry in the graveyard */
303         sprintf(nbuffer, "%08x%08x",
304                 (uint32_t) ktime_get_real_seconds(),
305                 (uint32_t) atomic_inc_return(&cache->gravecounter));
306
307         /* do the multiway lock magic */
308         trap = lock_rename(cache->graveyard, dir);
309
310         /* do some checks before getting the grave dentry */
311         if (rep->d_parent != dir || IS_DEADDIR(d_inode(rep))) {
312                 /* the entry was probably culled when we dropped the parent dir
313                  * lock */
314                 unlock_rename(cache->graveyard, dir);
315                 _leave(" = 0 [culled?]");
316                 return 0;
317         }
318
319         if (!d_can_lookup(cache->graveyard)) {
320                 unlock_rename(cache->graveyard, dir);
321                 cachefiles_io_error(cache, "Graveyard no longer a directory");
322                 return -EIO;
323         }
324
325         if (trap == rep) {
326                 unlock_rename(cache->graveyard, dir);
327                 cachefiles_io_error(cache, "May not make directory loop");
328                 return -EIO;
329         }
330
331         if (d_mountpoint(rep)) {
332                 unlock_rename(cache->graveyard, dir);
333                 cachefiles_io_error(cache, "Mountpoint in cache");
334                 return -EIO;
335         }
336
337         grave = lookup_one_len(nbuffer, cache->graveyard, strlen(nbuffer));
338         if (IS_ERR(grave)) {
339                 unlock_rename(cache->graveyard, dir);
340                 trace_cachefiles_vfs_error(object, d_inode(cache->graveyard),
341                                            PTR_ERR(grave),
342                                            cachefiles_trace_lookup_error);
343
344                 if (PTR_ERR(grave) == -ENOMEM) {
345                         _leave(" = -ENOMEM");
346                         return -ENOMEM;
347                 }
348
349                 cachefiles_io_error(cache, "Lookup error %ld", PTR_ERR(grave));
350                 return -EIO;
351         }
352
353         if (d_is_positive(grave)) {
354                 unlock_rename(cache->graveyard, dir);
355                 dput(grave);
356                 grave = NULL;
357                 cond_resched();
358                 goto try_again;
359         }
360
361         if (d_mountpoint(grave)) {
362                 unlock_rename(cache->graveyard, dir);
363                 dput(grave);
364                 cachefiles_io_error(cache, "Mountpoint in graveyard");
365                 return -EIO;
366         }
367
368         /* target should not be an ancestor of source */
369         if (trap == grave) {
370                 unlock_rename(cache->graveyard, dir);
371                 dput(grave);
372                 cachefiles_io_error(cache, "May not make directory loop");
373                 return -EIO;
374         }
375
376         /* attempt the rename */
377         path.mnt = cache->mnt;
378         path.dentry = dir;
379         path_to_graveyard.mnt = cache->mnt;
380         path_to_graveyard.dentry = cache->graveyard;
381         ret = security_path_rename(&path, rep, &path_to_graveyard, grave, 0);
382         if (ret < 0) {
383                 cachefiles_io_error(cache, "Rename security error %d", ret);
384         } else {
385                 struct renamedata rd = {
386                         .old_mnt_userns = &init_user_ns,
387                         .old_dir        = d_inode(dir),
388                         .old_dentry     = rep,
389                         .new_mnt_userns = &init_user_ns,
390                         .new_dir        = d_inode(cache->graveyard),
391                         .new_dentry     = grave,
392                 };
393                 trace_cachefiles_rename(object, d_inode(rep)->i_ino, why);
394                 ret = cachefiles_inject_read_error();
395                 if (ret == 0)
396                         ret = vfs_rename(&rd);
397                 if (ret != 0)
398                         trace_cachefiles_vfs_error(object, d_inode(dir), ret,
399                                                    cachefiles_trace_rename_error);
400                 if (ret != 0 && ret != -ENOMEM)
401                         cachefiles_io_error(cache,
402                                             "Rename failed with error %d", ret);
403         }
404
405         __cachefiles_unmark_inode_in_use(object, rep);
406         unlock_rename(cache->graveyard, dir);
407         dput(grave);
408         _leave(" = 0");
409         return 0;
410 }
411
412 /*
413  * Delete a cache file.
414  */
415 int cachefiles_delete_object(struct cachefiles_object *object,
416                              enum fscache_why_object_killed why)
417 {
418         struct cachefiles_volume *volume = object->volume;
419         struct dentry *dentry = object->file->f_path.dentry;
420         struct dentry *fan = volume->fanout[(u8)object->cookie->key_hash];
421         int ret;
422
423         _enter(",OBJ%x{%pD}", object->debug_id, object->file);
424
425         /* Stop the dentry being negated if it's only pinned by a file struct. */
426         dget(dentry);
427
428         inode_lock_nested(d_backing_inode(fan), I_MUTEX_PARENT);
429         ret = cachefiles_unlink(volume->cache, object, fan, dentry, why);
430         inode_unlock(d_backing_inode(fan));
431         dput(dentry);
432         return ret;
433 }
434
435 /*
436  * Create a temporary file and leave it unattached and un-xattr'd until the
437  * time comes to discard the object from memory.
438  */
439 struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
440 {
441         struct cachefiles_volume *volume = object->volume;
442         struct cachefiles_cache *cache = volume->cache;
443         const struct cred *saved_cred;
444         struct dentry *fan = volume->fanout[(u8)object->cookie->key_hash];
445         struct file *file;
446         struct path path;
447         uint64_t ni_size = object->cookie->object_size;
448         long ret;
449
450         ni_size = round_up(ni_size, CACHEFILES_DIO_BLOCK_SIZE);
451
452         cachefiles_begin_secure(cache, &saved_cred);
453
454         path.mnt = cache->mnt;
455         ret = cachefiles_inject_write_error();
456         if (ret == 0)
457                 path.dentry = vfs_tmpfile(&init_user_ns, fan, S_IFREG, O_RDWR);
458         else
459                 path.dentry = ERR_PTR(ret);
460         if (IS_ERR(path.dentry)) {
461                 trace_cachefiles_vfs_error(object, d_inode(fan), PTR_ERR(path.dentry),
462                                            cachefiles_trace_tmpfile_error);
463                 if (PTR_ERR(path.dentry) == -EIO)
464                         cachefiles_io_error_obj(object, "Failed to create tmpfile");
465                 file = ERR_CAST(path.dentry);
466                 goto out;
467         }
468
469         trace_cachefiles_tmpfile(object, d_backing_inode(path.dentry));
470
471         if (!cachefiles_mark_inode_in_use(object, path.dentry)) {
472                 file = ERR_PTR(-EBUSY);
473                 goto out_dput;
474         }
475
476         if (ni_size > 0) {
477                 trace_cachefiles_trunc(object, d_backing_inode(path.dentry), 0, ni_size,
478                                        cachefiles_trunc_expand_tmpfile);
479                 ret = cachefiles_inject_write_error();
480                 if (ret == 0)
481                         ret = vfs_truncate(&path, ni_size);
482                 if (ret < 0) {
483                         trace_cachefiles_vfs_error(
484                                 object, d_backing_inode(path.dentry), ret,
485                                 cachefiles_trace_trunc_error);
486                         file = ERR_PTR(ret);
487                         goto out_dput;
488                 }
489         }
490
491         file = open_with_fake_path(&path, O_RDWR | O_LARGEFILE | O_DIRECT,
492                                    d_backing_inode(path.dentry), cache->cache_cred);
493         if (IS_ERR(file)) {
494                 trace_cachefiles_vfs_error(object, d_backing_inode(path.dentry),
495                                            PTR_ERR(file),
496                                            cachefiles_trace_open_error);
497                 goto out_dput;
498         }
499         if (unlikely(!file->f_op->read_iter) ||
500             unlikely(!file->f_op->write_iter)) {
501                 fput(file);
502                 pr_notice("Cache does not support read_iter and write_iter\n");
503                 file = ERR_PTR(-EINVAL);
504         }
505
506 out_dput:
507         dput(path.dentry);
508 out:
509         cachefiles_end_secure(cache, saved_cred);
510         return file;
511 }
512
513 /*
514  * Create a new file.
515  */
516 static bool cachefiles_create_file(struct cachefiles_object *object)
517 {
518         struct file *file;
519         int ret;
520
521         ret = cachefiles_has_space(object->volume->cache, 1, 0,
522                                    cachefiles_has_space_for_create);
523         if (ret < 0)
524                 return false;
525
526         file = cachefiles_create_tmpfile(object);
527         if (IS_ERR(file))
528                 return false;
529
530         set_bit(FSCACHE_COOKIE_NEEDS_UPDATE, &object->cookie->flags);
531         set_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
532         _debug("create -> %pD{ino=%lu}", file, file_inode(file)->i_ino);
533         object->file = file;
534         return true;
535 }
536
537 /*
538  * Open an existing file, checking its attributes and replacing it if it is
539  * stale.
540  */
541 static bool cachefiles_open_file(struct cachefiles_object *object,
542                                  struct dentry *dentry)
543 {
544         struct cachefiles_cache *cache = object->volume->cache;
545         struct file *file;
546         struct path path;
547         int ret;
548
549         _enter("%pd", dentry);
550
551         if (!cachefiles_mark_inode_in_use(object, dentry))
552                 return false;
553
554         /* We need to open a file interface onto a data file now as we can't do
555          * it on demand because writeback called from do_exit() sees
556          * current->fs == NULL - which breaks d_path() called from ext4 open.
557          */
558         path.mnt = cache->mnt;
559         path.dentry = dentry;
560         file = open_with_fake_path(&path, O_RDWR | O_LARGEFILE | O_DIRECT,
561                                    d_backing_inode(dentry), cache->cache_cred);
562         if (IS_ERR(file)) {
563                 trace_cachefiles_vfs_error(object, d_backing_inode(dentry),
564                                            PTR_ERR(file),
565                                            cachefiles_trace_open_error);
566                 goto error;
567         }
568
569         if (unlikely(!file->f_op->read_iter) ||
570             unlikely(!file->f_op->write_iter)) {
571                 pr_notice("Cache does not support read_iter and write_iter\n");
572                 goto error_fput;
573         }
574         _debug("file -> %pd positive", dentry);
575
576         ret = cachefiles_check_auxdata(object, file);
577         if (ret < 0)
578                 goto check_failed;
579
580         object->file = file;
581
582         /* Always update the atime on an object we've just looked up (this is
583          * used to keep track of culling, and atimes are only updated by read,
584          * write and readdir but not lookup or open).
585          */
586         touch_atime(&file->f_path);
587         dput(dentry);
588         return true;
589
590 check_failed:
591         fscache_cookie_lookup_negative(object->cookie);
592         cachefiles_unmark_inode_in_use(object, file);
593         if (ret == -ESTALE) {
594                 fput(file);
595                 dput(dentry);
596                 return cachefiles_create_file(object);
597         }
598 error_fput:
599         fput(file);
600 error:
601         dput(dentry);
602         return false;
603 }
604
605 /*
606  * walk from the parent object to the child object through the backing
607  * filesystem, creating directories as we go
608  */
609 bool cachefiles_look_up_object(struct cachefiles_object *object)
610 {
611         struct cachefiles_volume *volume = object->volume;
612         struct dentry *dentry, *fan = volume->fanout[(u8)object->cookie->key_hash];
613         int ret;
614
615         _enter("OBJ%x,%s,", object->debug_id, object->d_name);
616
617         /* Look up path "cache/vol/fanout/file". */
618         ret = cachefiles_inject_read_error();
619         if (ret == 0)
620                 dentry = lookup_positive_unlocked(object->d_name, fan,
621                                                   object->d_name_len);
622         else
623                 dentry = ERR_PTR(ret);
624         trace_cachefiles_lookup(object, fan, dentry);
625         if (IS_ERR(dentry)) {
626                 if (dentry == ERR_PTR(-ENOENT))
627                         goto new_file;
628                 if (dentry == ERR_PTR(-EIO))
629                         cachefiles_io_error_obj(object, "Lookup failed");
630                 return false;
631         }
632
633         if (!d_is_reg(dentry)) {
634                 pr_err("%pd is not a file\n", dentry);
635                 inode_lock_nested(d_inode(fan), I_MUTEX_PARENT);
636                 ret = cachefiles_bury_object(volume->cache, object, fan, dentry,
637                                              FSCACHE_OBJECT_IS_WEIRD);
638                 dput(dentry);
639                 if (ret < 0)
640                         return false;
641                 goto new_file;
642         }
643
644         if (!cachefiles_open_file(object, dentry))
645                 return false;
646
647         _leave(" = t [%lu]", file_inode(object->file)->i_ino);
648         return true;
649
650 new_file:
651         fscache_cookie_lookup_negative(object->cookie);
652         return cachefiles_create_file(object);
653 }
654
655 /*
656  * Attempt to link a temporary file into its rightful place in the cache.
657  */
658 bool cachefiles_commit_tmpfile(struct cachefiles_cache *cache,
659                                struct cachefiles_object *object)
660 {
661         struct cachefiles_volume *volume = object->volume;
662         struct dentry *dentry, *fan = volume->fanout[(u8)object->cookie->key_hash];
663         bool success = false;
664         int ret;
665
666         _enter(",%pD", object->file);
667
668         inode_lock_nested(d_inode(fan), I_MUTEX_PARENT);
669         ret = cachefiles_inject_read_error();
670         if (ret == 0)
671                 dentry = lookup_one_len(object->d_name, fan, object->d_name_len);
672         else
673                 dentry = ERR_PTR(ret);
674         if (IS_ERR(dentry)) {
675                 trace_cachefiles_vfs_error(object, d_inode(fan), PTR_ERR(dentry),
676                                            cachefiles_trace_lookup_error);
677                 _debug("lookup fail %ld", PTR_ERR(dentry));
678                 goto out_unlock;
679         }
680
681         if (!d_is_negative(dentry)) {
682                 if (d_backing_inode(dentry) == file_inode(object->file)) {
683                         success = true;
684                         goto out_dput;
685                 }
686
687                 ret = cachefiles_unlink(volume->cache, object, fan, dentry,
688                                         FSCACHE_OBJECT_IS_STALE);
689                 if (ret < 0)
690                         goto out_dput;
691
692                 dput(dentry);
693                 ret = cachefiles_inject_read_error();
694                 if (ret == 0)
695                         dentry = lookup_one_len(object->d_name, fan, object->d_name_len);
696                 else
697                         dentry = ERR_PTR(ret);
698                 if (IS_ERR(dentry)) {
699                         trace_cachefiles_vfs_error(object, d_inode(fan), PTR_ERR(dentry),
700                                                    cachefiles_trace_lookup_error);
701                         _debug("lookup fail %ld", PTR_ERR(dentry));
702                         goto out_unlock;
703                 }
704         }
705
706         ret = cachefiles_inject_read_error();
707         if (ret == 0)
708                 ret = vfs_link(object->file->f_path.dentry, &init_user_ns,
709                                d_inode(fan), dentry, NULL);
710         if (ret < 0) {
711                 trace_cachefiles_vfs_error(object, d_inode(fan), ret,
712                                            cachefiles_trace_link_error);
713                 _debug("link fail %d", ret);
714         } else {
715                 trace_cachefiles_link(object, file_inode(object->file));
716                 spin_lock(&object->lock);
717                 /* TODO: Do we want to switch the file pointer to the new dentry? */
718                 clear_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
719                 spin_unlock(&object->lock);
720                 success = true;
721         }
722
723 out_dput:
724         dput(dentry);
725 out_unlock:
726         inode_unlock(d_inode(fan));
727         _leave(" = %u", success);
728         return success;
729 }
730
731 /*
732  * Look up an inode to be checked or culled.  Return -EBUSY if the inode is
733  * marked in use.
734  */
735 static struct dentry *cachefiles_lookup_for_cull(struct cachefiles_cache *cache,
736                                                  struct dentry *dir,
737                                                  char *filename)
738 {
739         struct dentry *victim;
740         int ret = -ENOENT;
741
742         inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
743
744         victim = lookup_one_len(filename, dir, strlen(filename));
745         if (IS_ERR(victim))
746                 goto lookup_error;
747         if (d_is_negative(victim))
748                 goto lookup_put;
749         if (d_inode(victim)->i_flags & S_KERNEL_FILE)
750                 goto lookup_busy;
751         return victim;
752
753 lookup_busy:
754         ret = -EBUSY;
755 lookup_put:
756         inode_unlock(d_inode(dir));
757         dput(victim);
758         return ERR_PTR(ret);
759
760 lookup_error:
761         inode_unlock(d_inode(dir));
762         ret = PTR_ERR(victim);
763         if (ret == -ENOENT)
764                 return ERR_PTR(-ESTALE); /* Probably got retired by the netfs */
765
766         if (ret == -EIO) {
767                 cachefiles_io_error(cache, "Lookup failed");
768         } else if (ret != -ENOMEM) {
769                 pr_err("Internal error: %d\n", ret);
770                 ret = -EIO;
771         }
772
773         return ERR_PTR(ret);
774 }
775
776 /*
777  * Cull an object if it's not in use
778  * - called only by cache manager daemon
779  */
780 int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir,
781                     char *filename)
782 {
783         struct dentry *victim;
784         struct inode *inode;
785         int ret;
786
787         _enter(",%pd/,%s", dir, filename);
788
789         victim = cachefiles_lookup_for_cull(cache, dir, filename);
790         if (IS_ERR(victim))
791                 return PTR_ERR(victim);
792
793         /* check to see if someone is using this object */
794         inode = d_inode(victim);
795         inode_lock(inode);
796         if (inode->i_flags & S_KERNEL_FILE) {
797                 ret = -EBUSY;
798         } else {
799                 /* Stop the cache from picking it back up */
800                 inode->i_flags |= S_KERNEL_FILE;
801                 ret = 0;
802         }
803         inode_unlock(inode);
804         if (ret < 0)
805                 goto error_unlock;
806
807         ret = cachefiles_bury_object(cache, NULL, dir, victim,
808                                      FSCACHE_OBJECT_WAS_CULLED);
809         if (ret < 0)
810                 goto error;
811
812         fscache_count_culled();
813         dput(victim);
814         _leave(" = 0");
815         return 0;
816
817 error_unlock:
818         inode_unlock(d_inode(dir));
819 error:
820         dput(victim);
821         if (ret == -ENOENT)
822                 return -ESTALE; /* Probably got retired by the netfs */
823
824         if (ret != -ENOMEM) {
825                 pr_err("Internal error: %d\n", ret);
826                 ret = -EIO;
827         }
828
829         _leave(" = %d", ret);
830         return ret;
831 }
832
833 /*
834  * Find out if an object is in use or not
835  * - called only by cache manager daemon
836  * - returns -EBUSY or 0 to indicate whether an object is in use or not
837  */
838 int cachefiles_check_in_use(struct cachefiles_cache *cache, struct dentry *dir,
839                             char *filename)
840 {
841         struct dentry *victim;
842         int ret = 0;
843
844         victim = cachefiles_lookup_for_cull(cache, dir, filename);
845         if (IS_ERR(victim))
846                 return PTR_ERR(victim);
847
848         inode_unlock(d_inode(dir));
849         dput(victim);
850         return ret;
851 }