ovl: split ovl_want_write() into two helpers
ovl_get_write_access() gets write access to upper mnt without taking freeze protection on upper sb and ovl_start_write() only takes freeze protection on upper sb. These helpers will be used to breakup the large ovl_want_write() scope during copy up into finer grained freeze protection scopes. Signed-off-by: Amir Goldstein <amir73il@gmail.com>
This commit is contained in:
parent
c002728f60
commit
d08d3b3c2c
@ -398,6 +398,10 @@ static inline bool ovl_open_flags_need_copy_up(int flags)
|
||||
}
|
||||
|
||||
/* util.c */
|
||||
int ovl_get_write_access(struct dentry *dentry);
|
||||
void ovl_put_write_access(struct dentry *dentry);
|
||||
void ovl_start_write(struct dentry *dentry);
|
||||
void ovl_end_write(struct dentry *dentry);
|
||||
int ovl_want_write(struct dentry *dentry);
|
||||
void ovl_drop_write(struct dentry *dentry);
|
||||
struct dentry *ovl_workdir(struct dentry *dentry);
|
||||
|
@ -17,12 +17,38 @@
|
||||
#include <linux/ratelimit.h>
|
||||
#include "overlayfs.h"
|
||||
|
||||
/* Get write access to upper mnt - may fail if upper sb was remounted ro */
|
||||
int ovl_get_write_access(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
return mnt_get_write_access(ovl_upper_mnt(ofs));
|
||||
}
|
||||
|
||||
/* Get write access to upper sb - may block if upper sb is frozen */
|
||||
void ovl_start_write(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
sb_start_write(ovl_upper_mnt(ofs)->mnt_sb);
|
||||
}
|
||||
|
||||
int ovl_want_write(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
return mnt_want_write(ovl_upper_mnt(ofs));
|
||||
}
|
||||
|
||||
void ovl_put_write_access(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
mnt_put_write_access(ovl_upper_mnt(ofs));
|
||||
}
|
||||
|
||||
void ovl_end_write(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
sb_end_write(ovl_upper_mnt(ofs)->mnt_sb);
|
||||
}
|
||||
|
||||
void ovl_drop_write(struct dentry *dentry)
|
||||
{
|
||||
struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
|
||||
|
Loading…
Reference in New Issue
Block a user