diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 7061a8587ee3..cdf9495df204 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,7 @@ 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 */ | ||
370 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ | 361 | #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ |
371 | 362 | ||
372 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ | 363 | #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ |
@@ -473,7 +464,7 @@ struct iattr { | |||
473 | struct timespec ia_ctime; | 464 | struct timespec ia_ctime; |
474 | 465 | ||
475 | /* | 466 | /* |
476 | * Not an attribute, but an auxilary info for filesystems wanting to | 467 | * Not an attribute, but an auxiliary info for filesystems wanting to |
477 | * implement an ftruncate() like method. NOTE: filesystem should | 468 | * implement an ftruncate() like method. NOTE: filesystem should |
478 | * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL). | 469 | * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL). |
479 | */ | 470 | */ |
@@ -586,7 +577,6 @@ typedef int (*read_actor_t)(read_descriptor_t *, struct page *, | |||
586 | struct address_space_operations { | 577 | struct address_space_operations { |
587 | int (*writepage)(struct page *page, struct writeback_control *wbc); | 578 | int (*writepage)(struct page *page, struct writeback_control *wbc); |
588 | int (*readpage)(struct file *, struct page *); | 579 | int (*readpage)(struct file *, struct page *); |
589 | void (*sync_page)(struct page *); | ||
590 | 580 | ||
591 | /* Write back some dirty pages from this mapping. */ | 581 | /* Write back some dirty pages from this mapping. */ |
592 | int (*writepages)(struct address_space *, struct writeback_control *); | 582 | int (*writepages)(struct address_space *, struct writeback_control *); |
@@ -622,6 +612,8 @@ struct address_space_operations { | |||
622 | int (*error_remove_page)(struct address_space *, struct page *); | 612 | int (*error_remove_page)(struct address_space *, struct page *); |
623 | }; | 613 | }; |
624 | 614 | ||
615 | extern const struct address_space_operations empty_aops; | ||
616 | |||
625 | /* | 617 | /* |
626 | * pagecache_write_begin/pagecache_write_end must be used by general code | 618 | * pagecache_write_begin/pagecache_write_end must be used by general code |
627 | * to write into the pagecache. | 619 | * to write into the pagecache. |
@@ -656,15 +648,15 @@ struct address_space { | |||
656 | } __attribute__((aligned(sizeof(long)))); | 648 | } __attribute__((aligned(sizeof(long)))); |
657 | /* | 649 | /* |
658 | * On most architectures that alignment is already the case; but | 650 | * On most architectures that alignment is already the case; but |
659 | * must be enforced here for CRIS, to let the least signficant bit | 651 | * 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. | 652 | * of struct page's "mapping" pointer be used for PAGE_MAPPING_ANON. |
661 | */ | 653 | */ |
662 | 654 | ||
663 | struct block_device { | 655 | struct block_device { |
664 | dev_t bd_dev; /* not a kdev_t - it's a search key */ | 656 | dev_t bd_dev; /* not a kdev_t - it's a search key */ |
657 | int bd_openers; | ||
665 | struct inode * bd_inode; /* will die */ | 658 | struct inode * bd_inode; /* will die */ |
666 | struct super_block * bd_super; | 659 | struct super_block * bd_super; |
667 | int bd_openers; | ||
668 | struct mutex bd_mutex; /* open/close mutex */ | 660 | struct mutex bd_mutex; /* open/close mutex */ |
669 | struct list_head bd_inodes; | 661 | struct list_head bd_inodes; |
670 | void * bd_claiming; | 662 | void * bd_claiming; |
@@ -1457,8 +1449,13 @@ enum { | |||
1457 | #define put_fs_excl() atomic_dec(¤t->fs_excl) | 1449 | #define put_fs_excl() atomic_dec(¤t->fs_excl) |
1458 | #define has_fs_excl() atomic_read(¤t->fs_excl) | 1450 | #define has_fs_excl() atomic_read(¤t->fs_excl) |
1459 | 1451 | ||
1460 | #define is_owner_or_cap(inode) \ | 1452 | /* |
1461 | ((current_fsuid() == (inode)->i_uid) || capable(CAP_FOWNER)) | 1453 | * until VFS tracks user namespaces for inodes, just make all files |
1454 | * belong to init_user_ns | ||
1455 | */ | ||
1456 | extern struct user_namespace init_user_ns; | ||
1457 | #define inode_userns(inode) (&init_user_ns) | ||
1458 | extern bool inode_owner_or_capable(const struct inode *inode); | ||
1462 | 1459 | ||
1463 | /* not quite ready to be deprecated, but... */ | 1460 | /* not quite ready to be deprecated, but... */ |
1464 | extern void lock_super(struct super_block *); | 1461 | extern void lock_super(struct super_block *); |
@@ -1642,7 +1639,7 @@ struct super_operations { | |||
1642 | }; | 1639 | }; |
1643 | 1640 | ||
1644 | /* | 1641 | /* |
1645 | * Inode state bits. Protected by inode_lock. | 1642 | * Inode state bits. Protected by inode->i_lock |
1646 | * | 1643 | * |
1647 | * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, | 1644 | * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, |
1648 | * I_DIRTY_DATASYNC and I_DIRTY_PAGES. | 1645 | * I_DIRTY_DATASYNC and I_DIRTY_PAGES. |