Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
bb737bb
virtiofs: schedule blocking async replies in separate worker
rhvgoyal Apr 20, 2020
a5d8422
virtiofs: Add mount option and atime behavior to the doc
mmizuma Dec 17, 2019
0e9fb6f
fuse: BUG_ON correction in fuse_dev_splice_write()
vaverin Aug 19, 2019
75d8925
fuse: Update stale comment in queue_interrupt()
Feb 28, 2020
b0def88
ovl: resolve more conflicting mount options
amir73il Apr 9, 2020
3011645
ovl: cleanup non-empty directories in ovl_indexdir_cleanup()
amir73il Apr 3, 2020
773cb4c
ovl: prepare to copy up without workdir
amir73il Apr 3, 2020
62a8a85
ovl: index dir act as work dir
amir73il Apr 3, 2020
32b1924
ovl: skip overlayfs superblocks at global sync
koct9i Apr 9, 2020
654255f
ovl: inherit SB_NOSEC flag from upperdir
lostjeffle Apr 23, 2020
c21c839
ovl: whiteout inode sharing
cgxu519 Apr 24, 2020
399c109
ovl: sync dirty data when remounting to ro mode
cgxu519 Apr 22, 2020
144da23
ovl: return required buffer size for file handles
LubosD May 4, 2020
cf576c5
fuse: invalidate inode attr in writeback cache mode
eryugey May 12, 2020
614c026
fuse: always flush dirty data on close(2)
May 19, 2020
5157da2
fuse: always allow query of st_dev
May 19, 2020
7fd3abf
virtiofs: do not use fuse_fill_super_common() for device installation
rhvgoyal May 4, 2020
0058938
fuse: use dump_page
May 19, 2020
a5005c3
fuse: fix weird page warning
May 19, 2020
32f9887
fuse: don't check refcount after stealing page
May 19, 2020
5ddd9ce
fuse: update attr_version counter on fuse_notify_inval_inode()
May 19, 2020
6b2fb79
fuse: optimize writepages search
Sep 19, 2019
2c4656d
fuse: fix copy_file_range cache issues
May 20, 2020
9b46418
fuse: copy_file_range should truncate cache
May 20, 2020
522f6e6
ovl: fix out of bounds access warning in ovl_check_fb_len()
amir73il May 23, 2020
59fb201
ovl: simplify setting of origin for index lookup
rhvgoyal Jun 1, 2020
6815f47
ovl: use only uppermetacopy state in ovl_lookup()
rhvgoyal Jun 1, 2020
28166ab
ovl: initialize OVL_UPPERDATA in ovl_lookup()
rhvgoyal Jun 1, 2020
21d8d66
ovl: fix redirect traversal on metacopy dentries
rhvgoyal Jun 2, 2020
130fdbc
ovl: pass correct flags for opening real directory
Jun 2, 2020
48bd024
ovl: switch to mounter creds in readdir
Jun 2, 2020
56230d9
ovl: verify permissions in ovl_path_open()
Jun 2, 2020
292f902
ovl: call secutiry hook in ovl_real_ioctl()
Jun 2, 2020
05acefb
ovl: check permission to open real file
Jun 2, 2020
1434a65
ovl: drop negative dentry in upper layer
cgxu519 May 26, 2020
520da69
ovl: initialize error in ovl_copy_xattr
yshui May 27, 2020
08f4c7c
ovl: add accessor for ofs->upper_mnt
Jun 4, 2020
b8e42a6
ovl: get rid of redundant members in struct ovl_fs
Jun 4, 2020
df820f8
ovl: make private mounts longterm
Jun 4, 2020
b778e1e
ovl: only pass ->ki_flags to ovl_iocb_to_rwf()
Jun 4, 2020
74c6e38
ovl: make oip->index bool
Jun 4, 2020
2068cf7
ovl: remove unnecessary lock check
youngjun-89 Jun 7, 2020
2ca068b
afs: Fix memory leak in afs_put_sysnames()
Jun 2, 2020
5749ce9
afs: Fix file locking
dhowells Jun 4, 2020
9ca0652
afs: Fix use of BUG()
dhowells Jun 9, 2020
fed79fd
afs: Fix debugging statements with %px to be %p
dhowells Jun 9, 2020
4a06fa5
afs: Remove afs_zero_fid as it's not used
dhowells Feb 6, 2020
c68421b
afs: Make afs_zap_data() static
dhowells Feb 10, 2020
4964dd2
Merge tag 'afs-fixes-20200609' of git://git.kernel.org/pub/scm/linux/…
torvalds Jun 9, 2020
52435c8
Merge tag 'ovl-update-5.8' of git://git.kernel.org/pub/scm/linux/kern…
torvalds Jun 9, 2020
5b14671
Merge tag 'fuse-update-5.8' of git://git.kernel.org/pub/scm/linux/ker…
torvalds Jun 9, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Documentation/filesystems/overlayfs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,8 @@ pointed by REDIRECT. This should not be possible on local system as setting
"trusted." xattrs will require CAP_SYS_ADMIN. But it should be possible
for untrusted layers like from a pen drive.

Note: redirect_dir={off|nofollow|follow[*]} conflicts with metacopy=on, and
results in an error.
Note: redirect_dir={off|nofollow|follow[*]} and nfs_export=on mount options
conflict with metacopy=on, and will result in an error.

[*] redirect_dir=follow only conflicts with metacopy=on if upperdir=... is
given.
Expand Down Expand Up @@ -560,6 +560,9 @@ When the NFS export feature is enabled, all directory index entries are
verified on mount time to check that upper file handles are not stale.
This verification may cause significant overhead in some cases.

Note: the mount options index=off,nfs_export=on are conflicting and will
result in an error.


Testsuite
---------
Expand Down
7 changes: 7 additions & 0 deletions Documentation/filesystems/porting.rst
Original file line number Diff line number Diff line change
Expand Up @@ -858,3 +858,10 @@ be misspelled d_alloc_anon().
[should've been added in 2016] stale comment in finish_open() nonwithstanding,
failure exits in ->atomic_open() instances should *NOT* fput() the file,
no matter what. Everything is handled by the caller.

---

**mandatory**

clone_private_mount() returns a longterm mount now, so the proper destructor of
its result is kern_unmount() or kern_unmount_array().
14 changes: 14 additions & 0 deletions Documentation/filesystems/virtiofs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@ Mount file system with tag ``myfs`` on ``/mnt``:
Please see https://virtio-fs.gitlab.io/ for details on how to configure QEMU
and the virtiofsd daemon.

Mount options
-------------

virtiofs supports general VFS mount options, for example, remount,
ro, rw, context, etc. It also supports FUSE mount options.

atime behavior
^^^^^^^^^^^^^^

The atime-related mount options, for example, noatime, strictatime,
are ignored. The atime behavior for virtiofs is the same as the
underlying filesystem of the directory that has been exported
on the host.

Internals
=========
Since the virtio-fs device uses the FUSE protocol for file system requests, the
Expand Down
2 changes: 1 addition & 1 deletion fs/afs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -980,7 +980,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
if (!IS_ERR_OR_NULL(inode))
fid = AFS_FS_I(inode)->fid;

_debug("splice %px", dentry->d_inode);
_debug("splice %p", dentry->d_inode);
d = d_splice_alias(inode, dentry);
if (!IS_ERR_OR_NULL(d)) {
d->d_fsdata = dentry->d_fsdata;
Expand Down
2 changes: 1 addition & 1 deletion fs/afs/flock.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ static void afs_schedule_lock_extension(struct afs_vnode *vnode)
void afs_lock_op_done(struct afs_call *call)
{
struct afs_operation *op = call->op;
struct afs_vnode *vnode = op->lock.lvnode;
struct afs_vnode *vnode = op->file[0].vnode;

if (call->error == 0) {
spin_lock(&vnode->lock);
Expand Down
2 changes: 1 addition & 1 deletion fs/afs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ struct inode *afs_root_iget(struct super_block *sb, struct key *key)
* mark the data attached to an inode as obsolete due to a write on the server
* - might also want to ditch all the outstanding writes and dirty pages
*/
void afs_zap_data(struct afs_vnode *vnode)
static void afs_zap_data(struct afs_vnode *vnode)
{
_enter("{%llx:%llu}", vnode->fid.vid, vnode->fid.vnode);

Expand Down
2 changes: 0 additions & 2 deletions fs/afs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -795,7 +795,6 @@ struct afs_operation {
struct afs_read *req;
} fetch;
struct {
struct afs_vnode *lvnode; /* vnode being locked */
afs_lock_type_t type;
} lock;
struct {
Expand Down Expand Up @@ -1070,7 +1069,6 @@ extern int afs_ilookup5_test_by_fid(struct inode *, void *);
extern struct inode *afs_iget_pseudo_dir(struct super_block *, bool);
extern struct inode *afs_iget(struct afs_operation *, struct afs_vnode_param *);
extern struct inode *afs_root_iget(struct super_block *, struct key *);
extern void afs_zap_data(struct afs_vnode *);
extern bool afs_check_validity(struct afs_vnode *);
extern int afs_validate(struct afs_vnode *, struct key *);
extern int afs_getattr(const struct path *, struct kstat *, u32, unsigned int);
Expand Down
1 change: 1 addition & 0 deletions fs/afs/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@ void afs_put_sysnames(struct afs_sysnames *sysnames)
if (sysnames->subs[i] != afs_init_sysname &&
sysnames->subs[i] != sysnames->blank)
kfree(sysnames->subs[i]);
kfree(sysnames);
}
}

Expand Down
5 changes: 3 additions & 2 deletions fs/afs/vl_alias.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ static struct afs_volume *afs_sample_volume(struct afs_cell *cell, struct key *k
};

volume = afs_create_volume(&fc);
_leave(" = %px", volume);
_leave(" = %p", volume);
return volume;
}

Expand Down Expand Up @@ -73,7 +73,8 @@ static int afs_compare_addrs(const struct sockaddr_rxrpc *srx_a,
}

default:
BUG();
WARN_ON(1);
diff = 1;
}

out:
Expand Down
2 changes: 0 additions & 2 deletions fs/afs/yfsclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
#include "xdr_fs.h"
#include "protocol_yfs.h"

static const struct afs_fid afs_zero_fid;

#define xdr_size(x) (sizeof(*x) / sizeof(__be32))

static void xdr_decode_YFSFid(const __be32 **_bp, struct afs_fid *fid)
Expand Down
14 changes: 7 additions & 7 deletions fs/fuse/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ static int queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req)
list_add_tail(&req->intr_entry, &fiq->interrupts);
/*
* Pairs with smp_mb() implied by test_and_set_bit()
* from request_end().
* from fuse_request_end().
*/
smp_mb();
if (test_bit(FR_FINISHED, &req->flags)) {
Expand Down Expand Up @@ -764,16 +764,15 @@ static int fuse_check_page(struct page *page)
{
if (page_mapcount(page) ||
page->mapping != NULL ||
page_count(page) != 1 ||
(page->flags & PAGE_FLAGS_CHECK_AT_PREP &
~(1 << PG_locked |
1 << PG_referenced |
1 << PG_uptodate |
1 << PG_lru |
1 << PG_active |
1 << PG_reclaim))) {
pr_warn("trying to steal weird page\n");
pr_warn(" page=%p index=%li flags=%08lx, count=%i, mapcount=%i, mapping=%p\n", page, page->index, page->flags, page_count(page), page_mapcount(page), page->mapping);
1 << PG_reclaim |
1 << PG_waiters))) {
dump_page(page, "fuse: trying to steal weird page");
return 1;
}
return 0;
Expand Down Expand Up @@ -1977,8 +1976,9 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
struct pipe_buffer *ibuf;
struct pipe_buffer *obuf;

BUG_ON(nbuf >= pipe->ring_size);
BUG_ON(tail == head);
if (WARN_ON(nbuf >= count || tail == head))
goto out_free;

ibuf = &pipe->bufs[tail & mask];
obuf = &bufs[nbuf];

Expand Down
12 changes: 11 additions & 1 deletion fs/fuse/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1689,8 +1689,18 @@ static int fuse_getattr(const struct path *path, struct kstat *stat,
struct inode *inode = d_inode(path->dentry);
struct fuse_conn *fc = get_fuse_conn(inode);

if (!fuse_allow_current_process(fc))
if (!fuse_allow_current_process(fc)) {
if (!request_mask) {
/*
* If user explicitly requested *nothing* then don't
* error out, but return st_dev only.
*/
stat->result_mask = 0;
stat->dev = inode->i_sb->s_dev;
return 0;
}
return -EACCES;
}

return fuse_update_get_attr(inode, NULL, stat, request_mask, flags);
}
Expand Down
Loading