hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/fs/orangefs/orangefs-kernel.h
....@@ -51,6 +51,7 @@
5151 #include <linux/rwsem.h>
5252 #include <linux/xattr.h>
5353 #include <linux/exportfs.h>
54
+#include <linux/hashtable.h>
5455
5556 #include <asm/unaligned.h>
5657
....@@ -192,7 +193,13 @@
192193 sector_t last_failed_block_index_read;
193194
194195 unsigned long getattr_time;
195
- u32 getattr_mask;
196
+ unsigned long mapping_time;
197
+ int attr_valid;
198
+ kuid_t attr_uid;
199
+ kgid_t attr_gid;
200
+ unsigned long bitlock;
201
+
202
+ DECLARE_HASHTABLE(xattr_cache, 4);
196203 };
197204
198205 /* per superblock private orangefs info */
....@@ -217,10 +224,25 @@
217224 unsigned long writes;
218225 };
219226
227
+struct orangefs_cached_xattr {
228
+ struct hlist_node node;
229
+ char key[ORANGEFS_MAX_XATTR_NAMELEN];
230
+ char val[ORANGEFS_MAX_XATTR_VALUELEN];
231
+ ssize_t length;
232
+ unsigned long timeout;
233
+};
234
+
235
+struct orangefs_write_range {
236
+ loff_t pos;
237
+ size_t len;
238
+ kuid_t uid;
239
+ kgid_t gid;
240
+};
241
+
220242 extern struct orangefs_stats orangefs_stats;
221243
222244 /*
223
- * NOTE: See Documentation/filesystems/porting for information
245
+ * NOTE: See Documentation/filesystems/porting.rst for information
224246 * on implementing FOO_I and properly accessing fs private data
225247 */
226248 static inline struct orangefs_inode_s *ORANGEFS_I(struct inode *inode)
....@@ -329,13 +351,15 @@
329351 /*
330352 * defined in inode.c
331353 */
354
+vm_fault_t orangefs_page_mkwrite(struct vm_fault *);
332355 struct inode *orangefs_new_inode(struct super_block *sb,
333356 struct inode *dir,
334357 int mode,
335358 dev_t dev,
336359 struct orangefs_object_kref *ref);
337360
338
-int orangefs_setattr(struct dentry *dentry, struct iattr *iattr);
361
+int __orangefs_setattr(struct inode *, struct iattr *);
362
+int orangefs_setattr(struct dentry *, struct iattr *);
339363
340364 int orangefs_getattr(const struct path *path, struct kstat *stat,
341365 u32 request_mask, unsigned int flags);
....@@ -355,11 +379,6 @@
355379 struct inode *orangefs_iget(struct super_block *sb,
356380 struct orangefs_object_kref *ref);
357381
358
-ssize_t orangefs_inode_read(struct inode *inode,
359
- struct iov_iter *iter,
360
- loff_t *offset,
361
- loff_t readahead_size);
362
-
363382 /*
364383 * defined in devorangefs-req.c
365384 */
....@@ -369,6 +388,16 @@
369388 void orangefs_dev_cleanup(void);
370389 int is_daemon_in_service(void);
371390 bool __is_daemon_in_service(void);
391
+
392
+/*
393
+ * defined in file.c
394
+ */
395
+int orangefs_revalidate_mapping(struct inode *);
396
+ssize_t wait_for_direct_io(enum ORANGEFS_io_type, struct inode *, loff_t *,
397
+ struct iov_iter *, size_t, loff_t, struct orangefs_write_range *, int *,
398
+ struct file *);
399
+ssize_t do_readv_writev(enum ORANGEFS_io_type, struct file *, loff_t *,
400
+ struct iov_iter *);
372401
373402 /*
374403 * defined in orangefs-utils.c
....@@ -386,12 +415,14 @@
386415 size_t size,
387416 int flags);
388417
389
-int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
390
- u32 request_mask);
418
+#define ORANGEFS_GETATTR_NEW 1
419
+#define ORANGEFS_GETATTR_SIZE 2
420
+
421
+int orangefs_inode_getattr(struct inode *, int);
391422
392423 int orangefs_inode_check_changed(struct inode *inode);
393424
394
-int orangefs_inode_setattr(struct inode *inode, struct iattr *iattr);
425
+int orangefs_inode_setattr(struct inode *inode);
395426
396427 bool orangefs_cancel_op_in_progress(struct orangefs_kernel_op_s *op);
397428
....@@ -400,6 +431,7 @@
400431 extern struct mutex orangefs_request_mutex;
401432 extern int op_timeout_secs;
402433 extern int slot_timeout_secs;
434
+extern int orangefs_cache_timeout_msecs;
403435 extern int orangefs_dcache_timeout_msecs;
404436 extern int orangefs_getattr_timeout_msecs;
405437 extern struct list_head orangefs_superblocks;
....@@ -426,6 +458,7 @@
426458 #define ORANGEFS_OP_CANCELLATION 4 /* this is a cancellation */
427459 #define ORANGEFS_OP_NO_MUTEX 8 /* don't acquire request_mutex */
428460 #define ORANGEFS_OP_ASYNC 16 /* Queue it, but don't wait */
461
+#define ORANGEFS_OP_WRITEBACK 32
429462
430463 int service_operation(struct orangefs_kernel_op_s *op,
431464 const char *op_name,