Skip to content

Commit 9d5403b

Browse files
ljskernelbrauner
authored andcommitted
fs: convert most other generic_file_*mmap() users to .mmap_prepare()
Update nearly all generic_file_mmap() and generic_file_readonly_mmap() callers to use generic_file_mmap_prepare() and generic_file_readonly_mmap_prepare() respectively. We update blkdev, 9p, afs, erofs, ext2, nfs, ntfs3, smb, ubifs and vboxsf file systems this way. Remaining users we cannot yet update are ecryptfs, fuse and cramfs. The former two are nested file systems that must support any underlying file ssytem, and cramfs inserts a mixed mapping which currently requires a VMA. Once all file systems have been converted to mmap_prepare(), we can then update nested file systems. Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Link: https://lore.kernel.org/08db85970d89b17a995d2cffae96fb4cc462377f.1750099179.git.lorenzo.stoakes@oracle.com Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent 951ea2f commit 9d5403b

14 files changed

Lines changed: 75 additions & 70 deletions

File tree

block/fops.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -911,14 +911,14 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
911911
return error;
912912
}
913913

914-
static int blkdev_mmap(struct file *file, struct vm_area_struct *vma)
914+
static int blkdev_mmap_prepare(struct vm_area_desc *desc)
915915
{
916-
struct inode *bd_inode = bdev_file_inode(file);
916+
struct file *file = desc->file;
917917

918-
if (bdev_read_only(I_BDEV(bd_inode)))
919-
return generic_file_readonly_mmap(file, vma);
918+
if (bdev_read_only(I_BDEV(bdev_file_inode(file))))
919+
return generic_file_readonly_mmap_prepare(desc);
920920

921-
return generic_file_mmap(file, vma);
921+
return generic_file_mmap_prepare(desc);
922922
}
923923

924924
const struct file_operations def_blk_fops = {
@@ -928,7 +928,7 @@ const struct file_operations def_blk_fops = {
928928
.read_iter = blkdev_read_iter,
929929
.write_iter = blkdev_write_iter,
930930
.iopoll = iocb_bio_iopoll,
931-
.mmap = blkdev_mmap,
931+
.mmap_prepare = blkdev_mmap_prepare,
932932
.fsync = blkdev_fsync,
933933
.unlocked_ioctl = blkdev_ioctl,
934934
#ifdef CONFIG_COMPAT

fs/9p/vfs_file.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -454,22 +454,23 @@ int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end,
454454
}
455455

456456
static int
457-
v9fs_file_mmap(struct file *filp, struct vm_area_struct *vma)
457+
v9fs_file_mmap_prepare(struct vm_area_desc *desc)
458458
{
459459
int retval;
460+
struct file *filp = desc->file;
460461
struct inode *inode = file_inode(filp);
461462
struct v9fs_session_info *v9ses = v9fs_inode2v9ses(inode);
462463

463464
p9_debug(P9_DEBUG_MMAP, "filp :%p\n", filp);
464465

465466
if (!(v9ses->cache & CACHE_WRITEBACK)) {
466467
p9_debug(P9_DEBUG_CACHE, "(read-only mmap mode)");
467-
return generic_file_readonly_mmap(filp, vma);
468+
return generic_file_readonly_mmap_prepare(desc);
468469
}
469470

470-
retval = generic_file_mmap(filp, vma);
471+
retval = generic_file_mmap_prepare(desc);
471472
if (!retval)
472-
vma->vm_ops = &v9fs_mmap_file_vm_ops;
473+
desc->vm_ops = &v9fs_mmap_file_vm_ops;
473474

474475
return retval;
475476
}
@@ -531,7 +532,7 @@ const struct file_operations v9fs_file_operations_dotl = {
531532
.release = v9fs_dir_release,
532533
.lock = v9fs_file_lock_dotl,
533534
.flock = v9fs_file_flock_dotl,
534-
.mmap = v9fs_file_mmap,
535+
.mmap_prepare = v9fs_file_mmap_prepare,
535536
.splice_read = v9fs_file_splice_read,
536537
.splice_write = iter_file_splice_write,
537538
.fsync = v9fs_file_fsync_dotl,

fs/afs/file.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include <trace/events/netfs.h>
2020
#include "internal.h"
2121

22-
static int afs_file_mmap(struct file *file, struct vm_area_struct *vma);
22+
static int afs_file_mmap_prepare(struct vm_area_desc *desc);
2323

2424
static ssize_t afs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter);
2525
static ssize_t afs_file_splice_read(struct file *in, loff_t *ppos,
@@ -35,7 +35,7 @@ const struct file_operations afs_file_operations = {
3535
.llseek = generic_file_llseek,
3636
.read_iter = afs_file_read_iter,
3737
.write_iter = netfs_file_write_iter,
38-
.mmap = afs_file_mmap,
38+
.mmap_prepare = afs_file_mmap_prepare,
3939
.splice_read = afs_file_splice_read,
4040
.splice_write = iter_file_splice_write,
4141
.fsync = afs_fsync,
@@ -492,16 +492,16 @@ static void afs_drop_open_mmap(struct afs_vnode *vnode)
492492
/*
493493
* Handle setting up a memory mapping on an AFS file.
494494
*/
495-
static int afs_file_mmap(struct file *file, struct vm_area_struct *vma)
495+
static int afs_file_mmap_prepare(struct vm_area_desc *desc)
496496
{
497-
struct afs_vnode *vnode = AFS_FS_I(file_inode(file));
497+
struct afs_vnode *vnode = AFS_FS_I(file_inode(desc->file));
498498
int ret;
499499

500500
afs_add_open_mmap(vnode);
501501

502-
ret = generic_file_mmap(file, vma);
502+
ret = generic_file_mmap_prepare(desc);
503503
if (ret == 0)
504-
vma->vm_ops = &afs_vm_ops;
504+
desc->vm_ops = &afs_vm_ops;
505505
else
506506
afs_drop_open_mmap(vnode);
507507
return ret;

fs/erofs/data.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -409,20 +409,20 @@ static const struct vm_operations_struct erofs_dax_vm_ops = {
409409
.huge_fault = erofs_dax_huge_fault,
410410
};
411411

412-
static int erofs_file_mmap(struct file *file, struct vm_area_struct *vma)
412+
static int erofs_file_mmap_prepare(struct vm_area_desc *desc)
413413
{
414-
if (!IS_DAX(file_inode(file)))
415-
return generic_file_readonly_mmap(file, vma);
414+
if (!IS_DAX(file_inode(desc->file)))
415+
return generic_file_readonly_mmap_prepare(desc);
416416

417-
if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE))
417+
if ((desc->vm_flags & VM_SHARED) && (desc->vm_flags & VM_MAYWRITE))
418418
return -EINVAL;
419419

420-
vma->vm_ops = &erofs_dax_vm_ops;
421-
vm_flags_set(vma, VM_HUGEPAGE);
420+
desc->vm_ops = &erofs_dax_vm_ops;
421+
desc->vm_flags |= VM_HUGEPAGE;
422422
return 0;
423423
}
424424
#else
425-
#define erofs_file_mmap generic_file_readonly_mmap
425+
#define erofs_file_mmap_prepare generic_file_readonly_mmap_prepare
426426
#endif
427427

428428
static loff_t erofs_file_llseek(struct file *file, loff_t offset, int whence)
@@ -452,7 +452,7 @@ static loff_t erofs_file_llseek(struct file *file, loff_t offset, int whence)
452452
const struct file_operations erofs_file_fops = {
453453
.llseek = erofs_file_llseek,
454454
.read_iter = erofs_file_read_iter,
455-
.mmap = erofs_file_mmap,
455+
.mmap_prepare = erofs_file_mmap_prepare,
456456
.get_unmapped_area = thp_get_unmapped_area,
457457
.splice_read = filemap_splice_read,
458458
};

fs/ext2/file.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,19 @@ static const struct vm_operations_struct ext2_dax_vm_ops = {
122122
.pfn_mkwrite = ext2_dax_fault,
123123
};
124124

125-
static int ext2_file_mmap(struct file *file, struct vm_area_struct *vma)
125+
static int ext2_file_mmap_prepare(struct vm_area_desc *desc)
126126
{
127+
struct file *file = desc->file;
128+
127129
if (!IS_DAX(file_inode(file)))
128-
return generic_file_mmap(file, vma);
130+
return generic_file_mmap_prepare(desc);
129131

130132
file_accessed(file);
131-
vma->vm_ops = &ext2_dax_vm_ops;
133+
desc->vm_ops = &ext2_dax_vm_ops;
132134
return 0;
133135
}
134136
#else
135-
#define ext2_file_mmap generic_file_mmap
137+
#define ext2_file_mmap_prepare generic_file_mmap_prepare
136138
#endif
137139

138140
/*
@@ -316,7 +318,7 @@ const struct file_operations ext2_file_operations = {
316318
#ifdef CONFIG_COMPAT
317319
.compat_ioctl = ext2_compat_ioctl,
318320
#endif
319-
.mmap = ext2_file_mmap,
321+
.mmap_prepare = ext2_file_mmap_prepare,
320322
.open = ext2_file_open,
321323
.release = ext2_release_file,
322324
.fsync = ext2_fsync,

fs/nfs/file.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,24 +207,25 @@ nfs_file_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe
207207
EXPORT_SYMBOL_GPL(nfs_file_splice_read);
208208

209209
int
210-
nfs_file_mmap(struct file *file, struct vm_area_struct *vma)
210+
nfs_file_mmap_prepare(struct vm_area_desc *desc)
211211
{
212+
struct file *file = desc->file;
212213
struct inode *inode = file_inode(file);
213214
int status;
214215

215216
dprintk("NFS: mmap(%pD2)\n", file);
216217

217-
/* Note: generic_file_mmap() returns ENOSYS on nommu systems
218+
/* Note: generic_file_mmap_prepare() returns ENOSYS on nommu systems
218219
* so we call that before revalidating the mapping
219220
*/
220-
status = generic_file_mmap(file, vma);
221+
status = generic_file_mmap_prepare(desc);
221222
if (!status) {
222-
vma->vm_ops = &nfs_file_vm_ops;
223+
desc->vm_ops = &nfs_file_vm_ops;
223224
status = nfs_revalidate_mapping(inode, file->f_mapping);
224225
}
225226
return status;
226227
}
227-
EXPORT_SYMBOL_GPL(nfs_file_mmap);
228+
EXPORT_SYMBOL_GPL(nfs_file_mmap_prepare);
228229

229230
/*
230231
* Flush any dirty pages for this process, and check for write errors.
@@ -899,7 +900,7 @@ const struct file_operations nfs_file_operations = {
899900
.llseek = nfs_file_llseek,
900901
.read_iter = nfs_file_read,
901902
.write_iter = nfs_file_write,
902-
.mmap = nfs_file_mmap,
903+
.mmap_prepare = nfs_file_mmap_prepare,
903904
.open = nfs_file_open,
904905
.flush = nfs_file_flush,
905906
.release = nfs_file_release,

fs/nfs/internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ loff_t nfs_file_llseek(struct file *, loff_t, int);
432432
ssize_t nfs_file_read(struct kiocb *, struct iov_iter *);
433433
ssize_t nfs_file_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe,
434434
size_t len, unsigned int flags);
435-
int nfs_file_mmap(struct file *, struct vm_area_struct *);
435+
int nfs_file_mmap_prepare(struct vm_area_desc *);
436436
ssize_t nfs_file_write(struct kiocb *, struct iov_iter *);
437437
int nfs_file_release(struct inode *, struct file *);
438438
int nfs_lock(struct file *, int, struct file_lock *);

fs/nfs/nfs4file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ static int nfs4_setlease(struct file *file, int arg, struct file_lease **lease,
456456
const struct file_operations nfs4_file_operations = {
457457
.read_iter = nfs_file_read,
458458
.write_iter = nfs_file_write,
459-
.mmap = nfs_file_mmap,
459+
.mmap_prepare = nfs_file_mmap_prepare,
460460
.open = nfs4_file_open,
461461
.flush = nfs4_file_flush,
462462
.release = nfs_file_release,

fs/ntfs3/file.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,15 @@ static int ntfs_zero_range(struct inode *inode, u64 vbo, u64 vbo_to)
261261
}
262262

263263
/*
264-
* ntfs_file_mmap - file_operations::mmap
264+
* ntfs_file_mmap_prepare - file_operations::mmap_prepare
265265
*/
266-
static int ntfs_file_mmap(struct file *file, struct vm_area_struct *vma)
266+
static int ntfs_file_mmap_prepare(struct vm_area_desc *desc)
267267
{
268+
struct file *file = desc->file;
268269
struct inode *inode = file_inode(file);
269270
struct ntfs_inode *ni = ntfs_i(inode);
270-
u64 from = ((u64)vma->vm_pgoff << PAGE_SHIFT);
271-
bool rw = vma->vm_flags & VM_WRITE;
271+
u64 from = ((u64)desc->pgoff << PAGE_SHIFT);
272+
bool rw = desc->vm_flags & VM_WRITE;
272273
int err;
273274

274275
if (unlikely(ntfs3_forced_shutdown(inode->i_sb)))
@@ -291,7 +292,7 @@ static int ntfs_file_mmap(struct file *file, struct vm_area_struct *vma)
291292

292293
if (rw) {
293294
u64 to = min_t(loff_t, i_size_read(inode),
294-
from + vma->vm_end - vma->vm_start);
295+
from + desc->end - desc->start);
295296

296297
if (is_sparsed(ni)) {
297298
/* Allocate clusters for rw map. */
@@ -319,7 +320,7 @@ static int ntfs_file_mmap(struct file *file, struct vm_area_struct *vma)
319320
}
320321
}
321322

322-
err = generic_file_mmap(file, vma);
323+
err = generic_file_mmap_prepare(desc);
323324
out:
324325
return err;
325326
}
@@ -1331,7 +1332,7 @@ const struct file_operations ntfs_file_operations = {
13311332
#endif
13321333
.splice_read = ntfs_file_splice_read,
13331334
.splice_write = ntfs_file_splice_write,
1334-
.mmap = ntfs_file_mmap,
1335+
.mmap_prepare = ntfs_file_mmap_prepare,
13351336
.open = ntfs_file_open,
13361337
.fsync = generic_file_fsync,
13371338
.fallocate = ntfs_fallocate,

fs/smb/client/cifsfs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,7 +1525,7 @@ const struct file_operations cifs_file_ops = {
15251525
.flock = cifs_flock,
15261526
.fsync = cifs_fsync,
15271527
.flush = cifs_flush,
1528-
.mmap = cifs_file_mmap,
1528+
.mmap_prepare = cifs_file_mmap_prepare,
15291529
.splice_read = filemap_splice_read,
15301530
.splice_write = iter_file_splice_write,
15311531
.llseek = cifs_llseek,
@@ -1545,7 +1545,7 @@ const struct file_operations cifs_file_strict_ops = {
15451545
.flock = cifs_flock,
15461546
.fsync = cifs_strict_fsync,
15471547
.flush = cifs_flush,
1548-
.mmap = cifs_file_strict_mmap,
1548+
.mmap_prepare = cifs_file_strict_mmap_prepare,
15491549
.splice_read = filemap_splice_read,
15501550
.splice_write = iter_file_splice_write,
15511551
.llseek = cifs_llseek,
@@ -1565,7 +1565,7 @@ const struct file_operations cifs_file_direct_ops = {
15651565
.flock = cifs_flock,
15661566
.fsync = cifs_fsync,
15671567
.flush = cifs_flush,
1568-
.mmap = cifs_file_mmap,
1568+
.mmap_prepare = cifs_file_mmap_prepare,
15691569
.splice_read = copy_splice_read,
15701570
.splice_write = iter_file_splice_write,
15711571
.unlocked_ioctl = cifs_ioctl,
@@ -1583,7 +1583,7 @@ const struct file_operations cifs_file_nobrl_ops = {
15831583
.release = cifs_close,
15841584
.fsync = cifs_fsync,
15851585
.flush = cifs_flush,
1586-
.mmap = cifs_file_mmap,
1586+
.mmap_prepare = cifs_file_mmap_prepare,
15871587
.splice_read = filemap_splice_read,
15881588
.splice_write = iter_file_splice_write,
15891589
.llseek = cifs_llseek,
@@ -1601,7 +1601,7 @@ const struct file_operations cifs_file_strict_nobrl_ops = {
16011601
.release = cifs_close,
16021602
.fsync = cifs_strict_fsync,
16031603
.flush = cifs_flush,
1604-
.mmap = cifs_file_strict_mmap,
1604+
.mmap_prepare = cifs_file_strict_mmap_prepare,
16051605
.splice_read = filemap_splice_read,
16061606
.splice_write = iter_file_splice_write,
16071607
.llseek = cifs_llseek,
@@ -1619,7 +1619,7 @@ const struct file_operations cifs_file_direct_nobrl_ops = {
16191619
.release = cifs_close,
16201620
.fsync = cifs_fsync,
16211621
.flush = cifs_flush,
1622-
.mmap = cifs_file_mmap,
1622+
.mmap_prepare = cifs_file_mmap_prepare,
16231623
.splice_read = copy_splice_read,
16241624
.splice_write = iter_file_splice_write,
16251625
.unlocked_ioctl = cifs_ioctl,

0 commit comments

Comments
 (0)