@@ -12,7 +12,7 @@ use alloc::boxed::Box;
12
12
use crate :: {
13
13
bindings, c_types,
14
14
error:: { Error , Result } ,
15
- file:: File ,
15
+ file:: { File , FileRef } ,
16
16
from_kernel_result,
17
17
io_buffer:: { IoBufferReader , IoBufferWriter } ,
18
18
iov_iter:: IovIter ,
@@ -102,7 +102,7 @@ unsafe extern "C" fn read_callback<T: FileOperations>(
102
102
let f = & * ( ( * file) . private_data as * const T ) ;
103
103
// No `FMODE_UNSIGNED_OFFSET` support, so `offset` must be in [0, 2^63).
104
104
// See discussion in https://github.com/fishinabarrel/linux-kernel-module-rust/pull/113
105
- let read = f. read( & File :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
105
+ let read = f. read( & FileRef :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
106
106
( * offset) += bindings:: loff_t:: try_from( read) . unwrap( ) ;
107
107
Ok ( read as _)
108
108
}
@@ -117,7 +117,7 @@ unsafe extern "C" fn read_iter_callback<T: FileOperations>(
117
117
let file = ( * iocb) . ki_filp;
118
118
let offset = ( * iocb) . ki_pos;
119
119
let f = & * ( ( * file) . private_data as * const T ) ;
120
- let read = f. read( & File :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
120
+ let read = f. read( & FileRef :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
121
121
( * iocb) . ki_pos += bindings:: loff_t:: try_from( read) . unwrap( ) ;
122
122
Ok ( read as _)
123
123
}
@@ -134,7 +134,7 @@ unsafe extern "C" fn write_callback<T: FileOperations>(
134
134
let f = & * ( ( * file) . private_data as * const T ) ;
135
135
// No `FMODE_UNSIGNED_OFFSET` support, so `offset` must be in [0, 2^63).
136
136
// See discussion in https://github.com/fishinabarrel/linux-kernel-module-rust/pull/113
137
- let written = f. write( & File :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
137
+ let written = f. write( & FileRef :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
138
138
( * offset) += bindings:: loff_t:: try_from( written) . unwrap( ) ;
139
139
Ok ( written as _)
140
140
}
@@ -149,7 +149,7 @@ unsafe extern "C" fn write_iter_callback<T: FileOperations>(
149
149
let file = ( * iocb) . ki_filp;
150
150
let offset = ( * iocb) . ki_pos;
151
151
let f = & * ( ( * file) . private_data as * const T ) ;
152
- let written = f. write( & File :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
152
+ let written = f. write( & FileRef :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
153
153
( * iocb) . ki_pos += bindings:: loff_t:: try_from( written) . unwrap( ) ;
154
154
Ok ( written as _)
155
155
}
@@ -160,7 +160,7 @@ unsafe extern "C" fn release_callback<T: FileOperations>(
160
160
file : * mut bindings:: file ,
161
161
) -> c_types:: c_int {
162
162
let ptr = mem:: replace ( & mut ( * file) . private_data , ptr:: null_mut ( ) ) ;
163
- T :: release ( T :: Wrapper :: from_pointer ( ptr as _ ) , & File :: from_ptr ( file) ) ;
163
+ T :: release ( T :: Wrapper :: from_pointer ( ptr as _ ) , & FileRef :: from_ptr ( file) ) ;
164
164
0
165
165
}
166
166
@@ -177,7 +177,7 @@ unsafe extern "C" fn llseek_callback<T: FileOperations>(
177
177
_ => return Err ( Error :: EINVAL ) ,
178
178
} ;
179
179
let f = & * ( ( * file) . private_data as * const T ) ;
180
- let off = f. seek( & File :: from_ptr( file) , off) ?;
180
+ let off = f. seek( & FileRef :: from_ptr( file) , off) ?;
181
181
Ok ( off as bindings:: loff_t)
182
182
}
183
183
}
@@ -191,7 +191,7 @@ unsafe extern "C" fn unlocked_ioctl_callback<T: FileOperations>(
191
191
let f = & * ( ( * file) . private_data as * const T ) ;
192
192
// SAFETY: This function is called by the kernel, so it must set `fs` appropriately.
193
193
let mut cmd = IoctlCommand :: new( cmd as _, arg as _) ;
194
- let ret = f. ioctl( & File :: from_ptr( file) , & mut cmd) ?;
194
+ let ret = f. ioctl( & FileRef :: from_ptr( file) , & mut cmd) ?;
195
195
Ok ( ret as _)
196
196
}
197
197
}
@@ -205,7 +205,7 @@ unsafe extern "C" fn compat_ioctl_callback<T: FileOperations>(
205
205
let f = & * ( ( * file) . private_data as * const T ) ;
206
206
// SAFETY: This function is called by the kernel, so it must set `fs` appropriately.
207
207
let mut cmd = IoctlCommand :: new( cmd as _, arg as _) ;
208
- let ret = f. compat_ioctl( & File :: from_ptr( file) , & mut cmd) ?;
208
+ let ret = f. compat_ioctl( & FileRef :: from_ptr( file) , & mut cmd) ?;
209
209
Ok ( ret as _)
210
210
}
211
211
}
@@ -216,7 +216,7 @@ unsafe extern "C" fn mmap_callback<T: FileOperations>(
216
216
) -> c_types:: c_int {
217
217
from_kernel_result ! {
218
218
let f = & * ( ( * file) . private_data as * const T ) ;
219
- f. mmap( & File :: from_ptr( file) , & mut * vma) ?;
219
+ f. mmap( & FileRef :: from_ptr( file) , & mut * vma) ?;
220
220
Ok ( 0 )
221
221
}
222
222
}
@@ -232,7 +232,7 @@ unsafe extern "C" fn fsync_callback<T: FileOperations>(
232
232
let end = end. try_into( ) ?;
233
233
let datasync = datasync != 0 ;
234
234
let f = & * ( ( * file) . private_data as * const T ) ;
235
- let res = f. fsync( & File :: from_ptr( file) , start, end, datasync) ?;
235
+ let res = f. fsync( & FileRef :: from_ptr( file) , start, end, datasync) ?;
236
236
Ok ( res. try_into( ) . unwrap( ) )
237
237
}
238
238
}
@@ -242,7 +242,7 @@ unsafe extern "C" fn poll_callback<T: FileOperations>(
242
242
wait : * mut bindings:: poll_table_struct ,
243
243
) -> bindings:: __poll_t {
244
244
let f = & * ( ( * file) . private_data as * const T ) ;
245
- match f. poll ( & File :: from_ptr ( file) , & PollTable :: from_ptr ( wait) ) {
245
+ match f. poll ( & FileRef :: from_ptr ( file) , & PollTable :: from_ptr ( wait) ) {
246
246
Ok ( v) => v,
247
247
Err ( _) => bindings:: POLLERR ,
248
248
}
0 commit comments