1515 * file or directory. The caller must hold the inode lock.
1616 */
1717static bool __cachefiles_mark_inode_in_use (struct cachefiles_object * object ,
18- struct dentry * dentry )
18+ struct inode * inode )
1919{
20- struct inode * inode = d_backing_inode (dentry );
2120 bool can_use = false;
2221
2322 if (!(inode -> i_flags & S_KERNEL_FILE )) {
@@ -26,21 +25,18 @@ static bool __cachefiles_mark_inode_in_use(struct cachefiles_object *object,
2625 can_use = true;
2726 } else {
2827 trace_cachefiles_mark_failed (object , inode );
29- pr_notice ("cachefiles: Inode already in use: %pd (B=%lx)\n" ,
30- dentry , inode -> i_ino );
3128 }
3229
3330 return can_use ;
3431}
3532
3633static bool cachefiles_mark_inode_in_use (struct cachefiles_object * object ,
37- struct dentry * dentry )
34+ struct inode * inode )
3835{
39- struct inode * inode = d_backing_inode (dentry );
4036 bool can_use ;
4137
4238 inode_lock (inode );
43- can_use = __cachefiles_mark_inode_in_use (object , dentry );
39+ can_use = __cachefiles_mark_inode_in_use (object , inode );
4440 inode_unlock (inode );
4541 return can_use ;
4642}
@@ -49,21 +45,17 @@ static bool cachefiles_mark_inode_in_use(struct cachefiles_object *object,
4945 * Unmark a backing inode. The caller must hold the inode lock.
5046 */
5147static void __cachefiles_unmark_inode_in_use (struct cachefiles_object * object ,
52- struct dentry * dentry )
48+ struct inode * inode )
5349{
54- struct inode * inode = d_backing_inode (dentry );
55-
5650 inode -> i_flags &= ~S_KERNEL_FILE ;
5751 trace_cachefiles_mark_inactive (object , inode );
5852}
5953
6054static void cachefiles_do_unmark_inode_in_use (struct cachefiles_object * object ,
61- struct dentry * dentry )
55+ struct inode * inode )
6256{
63- struct inode * inode = d_backing_inode (dentry );
64-
6557 inode_lock (inode );
66- __cachefiles_unmark_inode_in_use (object , dentry );
58+ __cachefiles_unmark_inode_in_use (object , inode );
6759 inode_unlock (inode );
6860}
6961
@@ -77,14 +69,12 @@ void cachefiles_unmark_inode_in_use(struct cachefiles_object *object,
7769 struct cachefiles_cache * cache = object -> volume -> cache ;
7870 struct inode * inode = file_inode (file );
7971
80- if (inode ) {
81- cachefiles_do_unmark_inode_in_use (object , file -> f_path .dentry );
72+ cachefiles_do_unmark_inode_in_use (object , inode );
8273
83- if (!test_bit (CACHEFILES_OBJECT_USING_TMPFILE , & object -> flags )) {
84- atomic_long_add (inode -> i_blocks , & cache -> b_released );
85- if (atomic_inc_return (& cache -> f_released ))
86- cachefiles_state_changed (cache );
87- }
74+ if (!test_bit (CACHEFILES_OBJECT_USING_TMPFILE , & object -> flags )) {
75+ atomic_long_add (inode -> i_blocks , & cache -> b_released );
76+ if (atomic_inc_return (& cache -> f_released ))
77+ cachefiles_state_changed (cache );
8878 }
8979}
9080
@@ -164,8 +154,11 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
164154 inode_lock (d_inode (subdir ));
165155 inode_unlock (d_inode (dir ));
166156
167- if (!__cachefiles_mark_inode_in_use (NULL , subdir ))
157+ if (!__cachefiles_mark_inode_in_use (NULL , d_inode (subdir ))) {
158+ pr_notice ("cachefiles: Inode already in use: %pd (B=%lx)\n" ,
159+ subdir , d_inode (subdir )-> i_ino );
168160 goto mark_error ;
161+ }
169162
170163 inode_unlock (d_inode (subdir ));
171164
@@ -224,9 +217,7 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
224217void cachefiles_put_directory (struct dentry * dir )
225218{
226219 if (dir ) {
227- inode_lock (dir -> d_inode );
228- __cachefiles_unmark_inode_in_use (NULL , dir );
229- inode_unlock (dir -> d_inode );
220+ cachefiles_do_unmark_inode_in_use (NULL , d_inode (dir ));
230221 dput (dir );
231222 }
232223}
@@ -410,7 +401,7 @@ int cachefiles_bury_object(struct cachefiles_cache *cache,
410401 "Rename failed with error %d" , ret );
411402 }
412403
413- __cachefiles_unmark_inode_in_use (object , rep );
404+ __cachefiles_unmark_inode_in_use (object , d_inode ( rep ) );
414405 unlock_rename (cache -> graveyard , dir );
415406 dput (grave );
416407 _leave (" = 0" );
@@ -474,9 +465,9 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
474465
475466 trace_cachefiles_tmpfile (object , d_backing_inode (path .dentry ));
476467
477- ret = - EBUSY ;
478- if (!cachefiles_mark_inode_in_use (object , path .dentry ))
479- goto err_dput ;
468+ /* This is a newly created file with no other possible user */
469+ if (!cachefiles_mark_inode_in_use (object , d_inode ( path .dentry ) ))
470+ WARN_ON ( 1 ) ;
480471
481472 ret = cachefiles_ondemand_init_object (object );
482473 if (ret < 0 )
@@ -520,8 +511,7 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
520511 return file ;
521512
522513err_unuse :
523- cachefiles_do_unmark_inode_in_use (object , path .dentry );
524- err_dput :
514+ cachefiles_do_unmark_inode_in_use (object , d_inode (path .dentry ));
525515 dput (path .dentry );
526516err :
527517 file = ERR_PTR (ret );
@@ -566,8 +556,11 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
566556
567557 _enter ("%pd" , dentry );
568558
569- if (!cachefiles_mark_inode_in_use (object , dentry ))
559+ if (!cachefiles_mark_inode_in_use (object , d_inode (dentry ))) {
560+ pr_notice ("cachefiles: Inode already in use: %pd (B=%lx)\n" ,
561+ dentry , d_inode (dentry )-> i_ino );
570562 return false;
563+ }
571564
572565 /* We need to open a file interface onto a data file now as we can't do
573566 * it on demand because writeback called from do_exit() sees
@@ -621,7 +614,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
621614error_fput :
622615 fput (file );
623616error :
624- cachefiles_do_unmark_inode_in_use (object , dentry );
617+ cachefiles_do_unmark_inode_in_use (object , d_inode ( dentry ) );
625618 dput (dentry );
626619 return false;
627620}
0 commit comments