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.h49
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 *,
586struct address_space_operations { 577struct 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
615extern 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
663struct block_device { 655struct 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(&current->fs_excl) 1449#define put_fs_excl() atomic_dec(&current->fs_excl)
1458#define has_fs_excl() atomic_read(&current->fs_excl) 1450#define has_fs_excl() atomic_read(&current->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 */
1456extern struct user_namespace init_user_ns;
1457#define inode_userns(inode) (&init_user_ns)
1458extern 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... */
1464extern void lock_super(struct super_block *); 1461extern 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.