aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h50
1 files changed, 24 insertions, 26 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 7061a8587ee3..dbd860af0804 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -138,16 +138,10 @@ struct inodes_stat_t {
138 * block layer could (in theory) choose to ignore this 138 * block layer could (in theory) choose to ignore this
139 * request if it runs into resource problems. 139 * request if it runs into resource problems.
140 * WRITE A normal async write. Device will be plugged. 140 * WRITE A normal async write. Device will be plugged.
141 * WRITE_SYNC_PLUG Synchronous write. Identical to WRITE, but passes down 141 * WRITE_SYNC Synchronous write. Identical to WRITE, but passes down
142 * the hint that someone will be waiting on this IO 142 * the hint that someone will be waiting on this IO
143 * shortly. The device must still be unplugged explicitly, 143 * shortly. The write equivalent of READ_SYNC.
144 * WRITE_SYNC_PLUG does not do this as we could be 144 * WRITE_ODIRECT Special case write for O_DIRECT only.
145 * submitting more writes before we actually wait on any
146 * of them.
147 * WRITE_SYNC Like WRITE_SYNC_PLUG, but also unplugs the device
148 * immediately after submission. The write equivalent
149 * of READ_SYNC.
150 * WRITE_ODIRECT_PLUG Special case write for O_DIRECT only.
151 * WRITE_FLUSH Like WRITE_SYNC but with preceding cache flush. 145 * WRITE_FLUSH Like WRITE_SYNC but with preceding cache flush.
152 * WRITE_FUA Like WRITE_SYNC but data is guaranteed to be on 146 * WRITE_FUA Like WRITE_SYNC but data is guaranteed to be on
153 * non-volatile media on completion. 147 * non-volatile media on completion.
@@ -163,18 +157,14 @@ struct inodes_stat_t {
163#define WRITE RW_MASK 157#define WRITE RW_MASK
164#define READA RWA_MASK 158#define READA RWA_MASK
165 159
166#define READ_SYNC (READ | REQ_SYNC | REQ_UNPLUG) 160#define READ_SYNC (READ | REQ_SYNC)
167#define READ_META (READ | REQ_META) 161#define READ_META (READ | REQ_META)
168#define WRITE_SYNC_PLUG (WRITE | REQ_SYNC | REQ_NOIDLE) 162#define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE)
169#define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG) 163#define WRITE_ODIRECT (WRITE | REQ_SYNC)
170#define WRITE_ODIRECT_PLUG (WRITE | REQ_SYNC)
171#define WRITE_META (WRITE | REQ_META) 164#define WRITE_META (WRITE | REQ_META)
172#define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ 165#define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH)
173 REQ_FLUSH) 166#define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA)
174#define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \ 167#define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA)
175 REQ_FUA)
176#define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_UNPLUG | \
177 REQ_FLUSH | REQ_FUA)
178 168
179#define SEL_IN 1 169#define SEL_IN 1
180#define SEL_OUT 2 170#define SEL_OUT 2
@@ -367,6 +357,8 @@ struct inodes_stat_t {
367#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ 357#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
368#define FS_EXTENT_FL 0x00080000 /* Extents */ 358#define FS_EXTENT_FL 0x00080000 /* Extents */
369#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */ 359#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
360#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
361#define FS_COW_FL 0x02000000 /* Cow file */
370#define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ 362#define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
371 363
372#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ 364#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
@@ -473,7 +465,7 @@ struct iattr {
473 struct timespec ia_ctime; 465 struct timespec ia_ctime;
474 466
475 /* 467 /*
476 * Not an attribute, but an auxilary info for filesystems wanting to 468 * Not an attribute, but an auxiliary info for filesystems wanting to
477 * implement an ftruncate() like method. NOTE: filesystem should 469 * implement an ftruncate() like method. NOTE: filesystem should
478 * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL). 470 * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL).
479 */ 471 */
@@ -586,7 +578,6 @@ typedef int (*read_actor_t)(read_descriptor_t *, struct page *,
586struct address_space_operations { 578struct address_space_operations {
587 int (*writepage)(struct page *page, struct writeback_control *wbc); 579 int (*writepage)(struct page *page, struct writeback_control *wbc);
588 int (*readpage)(struct file *, struct page *); 580 int (*readpage)(struct file *, struct page *);
589 void (*sync_page)(struct page *);
590 581
591 /* Write back some dirty pages from this mapping. */ 582 /* Write back some dirty pages from this mapping. */
592 int (*writepages)(struct address_space *, struct writeback_control *); 583 int (*writepages)(struct address_space *, struct writeback_control *);
@@ -622,6 +613,8 @@ struct address_space_operations {
622 int (*error_remove_page)(struct address_space *, struct page *); 613 int (*error_remove_page)(struct address_space *, struct page *);
623}; 614};
624 615
616extern const struct address_space_operations empty_aops;
617
625/* 618/*
626 * pagecache_write_begin/pagecache_write_end must be used by general code 619 * pagecache_write_begin/pagecache_write_end must be used by general code
627 * to write into the pagecache. 620 * to write into the pagecache.
@@ -656,15 +649,15 @@ struct address_space {
656} __attribute__((aligned(sizeof(long)))); 649} __attribute__((aligned(sizeof(long))));
657 /* 650 /*
658 * On most architectures that alignment is already the case; but 651 * On most architectures that alignment is already the case; but
659 * must be enforced here for CRIS, to let the least signficant bit 652 * must be enforced here for CRIS, to let the least significant bit
660 * of struct page's "mapping" pointer be used for PAGE_MAPPING_ANON. 653 * of struct page's "mapping" pointer be used for PAGE_MAPPING_ANON.
661 */ 654 */
662 655
663struct block_device { 656struct block_device {
664 dev_t bd_dev; /* not a kdev_t - it's a search key */ 657 dev_t bd_dev; /* not a kdev_t - it's a search key */
658 int bd_openers;
665 struct inode * bd_inode; /* will die */ 659 struct inode * bd_inode; /* will die */
666 struct super_block * bd_super; 660 struct super_block * bd_super;
667 int bd_openers;
668 struct mutex bd_mutex; /* open/close mutex */ 661 struct mutex bd_mutex; /* open/close mutex */
669 struct list_head bd_inodes; 662 struct list_head bd_inodes;
670 void * bd_claiming; 663 void * bd_claiming;
@@ -1457,8 +1450,13 @@ enum {
1457#define put_fs_excl() atomic_dec(&current->fs_excl) 1450#define put_fs_excl() atomic_dec(&current->fs_excl)
1458#define has_fs_excl() atomic_read(&current->fs_excl) 1451#define has_fs_excl() atomic_read(&current->fs_excl)
1459 1452
1460#define is_owner_or_cap(inode) \ 1453/*
1461 ((current_fsuid() == (inode)->i_uid) || capable(CAP_FOWNER)) 1454 * until VFS tracks user namespaces for inodes, just make all files
1455 * belong to init_user_ns
1456 */
1457extern struct user_namespace init_user_ns;
1458#define inode_userns(inode) (&init_user_ns)
1459extern bool inode_owner_or_capable(const struct inode *inode);
1462 1460
1463/* not quite ready to be deprecated, but... */ 1461/* not quite ready to be deprecated, but... */
1464extern void lock_super(struct super_block *); 1462extern void lock_super(struct super_block *);
@@ -1642,7 +1640,7 @@ struct super_operations {
1642}; 1640};
1643 1641
1644/* 1642/*
1645 * Inode state bits. Protected by inode_lock. 1643 * Inode state bits. Protected by inode->i_lock
1646 * 1644 *
1647 * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, 1645 * Three bits determine the dirty state of the inode, I_DIRTY_SYNC,
1648 * I_DIRTY_DATASYNC and I_DIRTY_PAGES. 1646 * I_DIRTY_DATASYNC and I_DIRTY_PAGES.