100 Commits
Author SHA1 Message Date
Al Viro 1b03bc5c11 typo fix: it's d_make_root, not d_make_inode...
Signed-off-by: Al Viro <[email protected]>
2019-07-20 23:17:30 -04:00
Al Viro 56cbb429d9 switch the remnants of releasing the mountpoint away from fs_pin
We used to need rather convoluted ordering trickery to guarantee
that dput() of ex-mountpoints happens before the final mntput()
of the same.  Since we don't need that anymore, there's no point
playing with fs_pin for that.

Signed-off-by: Al Viro <[email protected]>
2019-07-16 22:52:37 -04:00
Al Viro 2763d11912 get rid of detach_mnt()
Lift getting the original mount (dentry is actually not needed at all)
of the mountpoint into the callers - to do_move_mount() and pivot_root()
level.  That simplifies the cleanup in those and allows to get saner
arguments for attach_mnt_recursive().

Signed-off-by: Al Viro <[email protected]>
2019-07-16 22:50:11 -04:00
Al Viro 4edbe133f8 make struct mountpoint bear the dentry reference to mountpoint, not struct mount
Using dput_to_list() to shift the contributing reference from ->mnt_mountpoint
to ->mnt_mp->m_dentry.  Dentries are dropped (with dput_to_list()) as soon
as struct mountpoint is destroyed; in cases where we are under namespace_sem
we use the global list, shrinking it in namespace_unlock().  In case of
detaching stuck MNT_LOCKed children at final mntput_no_expire() we use a local
list and shrink it ourselves.  ->mnt_ex_mountpoint crap is gone.

Signed-off-by: Al Viro <[email protected]>
2019-07-16 22:43:40 -04:00
Al Viro 9bdebc2bd1 Teach shrink_dcache_parent() to cope with mixed-filesystem shrink lists
Currently, running into a shrink list that contains dentries from different
filesystems can cause several unpleasant things for shrink_dcache_parent()
and for umount(2).

The first problem is that there's a window during shrink_dentry_list() between
__dentry_kill() takes a victim out and dropping reference to its parent.  During
that window the parent looks like a genuine busy dentry.  shrink_dcache_parent()
(or, worse yet, shrink_dcache_for_umount()) coming at that time will see no
eviction candidates and no indication that it needs to wait for some
shrink_dentry_list() to proceed further.

That applies for any shrink list that might intersect with the subtree we are
trying to shrink; the only reason it does not blow on umount(2) in the mainline
is that we unregister the memory shrinker before hitting shrink_dcache_for_umount().

Another problem happens if something in a mixed-filesystem shrink list gets
be stuck in e.g. iput(), getting umount of unrelated fs to spin waiting for
the stuck shrinker to get around to our dentries.

Solution:
        1) have shrink_dentry_list() decrement the parent's refcount and
make sure it's on a shrink list (ours unless it already had been on some
other) before calling __dentry_kill().  That eliminates the window when
shrink_dcache_parent() would've blown past the entire subtree without
noticing anything with zero refcount not on shrink lists.
	2) when shrink_dcache_parent() has found no eviction candidates,
but some dentries are still sitting on shrink lists, rather than
repeating the scan in hope that shrinkers have progressed, scan looking
for something on shrink lists with zero refcount.  If such a thing is
found, grab rcu_read_lock() and stop the scan, with caller locking
it for eviction, dropping out of RCU and doing __dentry_kill(), with
the same treatment for parent as shrink_dentry_list() would do.

Note that right now mixed-filesystem shrink lists do not occur, so this
is not a mainline bug.  Howevere, there's a bunch of uses for such
beasts (e.g. the "try and evict everything we can out of given page"
patches; there are potential uses in mount-related code, considerably
simplifying the life in fs/namespace.c, etc.)

Signed-off-by: Al Viro <[email protected]>
2019-07-10 07:32:22 -04:00
Al Viro 333f7909a8 coallocate socket_wq with socket itself
socket->wq is assign-once, set when we are initializing both
struct socket it's in and struct socket_wq it points to.  As the
matter of fact, the only reason for separate allocation was the
ability to RCU-delay freeing of socket_wq.  RCU-delaying the
freeing of socket itself gets rid of that need, so we can just
fold struct socket_wq into the end of struct socket and simplify
the life both for sock_alloc_inode() (one allocation instead of
two) and for tun/tap oddballs, where we used to embed struct socket
and struct socket_wq into the same structure (now - embedding just
the struct socket).

Note that reference to struct socket_wq in struct sock does remain
a reference - that's unchanged.

Signed-off-by: Al Viro <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
2019-07-08 19:25:19 -07:00
Al Viro 6d7855c54e sockfs: switch to ->free_inode()
we do have an RCU-delayed part there already (freeing the wq),
so it's not like the pipe situation; moreover, it might be
worth considering coallocating wq with the rest of struct sock_alloc.
->sk_wq in struct sock would remain a pointer as it is, but
the object it normally points to would be coallocated with
struct socket...

Signed-off-by: Al Viro <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
2019-07-08 19:25:19 -07:00
Al Viro 037f11b475 mnt_init(): call shmem_init() unconditionally
No point having two call sites (earlier in init_rootfs() from
mnt_init() in case we are going to use shmem-style rootfs,
later from do_basic_setup() unconditionally), along with the
logics in shmem_init() itself to make the second call a no-op...

Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:59 -04:00
Al Viro 33488845f2 constify ksys_mount() string arguments
Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:59 -04:00
Al Viro fd3e007f6c don't bother with registering rootfs
init_mount_tree() can get to rootfs_fs_type directly and that simplifies
a lot of things.  We don't need to register it, we don't need to look
it up *and* we don't need to bother with preventing subsequent userland
mounts.  That's the way we should've done that from the very beginning.

There is a user-visible change, namely the disappearance of "rootfs"
from /proc/filesystems.  Note that it's been unmountable all along
and it didn't show up in /proc/mounts; however, it *is* a user-visible
change and theoretically some script might've been using its presence
in /proc/filesystems to tell 2.4.11+ from earlier kernels.

*IF* any complaints about behaviour change do show up, we could fake
it in /proc/filesystems.  I very much doubt we'll have to, though.

Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:59 -04:00
Al Viro 14a253ce42 init_rootfs(): don't bother with init_ramfs_fs()
the only thing done by the latter is making ramfs visible
to mount(2); we don't need it there - rootfs is separate
and, in fact, made visible to mount(2) in the same init_rootfs().

Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:59 -04:00
Al Viro c23a0bbab3 convenience helper: get_tree_single()
counterpart of mount_single(); switch fusectl to it

Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:58 -04:00
Al Viro 2ac295d4f0 convenience helper get_tree_nodev()
counterpart of mount_nodev().  Switch hugetlb and pseudo to it.

Signed-off-by: Al Viro <[email protected]>
2019-07-04 22:01:58 -04:00
Al Viro e4e59906cf fs/namespace.c: shift put_mountpoint() to callers of unhash_mnt()
make unhash_mnt() return the mountpoint to be dropped, let callers
deal with it.

Signed-off-by: Al Viro <[email protected]>
2019-07-04 18:58:38 -04:00
Al Viro adc9b5c091 __detach_mounts(): lookup_mountpoint() can't return ERR_PTR() anymore
... not since 1e9c75fb9c ("mnt: fix __detach_mounts infinite loop")

Signed-off-by: Al Viro <[email protected]>
2019-07-04 18:58:37 -04:00
Al Viro 1cfb7072c1 nfs: dget_parent() never returns NULL
Signed-off-by: Al Viro <[email protected]>
2019-07-04 18:58:37 -04:00
Al Viro 516162b92d ceph: don't open-code the check for dead lockref
Signed-off-by: Al Viro <[email protected]>
2019-07-04 18:58:23 -04:00
Al Viro 6fd2fe494b copy_process(): don't use ksys_close() on cleanups
anon_inode_getfd() should be used *ONLY* in situations when we are
guaranteed to be past the last failure point (including copying the
descriptor number to userland, at that).  And ksys_close() should
not be used for cleanups at all.

anon_inode_getfile() is there for all nontrivial cases like that.
Just use that...

Fixes: b3e5838252 ("clone: add CLONE_PIDFD")
Signed-off-by: Al Viro <[email protected]>
Reviewed-by: Jann Horn <[email protected]>
Signed-off-by: Christian Brauner <[email protected]>
2019-06-27 12:24:03 +02:00
Al Viro 02e5ad9738 perf_event_get(): don't bother with fget_raw()
... since we immediately follow that with check that it *is* an
opened perf file, with O_PATH ones ending with with the same
-EBADF we'd get for descriptor that isn't opened at all.

Signed-off-by: Al Viro <[email protected]>
2019-06-26 20:43:53 -04:00
Al Viro 8d9e46d807 fold mount_pseudo_xattr() into pseudo_fs_get_tree()
... now that all other callers are gone

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:06:16 -04:00
Al Viro c3aabf0780 move mount_capable() further out
Call graph of vfs_get_tree():
	vfs_fsconfig_locked()	# neither kernmount, nor submount
	do_new_mount()		# neither kernmount, nor submount
	fc_mount()
		afs_mntpt_do_automount()	# submount
		mount_one_hugetlbfs()		# kernmount
		pid_ns_prepare_proc()		# kernmount
		mq_create_mount()		# kernmount
		vfs_kern_mount()
			simple_pin_fs()		# kernmount
			vfs_submount()		# submount
			kern_mount()		# kernmount
			init_mount_tree()
			btrfs_mount()
			nfs_do_root_mount()

	The first two need the check (unconditionally).
init_mount_tree() is setting rootfs up; any capability
checks make zero sense for that one.  And btrfs_mount()/
nfs_do_root_mount() have the checks already done in their
callers.

	IOW, we can shift mount_capable() handling into
the two callers - one in the normal case of mount(2),
another - in fsconfig(2) handling of FSCONFIG_CMD_CREATE.
I.e. the syscalls that set a new filesystem up.

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:00:02 -04:00
Al Viro 059338aae3 move mount_capable() calls to vfs_get_tree()
sget_fc() is called only from ->get_tree() instances and
the only instance not calling it is legacy_get_tree(),
which calls mount_capable() directly.

In all sget_fc() callers the checks could be moved to the
very beginning of ->get_tree() - ->user_ns is not changed
in between.  So lifting the checks to the only caller of
->get_tree() is OK.

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:00:01 -04:00
Al Viro d5f68d330c cpuset: move mount -t cpuset logics into cgroup.c
... and get rid of the weird dances in ->get_tree() - that logics
can be easily handled in ->init_fs_context().

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:00:01 -04:00
Al Viro 46cf047a94 procfs: set ->user_ns before calling ->get_tree()
here it's even simpler than in mqueue - pid_ns_prepare_proc()
does everything needed anyway.

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:00:00 -04:00
Al Viro 709a643da8 mqueue: set ->user_ns before ->get_tree()
... so that we could lift the capability checks into ->get_tree()
caller

Signed-off-by: Al Viro <[email protected]>
2019-05-25 18:00:00 -04:00
Al Viro 20284ab742 switch mount_capable() to fs_context
now both callers of mount_capable() have access to fs_context;
the only difference is that for sget_fc() we have the possibility
of fc->global being true, while for legacy_get_tree() it's guaranteed
to be impossible.  Unify to more generic variant...

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:59 -04:00
Al Viro fd912087f4 legacy_get_tree(): pass fc->user_ns to mount_capable()
guaranteed to be equal to current_user_ns() here - it has not
been changed since alloc_fs_context() (nothing in legacy
methods changes it) and since we don't have SB_SUBMOUNT,
that must've been FS_CONTEXT_FOR_MOUNT.  And in that case
we have fc->user_ns set to fc->cred->user_ns, i.e.
current_cred()->user_ns, i.e. current_user_ns()

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:58 -04:00
Al Viro 2527b284de move the capability checks from sget_userns() to legacy_get_tree()
1) all call chains leading to sget_userns() pass through ->mount()
instances.
2) none of ->mount() instances is ever called directly - the only
call site is legacy_get_tree()
3) all remaining ->mount() instances end up calling sget_userns()

IOW, we might as well do the capability checks just before calling
->mount().  As for the arguments passed to mount_capable(),
in case of call chains to sget_userns() going through sget(),
we either don't call mount_capable() at all, or pass current_user_ns()
to it.  The call chains going through mount_pseudo_xattr() don't
call mount_capable() at all (SB_KERNMOUNT in flags on those).

That could've been split into smaller steps (lifting the checks
into sget(), then callers of sget(), then all the way to the
entries of every ->mount() out there, then to the sole caller),
but that would be too much churn for little benefit...

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:58 -04:00
Al Viro 0ce0cf12fc consolidate the capability checks in sget_{fc,userns}()
... into a common helper - mount_capable(type, userns)

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:56 -04:00
Al Viro feb8ae43a7 start massaging the checks in sget_...(): move to sget_userns()
there are 3 remaining callers of sget_userns() - sget(), mount_ns()
and mount_pseudo_xattr().  Extra check in sget() is conditional
upon mount being neither KERNMOUNT nor SUBMOUNT, the identical one
in mount_ns() - upon being not KERNMOUNT; mount_pseudo_xattr()
has no such checks at all.

However, mount_ns() is never used with SUBMOUNT and mount_pseudo_xattr()
is used only for KERNMOUNT, so both would be fine with the same logics
as currently done in sget(), allowing to consolidate the entire thing
in sget_userns() itself.

That's not where these checks will end up in the long run, though -
the whole reason why they'd been done so deep in the bowels of
mount(2) was that there had been no way for a filesystem to specify
which userns to look at until it has entered ->mount().

Now there is a place where filesystem could override the defaults -
->init_fs_context().  Which allows to pull the checks out into
the callers of vfs_get_tree().  That'll take quite a bit of
massage, but that mess is possible to tease apart.

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:55 -04:00
Al Viro f7a9945184 no need to protect against put_user_ns(NULL)
it's a no-op

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:54 -04:00
Al Viro 1f58bb18f6 mount_pseudo(): drop 'name' argument, switch to d_make_root()
Once upon a time we used to set ->d_name of e.g. pipefs root
so that d_path() on pipes would work.  These days it's
completely pointless - dentries of pipes are not even connected
to pipefs root.  However, mount_pseudo() had set the root
dentry name (passed as the second argument) and callers
kept inventing names to pass to it.  Including those that
didn't *have* any non-root dentries to start with...

All of that had been pointless for about 8 years now; it's
time to get rid of that cargo-culting...

Signed-off-by: Al Viro <[email protected]>
2019-05-25 17:59:24 -04:00
Al Viro 7e5f7bb08b unexport simple_dname()
Signed-off-by: Al Viro <[email protected]>
2019-05-21 08:23:41 +01:00
Al Viro 48b48750c3 zsmalloc: don't bother with dentry_operations
Signed-off-by: Al Viro <[email protected]>
2019-05-20 14:09:46 +01:00
Al Viro 985f404487 balloon: don't bother with dentry_operations
Signed-off-by: Al Viro <[email protected]>
2019-05-20 14:09:46 +01:00
Al Viro 8b1e058e0f cxlflash: don't bother with dentry_operations
Signed-off-by: Al Viro <[email protected]>
2019-05-20 14:09:46 +01:00
Al Viro 619a6d167b cxl: don't bother with dentry_operations
default will do

Signed-off-by: Al Viro <[email protected]>
2019-05-20 14:09:46 +01:00
Al Viro fb9273f2c1 drm: don't bother with super_operations and dentry_operations
defaults will do just fine.

Signed-off-by: Al Viro <[email protected]>
2019-05-20 14:09:46 +01:00
Al Viro 05883eee85 do_move_mount(): fix an unsafe use of is_anon_ns()
What triggers it is a race between mount --move and umount -l
of the source; we should reject it (the source is parentless *and*
not the root of anon namespace at that), but the check for namespace
being an anon one is broken in that case - is_anon_ns() needs
ns to be non-NULL.  Better fixed here than in is_anon_ns(), since
the rest of the callers is guaranteed to get a non-NULL argument...

Reported-by: [email protected]
Signed-off-by: Al Viro <[email protected]>
2019-05-09 02:32:50 -04:00
Al Viro 3b85d3028e media: switch to fdget()
Signed-off-by: Al Viro <[email protected]>
2019-05-02 02:25:54 -04:00
Al Viro fb38624353 drm_syncobj: switch to fdget()
Signed-off-by: Al Viro <[email protected]>
2019-05-02 02:25:54 -04:00
Al Viro 95ce0bce20 amdgpu: switch to fdget()
Signed-off-by: Al Viro <[email protected]>
2019-05-02 02:25:53 -04:00
Al Viro 79ea35bc20 don't open-code file_count()
Signed-off-by: Al Viro <[email protected]>
2019-05-02 02:25:40 -04:00
Al Viro 4e9036042f ufs: fix braino in ufs_get_inode_gid() for solaris UFS flavour
To choose whether to pick the GID from the old (16bit) or new (32bit)
field, we should check if the old gid field is set to 0xffff.  Mainline
checks the old *UID* field instead - cut'n'paste from the corresponding
code in ufs_get_inode_uid().

Fixes: 252e211e90
Signed-off-by: Al Viro <[email protected]>
2019-05-02 02:24:50 -04:00
Al Viro f276ae0dd6 orangefs: make use of ->free_inode()
Acked-by: Mike Marshall <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:27 -04:00
Al Viro 74b1da5645 shmem: make use of ->free_inode()
same situation as for hugetlbfs

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:27 -04:00
Al Viro b62de32257 hugetlb: make use of ->free_inode()
moving synchronous parts of ->destroy_inode() to ->evict_inode() is
not possible here - they are balancing the stuff done in ->alloc_inode(),
not the things acquired while using it or sanity checks.

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:27 -04:00
Al Viro 0b269ded4e overlayfs: make use of ->free_inode()
synchronous parts are left in ->destroy_inode()

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:27 -04:00
Al Viro b3b4a6e356 jfs: switch to ->free_inode()
synchronous part can be moved to ->evict_inode(), the rest -
->free_inode() fodder

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 9baf28bbfe fuse: switch to ->free_inode()
fuse_destroy_inode() is gone - sanity checks that need the stack
trace of the caller get moved into ->evict_inode(), the rest joins
the RCU-delayed part which becomes ->free_inode().

While we are at it, don't just pass the address of what happens
to be the first member of structure to kmem_cache_free() -
get_fuse_inode() is there for purpose and it gives the proper
container_of() use.  No behaviour change, but verifying correctness
is easier that way.

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 94053139d4 ext4: make use of ->free_inode()
the rest of this ->destroy_inode() instance could probably be folded
into ext4_evict_inode()

Reviewed-by: Jan Kara <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 586a94fdc9 ecryptfs: make use of ->free_inode()
no idea if crypto destruction could be moved there as well

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro cfa6d41263 ceph: use ->free_inode()
a lot of non-delayed work in this case; all of that is left in
->destroy_inode()

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 26602cab41 btrfs: use ->free_inode()
a lot of stuff remains in ->destroy_inode()

Acked-by: David Sterba <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 51b9fe48c4 afs: switch to use of ->free_inode()
debugging printks left in ->destroy_inode() and so's the
update of inode count; we could take the latter to RCU-delayed
part (would take only moving the check on module exit past
rcu_barrier() there), but debugging output ought to either
stay where it is or go into ->evict_inode()

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 53e2282999 dax: make use of ->free_inode()
we might want to drop ->destroy_inode() there - it's used only for
WARN_ON() now, and AFAICS that could be moved to ->evict_inode()
if we had one...

Reviewed-by: Jan Kara <[email protected]>
Acked-by: Dan Williams <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro a2b757fe0f ntfs: switch to ->free_inode()
move the synchronous stuff from ->destroy_inode() to ->evict_inode(),
turn the RCU-delayed part into ->free_inode()

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro f614ee1e3e securityfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 27afa27d67 apparmor: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro bef252fa19 rpcpipe: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 524845ff9c bpf: switch to ->free_inode()
Acked-by: Alexei Starovoitov <[email protected]>
Acked-by: Song Liu <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 015d795618 mqueue: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 98835e884c ufs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro d984892bd7 coda: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:26 -04:00
Al Viro 6becf8edf1 sysv: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro a78bb3838d udf: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro dc43175996 ubifs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 56b5af1931 squashfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro bcb8d71bda romfs: convert to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro a5a8cbea63 reiserfs: convert to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 45c2a3ff3a qnx6: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro bc40ddd12c qnx4: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 4aa6b55c05 procfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 363db959ae openpromfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro e91b9194bc ocfs2: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 9fbc000786 dlmfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 977c3d1894 nilfs2: switch to ->free_inode()
kill an extern that went stale 9 years ago, while we are at it...

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro ca1a199e3b nfs{,4}: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro d67a398a5f minix: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro db0bd7b719 jffs2: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:25 -04:00
Al Viro 07b0120710 isofs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 4d436d5cd5 hpfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 08ccfc5c36 hostfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 08ab229393 hfsplus: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 6d845e2286 hfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 784494e1d7 gfs2: switch to ->free_inode()
... and use GFS2_I() to get the containing gfs2_inode by inode;
yes, we can feed the address of the first member of structure
to kmem_cache_free(), but let's do it in an obviously safe way.

Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 9f179271e7 freevxfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro f9ec991d41 fat: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro d01718a050 f2fs: switch to ->free_inode()
Acked-by: Chao Yu <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro a2d1b88bec ext2: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro f415c51123 efs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 6234ddf429 debugfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro c2e6802e7b cifs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 41149cb08a bdev: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 8d8fc9cbc7 bfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:24 -04:00
Al Viro 49f82a808b befs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:23 -04:00
Al Viro 312a679183 affs: switch to ->free_inode()
Acked-by: David Sterba <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:23 -04:00
Al Viro 8f05a79535 adfs: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:23 -04:00
Al Viro 5e8a0770c0 9p: switch to ->free_inode()
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:23 -04:00
Al Viro 25af6c4a4a erofs: switch to ->free_inode()
Acked-by: Gao Xiang <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2019-05-01 22:43:23 -04:00