mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-14 10:16:14 +07:00
8d0347f6c3
Replace do_remount_sb() with a function, reconfigure_super(), that's fs_context aware. The fs_context is expected to be parameterised already and have ->root pointing to the superblock to be reconfigured. A legacy wrapper is provided that is intended to be called from the fs_context ops when those appear, but for now is called directly from reconfigure_super(). This wrapper invokes the ->remount_fs() superblock op for the moment. It is intended that the remount_fs() op will be phased out. The fs_context->purpose is set to FS_CONTEXT_FOR_RECONFIGURE to indicate that the context is being used for reconfiguration. do_umount_root() is provided to consolidate remount-to-R/O for umount and emergency remount by creating a context and invoking reconfiguration. do_remount(), do_umount() and do_emergency_remount_callback() are switched to use the new process. [AV -- fold UMOUNT and EMERGENCY_REMOUNT in; fixes the umount / bug, gets rid of pointless complexity] [AV -- set ->net_ns in all cases; nfs remount will need that] [AV -- shift security_sb_remount() call into reconfigure_super(); the callers that didn't do security_sb_remount() have NULL fc->security anyway, so it's a no-op for them] Signed-off-by: David Howells <dhowells@redhat.com> Co-developed-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
69 lines
2.2 KiB
C
69 lines
2.2 KiB
C
/* Filesystem superblock creation and reconfiguration context.
|
|
*
|
|
* Copyright (C) 2018 Red Hat, Inc. All Rights Reserved.
|
|
* Written by David Howells (dhowells@redhat.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public Licence
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the Licence, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _LINUX_FS_CONTEXT_H
|
|
#define _LINUX_FS_CONTEXT_H
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/security.h>
|
|
|
|
struct cred;
|
|
struct dentry;
|
|
struct file_operations;
|
|
struct file_system_type;
|
|
struct net;
|
|
struct user_namespace;
|
|
|
|
enum fs_context_purpose {
|
|
FS_CONTEXT_FOR_MOUNT, /* New superblock for explicit mount */
|
|
FS_CONTEXT_FOR_RECONFIGURE, /* Superblock reconfiguration (remount) */
|
|
};
|
|
|
|
/*
|
|
* Filesystem context for holding the parameters used in the creation or
|
|
* reconfiguration of a superblock.
|
|
*
|
|
* Superblock creation fills in ->root whereas reconfiguration begins with this
|
|
* already set.
|
|
*
|
|
* See Documentation/filesystems/mounting.txt
|
|
*/
|
|
struct fs_context {
|
|
struct file_system_type *fs_type;
|
|
void *fs_private; /* The filesystem's context */
|
|
struct dentry *root; /* The root and superblock */
|
|
struct user_namespace *user_ns; /* The user namespace for this mount */
|
|
struct net *net_ns; /* The network namespace for this mount */
|
|
const struct cred *cred; /* The mounter's credentials */
|
|
const char *source; /* The source name (eg. dev path) */
|
|
const char *subtype; /* The subtype to set on the superblock */
|
|
void *security; /* Linux S&M options */
|
|
unsigned int sb_flags; /* Proposed superblock flags (SB_*) */
|
|
unsigned int sb_flags_mask; /* Superblock flags that were changed */
|
|
enum fs_context_purpose purpose:8;
|
|
bool need_free:1; /* Need to call ops->free() */
|
|
};
|
|
|
|
/*
|
|
* fs_context manipulation functions.
|
|
*/
|
|
extern struct fs_context *fs_context_for_mount(struct file_system_type *fs_type,
|
|
unsigned int sb_flags);
|
|
extern struct fs_context *fs_context_for_reconfigure(struct dentry *dentry,
|
|
unsigned int sb_flags,
|
|
unsigned int sb_flags_mask);
|
|
|
|
extern int vfs_get_tree(struct fs_context *fc);
|
|
extern void put_fs_context(struct fs_context *fc);
|
|
|
|
#endif /* _LINUX_FS_CONTEXT_H */
|