fs: introduce f_op->mmap_capabilities for nommu mmap support
Since "BDI: Provide backing device capability information [try #3]" the backing_dev_info structure also provides flags for the kind of mmap operation available in a nommu environment, which is entirely unrelated to it's original purpose. Introduce a new nommu-only file operation to provide this information to the nommu mmap code instead. Splitting this from the backing_dev_info structure allows to remove lots of backing_dev_info instance that aren't otherwise needed, and entirely gets rid of the concept of providing a backing_dev_info for a character device. It also removes the need for the mtd_inodefs filesystem. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Tejun Heo <tj@kernel.org> Acked-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
97b713ba3e
commit
b4caecd480
32 changed files with 169 additions and 346 deletions
|
@ -114,7 +114,7 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
|
|||
const char *fmt, ...);
|
||||
int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
|
||||
void bdi_unregister(struct backing_dev_info *bdi);
|
||||
int __must_check bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
|
||||
int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
|
||||
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
|
||||
enum wb_reason reason);
|
||||
void bdi_start_background_writeback(struct backing_dev_info *bdi);
|
||||
|
@ -228,42 +228,17 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ratio);
|
|||
* BDI_CAP_NO_ACCT_DIRTY: Dirty pages shouldn't contribute to accounting
|
||||
* BDI_CAP_NO_WRITEBACK: Don't write pages back
|
||||
* BDI_CAP_NO_ACCT_WB: Don't automatically account writeback pages
|
||||
*
|
||||
* These flags let !MMU mmap() govern direct device mapping vs immediate
|
||||
* copying more easily for MAP_PRIVATE, especially for ROM filesystems.
|
||||
*
|
||||
* BDI_CAP_MAP_COPY: Copy can be mapped (MAP_PRIVATE)
|
||||
* BDI_CAP_MAP_DIRECT: Can be mapped directly (MAP_SHARED)
|
||||
* BDI_CAP_READ_MAP: Can be mapped for reading
|
||||
* BDI_CAP_WRITE_MAP: Can be mapped for writing
|
||||
* BDI_CAP_EXEC_MAP: Can be mapped for execution
|
||||
*
|
||||
* BDI_CAP_STRICTLIMIT: Keep number of dirty pages below bdi threshold.
|
||||
*/
|
||||
#define BDI_CAP_NO_ACCT_DIRTY 0x00000001
|
||||
#define BDI_CAP_NO_WRITEBACK 0x00000002
|
||||
#define BDI_CAP_MAP_COPY 0x00000004
|
||||
#define BDI_CAP_MAP_DIRECT 0x00000008
|
||||
#define BDI_CAP_READ_MAP 0x00000010
|
||||
#define BDI_CAP_WRITE_MAP 0x00000020
|
||||
#define BDI_CAP_EXEC_MAP 0x00000040
|
||||
#define BDI_CAP_NO_ACCT_WB 0x00000080
|
||||
#define BDI_CAP_STABLE_WRITES 0x00000200
|
||||
#define BDI_CAP_STRICTLIMIT 0x00000400
|
||||
|
||||
#define BDI_CAP_VMFLAGS \
|
||||
(BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP)
|
||||
#define BDI_CAP_NO_ACCT_WB 0x00000004
|
||||
#define BDI_CAP_STABLE_WRITES 0x00000008
|
||||
#define BDI_CAP_STRICTLIMIT 0x00000010
|
||||
|
||||
#define BDI_CAP_NO_ACCT_AND_WRITEBACK \
|
||||
(BDI_CAP_NO_WRITEBACK | BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_ACCT_WB)
|
||||
|
||||
#if defined(VM_MAYREAD) && \
|
||||
(BDI_CAP_READ_MAP != VM_MAYREAD || \
|
||||
BDI_CAP_WRITE_MAP != VM_MAYWRITE || \
|
||||
BDI_CAP_EXEC_MAP != VM_MAYEXEC)
|
||||
#error please change backing_dev_info::capabilities flags
|
||||
#endif
|
||||
|
||||
extern struct backing_dev_info default_backing_dev_info;
|
||||
extern struct backing_dev_info noop_backing_dev_info;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue