History

Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull misc vfs updates from Al Viro: "Assorted bits and pieces from various people. No common topic in this pile, sorry" * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: fs/affs: add rename exchange fs/affs: add rename2 to prepare multiple methods Make stat/lstat/fstatat pass AT_NO_AUTOMOUNT to vfs_statx() fs: don't set *REFERENCED on single use objects fs: compat: Remove warning from COMPATIBLE_IOCTL remove pointless extern of atime_need_update_rcu() fs: completely ignore unknown open flags fs: add a VALID_OPEN_FLAGS fs: remove _submit_bh() fs: constify tree_descr arrays passed to simple_fill_super() fs: drop duplicate header percpu-rwsem.h fs/affs: bugfix: Write files greater than page size on OFS fs/affs: bugfix: enable writes on OFS disks fs/affs: remove node generation check fs/affs: import amigaffs.h fs/affs: bugfix: make symbolic links work again

Linus Torvalds committed 9 years ago

Commit 11fbf532 parents 339fbf6 6b4657628 files · +130 −74Browse files

Unified · Split

28 files
  1. drivers/infiniband/hw/qib/qib_fs.c +1 −1
  2. drivers/xen/xenfs/super.c +2 −2
  3. fs/affs/affs.h +2 −2
  4. fs/affs/amigaffs.h +0 −0
  5. fs/affs/dir.c +1 −1
  6. fs/affs/file.c +5 −5
  7. fs/affs/inode.c +1 −0
  8. fs/affs/namei.c +73 −14
  9. fs/binfmt_misc.c +1 −1
  10. fs/buffer.c +5 −14
  11. fs/compat_ioctl.c +1 −1
  12. fs/dcache.c +2 −2
  13. fs/debugfs/inode.c +1 −1
  14. fs/fcntl.c +4 −10
  15. fs/fuse/control.c +1 −1
  16. fs/inode.c +2 −1
  17. fs/internal.h +0 −2
  18. fs/libfs.c +1 −1
  19. fs/nfsd/nfsctl.c +1 −1
  20. fs/open.c +6 −0
  21. fs/tracefs/inode.c +1 −1
  22. include/linux/buffer_head.h +0 −2
  23. include/linux/fcntl.h +6 −0
  24. include/linux/fs.h +8 −6
  25. kernel/bpf/inode.c +1 −1
  26. security/inode.c +1 −1
  27. security/selinux/selinuxfs.c +2 −2
  28. security/smack/smackfs.c +1 −1
drivers/infiniband/hw/qib/qib_fs.c+1−1
@@ -512,7 +512,7 @@ static int qibfs_fill_super(struct super_block *sb, void *data, int silent) · 511 unmodified lines
512512 unsigned long flags;
513513 int ret;
514514
515− static struct tree_descr files[] = {
515+ static const struct tree_descr files[] = {
516516 [2] = {"driver_stats", &driver_ops[0], S_IRUGO},
517517 [3] = {"driver_stats_names", &driver_ops[1], S_IRUGO},
518518 {""},
drivers/xen/xenfs/super.c+2−2
@@ -44,14 +44,14 @@ static const struct file_operations capabilities_file_ops = { · 43 unmodified lines
4444
4545 static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
4646 {
47− static struct tree_descr xenfs_files[] = {
47+ static const struct tree_descr xenfs_files[] = {
4848 [2] = { "xenbus", &xen_xenbus_fops, S_IRUSR|S_IWUSR },
4949 { "capabilities", &capabilities_file_ops, S_IRUGO },
5050 { "privcmd", &xen_privcmd_fops, S_IRUSR|S_IWUSR },
5151 {""},
5252 };
5353
54− static struct tree_descr xenfs_init_files[] = {
54+ static const struct tree_descr xenfs_init_files[] = {
5555 [2] = { "xenbus", &xen_xenbus_fops, S_IRUSR|S_IWUSR },
5656 { "capabilities", &capabilities_file_ops, S_IRUGO },
5757 { "privcmd", &xen_privcmd_fops, S_IRUSR|S_IWUSR },
fs/affs/affs.h+2−2
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 #include <linux/types.h>
88 #include <linux/fs.h>
99 #include <linux/buffer_head.h>
10−#include <linux/amigaffs.h>
10+#include "amigaffs.h"
1111 #include <linux/mutex.h>
1212 #include <linux/workqueue.h>
1313
@@ -173,7 +173,7 @@ extern int affs_link(struct dentry *olddentry, struct inode *dir, · 159 unmodified lines
173173 struct dentry *dentry);
174174 extern int affs_symlink(struct inode *dir, struct dentry *dentry,
175175 const char *symname);
176−extern int affs_rename(struct inode *old_dir, struct dentry *old_dentry,
176+extern int affs_rename2(struct inode *old_dir, struct dentry *old_dentry,
177177 struct inode *new_dir, struct dentry *new_dentry,
178178 unsigned int flags);
179179
fs/affs/amigaffs.hrenamed from include/linux/amigaffs.h+0−0

File renamed without changes.

fs/affs/dir.c+1−1
@@ -35,7 +35,7 @@ const struct inode_operations affs_dir_inode_operations = { · 34 unmodified lines
3535 .symlink = affs_symlink,
3636 .mkdir = affs_mkdir,
3737 .rmdir = affs_rmdir,
38− .rename = affs_rename,
38+ .rename = affs_rename2,
3939 .setattr = affs_notify_change,
4040 };
4141
fs/affs/file.c+5−5
@@ -499,7 +499,7 @@ affs_getemptyblk_ino(struct inode *inode, int block) · 498 unmodified lines
499499 }
500500
501501 static int
502−affs_do_readpage_ofs(struct page *page, unsigned to)
502+affs_do_readpage_ofs(struct page *page, unsigned to, int create)
503503 {
504504 struct inode *inode = page->mapping->host;
505505 struct super_block *sb = inode->i_sb;
@@ -518,7 +518,7 @@ affs_do_readpage_ofs(struct page *page, unsigned to) · 12 unmodified lines
518518 boff = tmp % bsize;
519519
520520 while (pos < to) {
521− bh = affs_bread_ino(inode, bidx, 0);
521+ bh = affs_bread_ino(inode, bidx, create);
522522 if (IS_ERR(bh))
523523 return PTR_ERR(bh);
524524 tmp = min(bsize - boff, to - pos);
@@ -620,7 +620,7 @@ affs_readpage_ofs(struct file *file, struct page *page) · 95 unmodified lines
620620 memset(page_address(page) + to, 0, PAGE_SIZE - to);
621621 }
622622
623− err = affs_do_readpage_ofs(page, to);
623+ err = affs_do_readpage_ofs(page, to, 0);
624624 if (!err)
625625 SetPageUptodate(page);
626626 unlock_page(page);
@@ -657,7 +657,7 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping · 30 unmodified lines
657657 return 0;
658658
659659 /* XXX: inefficient but safe in the face of short writes */
660− err = affs_do_readpage_ofs(page, PAGE_SIZE);
660+ err = affs_do_readpage_ofs(page, PAGE_SIZE, 1);
661661 if (err) {
662662 unlock_page(page);
663663 put_page(page);
@@ -679,7 +679,7 @@ static int affs_write_end_ofs(struct file *file, struct address_space *mapping, · 15 unmodified lines
679679 int written;
680680
681681 from = pos & (PAGE_SIZE - 1);
682− to = pos + len;
682+ to = from + len;
683683 /*
684684 * XXX: not sure if this can handle short copies (len < copied), but
685685 * we don't have to, because the page should always be uptodate here,
fs/affs/inode.c+1−0
@@ -140,6 +140,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned long ino) · 139 unmodified lines
140140 inode->i_fop = &affs_file_operations;
141141 break;
142142 case ST_SOFTLINK:
143+ inode->i_size = strlen((char *)AFFS_HEAD(bh)->table);
143144 inode->i_mode |= S_IFLNK;
144145 inode_nohighmem(inode);
145146 inode->i_op = &affs_symlink_inode_operations;
fs/affs/namei.c+73−14
@@ -365,6 +365,7 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) · 364 unmodified lines
365365 symname++;
366366 }
367367 *p = 0;
368+ inode->i_size = i + 1;
368369 mark_buffer_dirty_inode(bh, inode);
369370 affs_brelse(bh);
370371 mark_inode_dirty(inode);
@@ -393,21 +394,14 @@ affs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) · 22 unmodified lines
393394 return affs_add_entry(dir, inode, dentry, ST_LINKFILE);
394395 }
395396
396−int
397+static int
397398 affs_rename(struct inode *old_dir, struct dentry *old_dentry,
398− struct inode *new_dir, struct dentry *new_dentry,
399− unsigned int flags)
399+ struct inode *new_dir, struct dentry *new_dentry)
400400 {
401401 struct super_block *sb = old_dir->i_sb;
402402 struct buffer_head *bh = NULL;
403403 int retval;
404404
405− if (flags & ~RENAME_NOREPLACE)
406− return -EINVAL;
407−
408− pr_debug("%s(old=%lu,\"%pd\" to new=%lu,\"%pd\")\n", __func__,
409− old_dir->i_ino, old_dentry, new_dir->i_ino, new_dentry);
410−
411405 retval = affs_check_name(new_dentry->d_name.name,
412406 new_dentry->d_name.len,
413407 affs_nofilenametruncate(old_dentry));
@@ -447,6 +441,76 @@ done: · 33 unmodified lines
447441 return retval;
448442 }
449443
444+static int
445+affs_xrename(struct inode *old_dir, struct dentry *old_dentry,
446+ struct inode *new_dir, struct dentry *new_dentry)
447+{
448+
449+ struct super_block *sb = old_dir->i_sb;
450+ struct buffer_head *bh_old = NULL;
451+ struct buffer_head *bh_new = NULL;
452+ int retval;
453+
454+ bh_old = affs_bread(sb, d_inode(old_dentry)->i_ino);
455+ if (!bh_old)
456+ return -EIO;
457+
458+ bh_new = affs_bread(sb, d_inode(new_dentry)->i_ino);
459+ if (!bh_new)
460+ return -EIO;
461+
462+ /* Remove old header from its parent directory. */
463+ affs_lock_dir(old_dir);
464+ retval = affs_remove_hash(old_dir, bh_old);
465+ affs_unlock_dir(old_dir);
466+ if (retval)
467+ goto done;
468+
469+ /* Remove new header from its parent directory. */
470+ affs_lock_dir(new_dir);
471+ retval = affs_remove_hash(new_dir, bh_new);
472+ affs_unlock_dir(new_dir);
473+ if (retval)
474+ goto done;
475+
476+ /* Insert old into the new directory with the new name. */
477+ affs_copy_name(AFFS_TAIL(sb, bh_old)->name, new_dentry);
478+ affs_fix_checksum(sb, bh_old);
479+ affs_lock_dir(new_dir);
480+ retval = affs_insert_hash(new_dir, bh_old);
481+ affs_unlock_dir(new_dir);
482+
483+ /* Insert new into the old directory with the old name. */
484+ affs_copy_name(AFFS_TAIL(sb, bh_new)->name, old_dentry);
485+ affs_fix_checksum(sb, bh_new);
486+ affs_lock_dir(old_dir);
487+ retval = affs_insert_hash(old_dir, bh_new);
488+ affs_unlock_dir(old_dir);
489+done:
490+ mark_buffer_dirty_inode(bh_old, new_dir);
491+ mark_buffer_dirty_inode(bh_new, old_dir);
492+ affs_brelse(bh_old);
493+ affs_brelse(bh_new);
494+ return retval;
495+}
496+
497+int affs_rename2(struct inode *old_dir, struct dentry *old_dentry,
498+ struct inode *new_dir, struct dentry *new_dentry,
499+ unsigned int flags)
500+{
501+
502+ if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE))
503+ return -EINVAL;
504+
505+ pr_debug("%s(old=%lu,\"%pd\" to new=%lu,\"%pd\")\n", __func__,
506+ old_dir->i_ino, old_dentry, new_dir->i_ino, new_dentry);
507+
508+ if (flags & RENAME_EXCHANGE)
509+ return affs_xrename(old_dir, old_dentry, new_dir, new_dentry);
510+
511+ return affs_rename(old_dir, old_dentry, new_dir, new_dentry);
512+}
513+
450514 static struct dentry *affs_get_parent(struct dentry *child)
451515 {
452516 struct inode *parent;
@@ -477,11 +541,6 @@ static struct inode *affs_nfs_get_inode(struct super_block *sb, u64 ino, · 24 unmodified lines
477541 if (IS_ERR(inode))
478542 return ERR_CAST(inode);
479543
480− if (generation && inode->i_generation != generation) {
481− iput(inode);
482− return ERR_PTR(-ESTALE);
483− }
484−
485544 return inode;
486545 }
487546
fs/binfmt_misc.c+1−1
@@ -818,7 +818,7 @@ static const struct super_operations s_ops = { · 817 unmodified lines
818818 static int bm_fill_super(struct super_block *sb, void *data, int silent)
819819 {
820820 int err;
821− static struct tree_descr bm_files[] = {
821+ static const struct tree_descr bm_files[] = {
822822 [2] = {"status", &bm_status_operations, S_IWUSR|S_IRUGO},
823823 [3] = {"register", &bm_register_operations, S_IWUSR},
824824 /* last one */ {""}
fs/buffer.c+5−14
@@ -49,7 +49,6 @@ · 48 unmodified lines
4949
5050 static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
5151 static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
52− unsigned long bio_flags,
5352 struct writeback_control *wbc);
5453
5554 #define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers)
@@ -1830,7 +1829,7 @@ int __block_write_full_page(struct inode *inode, struct page *page, · 1774 unmodified lines
18301829 do {
18311830 struct buffer_head *next = bh->b_this_page;
18321831 if (buffer_async_write(bh)) {
1833− submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, 0, wbc);
1832+ submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, wbc);
18341833 nr_underway++;
18351834 }
18361835 bh = next;
@@ -1884,7 +1883,7 @@ recover: · 47 unmodified lines
18841883 struct buffer_head *next = bh->b_this_page;
18851884 if (buffer_async_write(bh)) {
18861885 clear_buffer_dirty(bh);
1887− submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, 0, wbc);
1886+ submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, wbc);
18881887 nr_underway++;
18891888 }
18901889 bh = next;
@@ -3092,7 +3091,7 @@ void guard_bio_eod(int op, struct bio *bio) · 1201 unmodified lines
30923091 }
30933092
30943093 static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
3095− unsigned long bio_flags, struct writeback_control *wbc)
3094+ struct writeback_control *wbc)
30963095 {
30973096 struct bio *bio;
30983097
@@ -3127,7 +3126,6 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, · 28 unmodified lines
31273126
31283127 bio->bi_end_io = end_bio_bh_io_sync;
31293128 bio->bi_private = bh;
3130− bio->bi_flags |= bio_flags;
31313129
31323130 /* Take care of bh's that straddle the end of the device */
31333131 guard_bio_eod(op, bio);
@@ -3142,16 +3140,9 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, · 8 unmodified lines
31423140 return 0;
31433141 }
31443142
3145−int _submit_bh(int op, int op_flags, struct buffer_head *bh,
3146− unsigned long bio_flags)
3143+int submit_bh(int op, int op_flags, struct buffer_head *bh)
31473144 {
3148− return submit_bh_wbc(op, op_flags, bh, bio_flags, NULL);
3149−}
3150−EXPORT_SYMBOL_GPL(_submit_bh);
3151−
3152−int submit_bh(int op, int op_flags, struct buffer_head *bh)
3153−{
3154− return submit_bh_wbc(op, op_flags, bh, 0, NULL);
3145+ return submit_bh_wbc(op, op_flags, bh, NULL);
31553146 }
31563147 EXPORT_SYMBOL(submit_bh);
31573148
fs/compat_ioctl.c+1−1
@@ -833,7 +833,7 @@ static int compat_ioctl_preallocate(struct file *file, · 832 unmodified lines
833833 */
834834 #define XFORM(i) (((i) ^ ((i) << 27) ^ ((i) << 17)) & 0xffffffff)
835835
836−#define COMPATIBLE_IOCTL(cmd) XFORM(cmd),
836+#define COMPATIBLE_IOCTL(cmd) XFORM((u32)cmd),
837837 /* ioctl should not be warned about even if it's not implemented.
838838 Valid reasons to use this:
839839 - It is implemented with ->compat_ioctl on some device, but programs
fs/dcache.c+2−2
@@ -419,6 +419,8 @@ static void dentry_lru_add(struct dentry *dentry) · 418 unmodified lines
419419 {
420420 if (unlikely(!(dentry->d_flags & DCACHE_LRU_LIST)))
421421 d_lru_add(dentry);
422+ else if (unlikely(!(dentry->d_flags & DCACHE_REFERENCED)))
423+ dentry->d_flags |= DCACHE_REFERENCED;
422424 }
423425
424426 /**
@@ -779,8 +781,6 @@ repeat: · 354 unmodified lines
779781 goto kill_it;
780782 }
781783
782− if (!(dentry->d_flags & DCACHE_REFERENCED))
783− dentry->d_flags |= DCACHE_REFERENCED;
784784 dentry_lru_add(dentry);
785785
786786 dentry->d_lockref.count--;
fs/debugfs/inode.c+1−1
@@ -199,7 +199,7 @@ static const struct dentry_operations debugfs_dops = { · 198 unmodified lines
199199
200200 static int debug_fill_super(struct super_block *sb, void *data, int silent)
201201 {
202− static struct tree_descr debug_files[] = {{""}};
202+ static const struct tree_descr debug_files[] = {{""}};
203203 struct debugfs_fs_info *fsi;
204204 int err;
205205
fs/fcntl.c+4−10
@@ -899,16 +899,10 @@ static int __init fcntl_init(void) · 898 unmodified lines
899899 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
900900 * is defined as O_NONBLOCK on some platforms and not on others.
901901 */
902− BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32(
903− O_RDONLY | O_WRONLY | O_RDWR |
904− O_CREAT | O_EXCL | O_NOCTTY |
905− O_TRUNC | O_APPEND | /* O_NONBLOCK | */
906− __O_SYNC | O_DSYNC | FASYNC |
907− O_DIRECT | O_LARGEFILE | O_DIRECTORY |
908− O_NOFOLLOW | O_NOATIME | O_CLOEXEC |
909− __FMODE_EXEC | O_PATH | __O_TMPFILE |
910− __FMODE_NONOTIFY
911− ));
902+ BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ !=
903+ HWEIGHT32(
904+ (VALID_OPEN_FLAGS & ~(O_NONBLOCK | O_NDELAY)) |
905+ __FMODE_EXEC | __FMODE_NONOTIFY));
912906
913907 fasync_cache = kmem_cache_create("fasync_cache",
914908 sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL);
fs/fuse/control.c+1−1
@@ -292,7 +292,7 @@ void fuse_ctl_remove_conn(struct fuse_conn *fc) · 291 unmodified lines
292292
293293 static int fuse_ctl_fill_super(struct super_block *sb, void *data, int silent)
294294 {
295− struct tree_descr empty_descr = {""};
295+ static const struct tree_descr empty_descr = {""};
296296 struct fuse_conn *fc;
297297 int err;
298298
fs/inode.c+2−1
@@ -402,6 +402,8 @@ static void inode_lru_list_add(struct inode *inode) · 401 unmodified lines
402402 {
403403 if (list_lru_add(&inode->i_sb->s_inode_lru, &inode->i_lru))
404404 this_cpu_inc(nr_unused);
405+ else
406+ inode->i_state |= I_REFERENCED;
405407 }
406408
407409 /*
@@ -1489,7 +1491,6 @@ static void iput_final(struct inode *inode) · 1081 unmodified lines
14891491 drop = generic_drop_inode(inode);
14901492
14911493 if (!drop && (sb->s_flags & MS_ACTIVE)) {
1492− inode->i_state |= I_REFERENCED;
14931494 inode_add_lru(inode);
14941495 spin_unlock(&inode->i_lock);
14951496 return;
fs/internal.h+0−2
@@ -126,8 +126,6 @@ static inline bool atime_needs_update_rcu(const struct path *path, · 125 unmodified lines
126126 return __atime_needs_update(path, inode, true);
127127 }
128128
129−extern bool atime_needs_update_rcu(const struct path *, struct inode *);
130−
131129 /*
132130 * fs-writeback.c
133131 */
fs/libfs.c+1−1
@@ -507,7 +507,7 @@ EXPORT_SYMBOL(simple_write_end); · 506 unmodified lines
507507 * to pass it an appropriate max_reserved value to avoid collisions.
508508 */
509509 int simple_fill_super(struct super_block *s, unsigned long magic,
510− struct tree_descr *files)
510+ const struct tree_descr *files)
511511 {
512512 struct inode *inode;
513513 struct dentry *root;
fs/nfsd/nfsctl.c+1−1
@@ -1146,7 +1146,7 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size) · 1145 unmodified lines
11461146
11471147 static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
11481148 {
1149− static struct tree_descr nfsd_files[] = {
1149+ static const struct tree_descr nfsd_files[] = {
11501150 [NFSD_List] = {"exports", &exports_nfsd_operations, S_IRUGO},
11511151 [NFSD_Export_features] = {"export_features",
11521152 &export_features_operations, S_IRUGO},
fs/open.c+6−0
@@ -900,6 +900,12 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o · 899 unmodified lines
900900 int lookup_flags = 0;
901901 int acc_mode = ACC_MODE(flags);
902902
903+ /*
904+ * Clear out all open flags we don't know about so that we don't report
905+ * them in fcntl(F_GETFD) or similar interfaces.
906+ */
907+ flags &= VALID_OPEN_FLAGS;
908+
903909 if (flags & (O_CREAT | __O_TMPFILE))
904910 op->mode = (mode & S_IALLUGO) | S_IFREG;
905911 else
fs/tracefs/inode.c+1−1
@@ -266,7 +266,7 @@ static const struct super_operations tracefs_super_operations = { · 265 unmodified lines
266266
267267 static int trace_fill_super(struct super_block *sb, void *data, int silent)
268268 {
269− static struct tree_descr trace_files[] = {{""}};
269+ static const struct tree_descr trace_files[] = {{""}};
270270 struct tracefs_fs_info *fsi;
271271 int err;
272272
include/linux/buffer_head.h+0−2
@@ -196,8 +196,6 @@ void ll_rw_block(int, int, int, struct buffer_head * bh[]); · 195 unmodified lines
196196 int sync_dirty_buffer(struct buffer_head *bh);
197197 int __sync_dirty_buffer(struct buffer_head *bh, int op_flags);
198198 void write_dirty_buffer(struct buffer_head *bh, int op_flags);
199−int _submit_bh(int op, int op_flags, struct buffer_head *bh,
200− unsigned long bio_flags);
201199 int submit_bh(int, int, struct buffer_head *);
202200 void write_boundary_block(struct block_device *bdev,
203201 sector_t bblock, unsigned blocksize);
include/linux/fcntl.h+6−0
@@ -3,6 +3,12 @@ · 2 unmodified lines
33
44 #include <uapi/linux/fcntl.h>
55
6+/* list of all valid flags for the open/openat flags argument: */
7+#define VALID_OPEN_FLAGS \
8+ (O_RDONLY | O_WRONLY | O_RDWR | O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | \
9+ O_APPEND | O_NDELAY | O_NONBLOCK | O_NDELAY | __O_SYNC | O_DSYNC | \
10+ FASYNC | O_DIRECT | O_LARGEFILE | O_DIRECTORY | O_NOFOLLOW | \
11+ O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE)
612
713 #ifndef force_o_largefile
814 #define force_o_largefile() (BITS_PER_LONG != 32)
include/linux/fs.h+8−6
@@ -29,7 +29,6 @@ · 28 unmodified lines
2929 #include <linux/lockdep.h>
3030 #include <linux/percpu-rwsem.h>
3131 #include <linux/workqueue.h>
32−#include <linux/percpu-rwsem.h>
3332 #include <linux/delayed_call.h>
3433
3534 #include <asm/byteorder.h>
@@ -2925,17 +2924,19 @@ extern int vfs_statx_fd(unsigned int, struct kstat *, u32, unsigned int); · 2889 unmodified lines
29252924
29262925 static inline int vfs_stat(const char __user *filename, struct kstat *stat)
29272926 {
2928− return vfs_statx(AT_FDCWD, filename, 0, stat, STATX_BASIC_STATS);
2927+ return vfs_statx(AT_FDCWD, filename, AT_NO_AUTOMOUNT,
2928+ stat, STATX_BASIC_STATS);
29292929 }
29302930 static inline int vfs_lstat(const char __user *name, struct kstat *stat)
29312931 {
2932− return vfs_statx(AT_FDCWD, name, AT_SYMLINK_NOFOLLOW,
2932+ return vfs_statx(AT_FDCWD, name, AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT,
29332933 stat, STATX_BASIC_STATS);
29342934 }
29352935 static inline int vfs_fstatat(int dfd, const char __user *filename,
29362936 struct kstat *stat, int flags)
29372937 {
2938− return vfs_statx(dfd, filename, flags, stat, STATX_BASIC_STATS);
2938+ return vfs_statx(dfd, filename, flags | AT_NO_AUTOMOUNT,
2939+ stat, STATX_BASIC_STATS);
29392940 }
29402941 static inline int vfs_fstat(int fd, struct kstat *stat)
29412942 {
@@ -3000,9 +3001,10 @@ extern const struct file_operations simple_dir_operations; · 58 unmodified lines
30003001 extern const struct inode_operations simple_dir_inode_operations;
30013002 extern void make_empty_dir_inode(struct inode *inode);
30023003 extern bool is_empty_dir_inode(struct inode *inode);
3003−struct tree_descr { char *name; const struct file_operations *ops; int mode; };
3004+struct tree_descr { const char *name; const struct file_operations *ops; int mode; };
30043005 struct dentry *d_alloc_name(struct dentry *, const char *);
3005−extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *);
3006+extern int simple_fill_super(struct super_block *, unsigned long,
3007+ const struct tree_descr *);
30063008 extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
30073009 extern void simple_release_fs(struct vfsmount **mount, int *count);
30083010
kernel/bpf/inode.c+1−1
@@ -429,7 +429,7 @@ static int bpf_parse_options(char *data, struct bpf_mount_opts *opts) · 428 unmodified lines
429429
430430 static int bpf_fill_super(struct super_block *sb, void *data, int silent)
431431 {
432− static struct tree_descr bpf_rfiles[] = { { "" } };
432+ static const struct tree_descr bpf_rfiles[] = { { "" } };
433433 struct bpf_mount_opts opts;
434434 struct inode *inode;
435435 int ret;
security/inode.c+1−1
@@ -28,7 +28,7 @@ static int mount_count; · 27 unmodified lines
2828
2929 static int fill_super(struct super_block *sb, void *data, int silent)
3030 {
31− static struct tree_descr files[] = {{""}};
31+ static const struct tree_descr files[] = {{""}};
3232
3333 return simple_fill_super(sb, SECURITYFS_MAGIC, files);
3434 }
security/selinux/selinuxfs.c+2−2
@@ -1496,7 +1496,7 @@ static const struct file_operations sel_avc_cache_stats_ops = { · 1495 unmodified lines
14961496 static int sel_make_avc_files(struct dentry *dir)
14971497 {
14981498 int i;
1499− static struct tree_descr files[] = {
1499+ static const struct tree_descr files[] = {
15001500 { "cache_threshold",
15011501 &sel_avc_cache_threshold_ops, S_IRUGO|S_IWUSR },
15021502 { "hash_stats", &sel_avc_hash_stats_ops, S_IRUGO },
@@ -1805,7 +1805,7 @@ static int sel_fill_super(struct super_block *sb, void *data, int silent) · 302 unmodified lines
18051805 struct inode *inode;
18061806 struct inode_security_struct *isec;
18071807
1808− static struct tree_descr selinux_files[] = {
1808+ static const struct tree_descr selinux_files[] = {
18091809 [SEL_LOAD] = {"load", &sel_load_ops, S_IRUSR|S_IWUSR},
18101810 [SEL_ENFORCE] = {"enforce", &sel_enforce_ops, S_IRUGO|S_IWUSR},
18111811 [SEL_CONTEXT] = {"context", &transaction_ops, S_IRUGO|S_IWUGO},
security/smack/smackfs.c+1−1
@@ -2855,7 +2855,7 @@ static int smk_fill_super(struct super_block *sb, void *data, int silent) · 2854 unmodified lines
28552855 int rc;
28562856 struct inode *root_inode;
28572857
2858− static struct tree_descr smack_files[] = {
2858+ static const struct tree_descr smack_files[] = {
28592859 [SMK_LOAD] = {
28602860 "load", &smk_load_ops, S_IRUGO|S_IWUSR},
28612861 [SMK_CIPSO] = {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t