Add file.c which provides file operations for ext4l filesystem. Changes needed for file.c support: - Add i_writecount and i_rwsem fields to struct inode - Add IOMAP_DIO_* flags to linux/iomap.h - Add vm_operations_struct definition - Add VM flags (VM_SHARED, VM_HUGEPAGE, etc.) - Add vm_area_desc and pipe_inode_info structures - Add FMODE_* flags and SEEK_HOLE/SEEK_DATA to linux/fs.h - Add vfsmount, path structs and f_path to struct file - Add inode_trylock*, lockdep_assert_held_write macros - Add filemap_fault, filemap_map_pages stubs - Add inode_operations struct definition - Add various stubs: d_path, fscrypt_file_open, fsverity_file_open, dquot_file_open, sb_start_intwrite_trylock, ext4_listxattr Simplify ext4_file_operations and ext4_file_inode_operations initializers to use only the members defined in U-Boot's structs. Co-developed-by: Claude <noreply@anthropic.com> Signed-off-by: Simon Glass <simon.glass@canonical.com>
131 lines
2.6 KiB
C
131 lines
2.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Filesystem definitions
|
|
*
|
|
* Minimal version for U-Boot ext4l - based on Linux 6.18
|
|
*/
|
|
#ifndef _LINUX_FS_H
|
|
#define _LINUX_FS_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/list.h>
|
|
#include <linux/mutex.h>
|
|
|
|
/* Forward declarations */
|
|
struct inode;
|
|
struct super_block;
|
|
struct buffer_head;
|
|
struct address_space_operations;
|
|
|
|
/* errseq_t - error sequence type */
|
|
typedef u32 errseq_t;
|
|
|
|
/* fmode_t - file mode type */
|
|
typedef unsigned int fmode_t;
|
|
|
|
/* File mode flags */
|
|
#define FMODE_READ ((__force fmode_t)(1 << 0))
|
|
#define FMODE_WRITE ((__force fmode_t)(1 << 1))
|
|
#define FMODE_LSEEK ((__force fmode_t)(1 << 2))
|
|
#define FMODE_NOWAIT ((__force fmode_t)(1 << 20))
|
|
#define FMODE_CAN_ODIRECT ((__force fmode_t)(1 << 21))
|
|
#define FMODE_CAN_ATOMIC_WRITE ((__force fmode_t)(1 << 22))
|
|
|
|
/* Seek constants */
|
|
#ifndef SEEK_HOLE
|
|
#define SEEK_HOLE 4
|
|
#define SEEK_DATA 3
|
|
#endif
|
|
|
|
/* vfsmount - mount point */
|
|
struct vfsmount {
|
|
struct dentry *mnt_root;
|
|
};
|
|
|
|
/* path - pathname components */
|
|
struct path {
|
|
struct vfsmount *mnt;
|
|
struct dentry *dentry;
|
|
};
|
|
|
|
/* Buffer operations are in buffer_head.h */
|
|
|
|
/* address_space - extended for inode.c */
|
|
struct address_space {
|
|
struct inode *host;
|
|
errseq_t wb_err;
|
|
unsigned long nrpages;
|
|
unsigned long writeback_index;
|
|
struct list_head i_private_list;
|
|
const struct address_space_operations *a_ops;
|
|
};
|
|
|
|
/* block_device - minimal stub */
|
|
struct block_device {
|
|
struct address_space *bd_mapping;
|
|
void *bd_disk;
|
|
struct super_block *bd_super;
|
|
};
|
|
|
|
/* errseq functions - stubs */
|
|
static inline int errseq_check(errseq_t *eseq, errseq_t since)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int errseq_check_and_advance(errseq_t *eseq, errseq_t *since)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/* File readahead state - stub */
|
|
struct file_ra_state {
|
|
unsigned long start;
|
|
unsigned int size;
|
|
unsigned int async_size;
|
|
unsigned int ra_pages;
|
|
unsigned int mmap_miss;
|
|
long long prev_pos;
|
|
};
|
|
|
|
/* file - minimal stub */
|
|
struct file {
|
|
fmode_t f_mode;
|
|
struct inode *f_inode;
|
|
unsigned int f_flags;
|
|
struct address_space *f_mapping;
|
|
void *private_data;
|
|
struct file_ra_state f_ra;
|
|
struct path f_path;
|
|
};
|
|
|
|
/* Get inode from file */
|
|
static inline struct inode *file_inode(struct file *f)
|
|
{
|
|
return f->f_inode;
|
|
}
|
|
|
|
/* iattr - inode attributes for setattr */
|
|
struct iattr {
|
|
unsigned int ia_valid;
|
|
umode_t ia_mode;
|
|
uid_t ia_uid;
|
|
gid_t ia_gid;
|
|
loff_t ia_size;
|
|
};
|
|
|
|
/* writeback_control - defined in linux/compat.h */
|
|
|
|
/* fsnotify - stub */
|
|
#define fsnotify_change(d, m) do { } while (0)
|
|
|
|
/* inode_init_once - stub */
|
|
static inline void inode_init_once(struct inode *inode)
|
|
{
|
|
}
|
|
|
|
/* S_ISDIR, etc. - already in linux/stat.h */
|
|
#include <linux/stat.h>
|
|
|
|
#endif /* _LINUX_FS_H */
|