// SPDX-License-Identifier: GPL-2.0-only/* * Copyright (C) 2011 Novell Inc. * Copyright (C) 2016 Red Hat, Inc. */#include<linux/fs.h>#include<linux/mount.h>#include<linux/slab.h>#include<linux/cred.h>#include<linux/xattr.h>#include<linux/exportfs.h>#include<linux/file.h>#include<linux/fileattr.h>#include<linux/uuid.h>#include<linux/namei.h>#include<linux/ratelimit.h>#include"overlayfs.h"/* Get write access to upper mnt - may fail if upper sb was remounted ro */intovl_get_write_access(structdentry*dentry){structovl_fs*ofs=OVL_FS(dentry->d_sb);returnmnt_get_write_access(ovl_upper_mnt(ofs));}/* Get write access to upper sb - may block if upper sb is frozen */voidovl_start_write(structdentry*dentry){structovl_fs*ofs=OVL_FS(dentry->d_sb);sb_start_write(ovl_upper_mnt(ofs)->mnt_sb);}intovl_want_write(structdentry*dentry){structovl_fs*ofs=OVL_FS(dentry->d_sb);returnmnt_want_write(ovl_upper_mnt(ofs));}voidovl_put_write_access(structdentry*dentry){structovl_fs*ofs=OVL_FS(dentry->d_sb);mnt_put_write_access(ovl_upper_mnt(ofs));}voidovl_end_write(structdentry*dentry){structovl_fs*ofs <