[PATCH 2/3] pmfs: Remove old write protection scheme
Matthew Wilcox
matthew.r.wilcox at intel.com
Thu Nov 7 17:03:02 EST 2013
The old scheme is slower than the new scheme and produces sparse warnings.
Just remove it.
Signed-off-by: Matthew Wilcox <matthew.r.wilcox at intel.com>
---
fs/pmfs/wprotect.c | 26 --------------------------
fs/pmfs/wprotect.h | 50 +++++++++++---------------------------------------
2 files changed, 11 insertions(+), 65 deletions(-)
diff --git a/fs/pmfs/wprotect.c b/fs/pmfs/wprotect.c
index c923509..c216bc3 100644
--- a/fs/pmfs/wprotect.c
+++ b/fs/pmfs/wprotect.c
@@ -19,8 +19,6 @@
#include <linux/io.h>
#include "pmfs.h"
-DEFINE_SPINLOCK(pmfs_writeable_lock);
-
static inline void wprotect_disable(void)
{
unsigned long cr0_val;
@@ -39,28 +37,6 @@ static inline void wprotect_enable(void)
write_cr0(cr0_val);
}
-/* FIXME: Use PAGE RW Bit */
-static int pmfs_writeable_old(void *vaddr, unsigned long size, int rw)
-{
- int ret = 0;
- unsigned long nrpages = size >> PAGE_SHIFT;
- unsigned long addr = (unsigned long)vaddr;
-
- /* Page aligned */
- addr &= PAGE_MASK;
-
- if (size & (PAGE_SIZE - 1))
- nrpages++;
-
- if (rw)
- ret = set_memory_rw(addr, nrpages);
- else
- ret = set_memory_ro(addr, nrpages);
-
- BUG_ON(ret);
- return 0;
-}
-
/* FIXME: Assumes that we are always called in the right order.
* pmfs_writeable(vaddr, size, 1);
* pmfs_writeable(vaddr, size, 0);
@@ -83,7 +59,5 @@ int pmfs_xip_mem_protect(struct super_block *sb, void *vaddr,
{
if (!pmfs_is_wprotected(sb))
return 0;
- if (pmfs_is_protected_old(sb))
- return pmfs_writeable_old(vaddr, size, rw);
return pmfs_writeable(vaddr, size, rw);
}
diff --git a/fs/pmfs/wprotect.h b/fs/pmfs/wprotect.h
index 818638b..4b20578 100644
--- a/fs/pmfs/wprotect.h
+++ b/fs/pmfs/wprotect.h
@@ -48,7 +48,6 @@ extern int pmfs_writeable(void *vaddr, unsigned long size, int rw);
extern int pmfs_xip_mem_protect(struct super_block *sb,
void *vaddr, unsigned long size, int rw);
-extern spinlock_t pmfs_writeable_lock;
static inline int pmfs_is_protected(struct super_block *sb)
{
struct pmfs_sb_info *sbi = (struct pmfs_sb_info *)sb->s_fs_info;
@@ -56,20 +55,13 @@ static inline int pmfs_is_protected(struct super_block *sb)
return sbi->s_mount_opt & PMFS_MOUNT_PROTECT;
}
-static inline int pmfs_is_protected_old(struct super_block *sb)
-{
- struct pmfs_sb_info *sbi = (struct pmfs_sb_info *)sb->s_fs_info;
-
- return sbi->s_mount_opt & PMFS_MOUNT_PROTECT_OLD;
-}
-
static inline int pmfs_is_wprotected(struct super_block *sb)
{
- return pmfs_is_protected(sb) || pmfs_is_protected_old(sb);
+ return pmfs_is_protected(sb);
}
static inline void
-__pmfs_memunlock_range(void *p, unsigned long len, int hold_lock)
+__pmfs_memunlock_range(void *p, unsigned long len)
{
/*
* NOTE: Ideally we should lock all the kernel to be memory safe
@@ -78,44 +70,34 @@ __pmfs_memunlock_range(void *p, unsigned long len, int hold_lock)
* the operations at fs level. We can't disable the interrupts
* because we could have a deadlock in this path.
*/
- if (hold_lock)
- spin_lock(&pmfs_writeable_lock);
pmfs_writeable(p, len, 1);
}
static inline void
-__pmfs_memlock_range(void *p, unsigned long len, int hold_lock)
+__pmfs_memlock_range(void *p, unsigned long len)
{
pmfs_writeable(p, len, 0);
- if (hold_lock)
- spin_unlock(&pmfs_writeable_lock);
}
static inline void pmfs_memunlock_range(struct super_block *sb, void *p,
unsigned long len)
{
if (pmfs_is_protected(sb))
- __pmfs_memunlock_range(p, len, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memunlock_range(p, len, 1);
+ __pmfs_memunlock_range(p, len);
}
static inline void pmfs_memlock_range(struct super_block *sb, void *p,
unsigned long len)
{
if (pmfs_is_protected(sb))
- __pmfs_memlock_range(p, len, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memlock_range(p, len, 1);
+ __pmfs_memlock_range(p, len);
}
static inline void pmfs_memunlock_super(struct super_block *sb,
struct pmfs_super_block *ps)
{
if (pmfs_is_protected(sb))
- __pmfs_memunlock_range(ps, PMFS_SB_SIZE, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memunlock_range(ps, PMFS_SB_SIZE, 1);
+ __pmfs_memunlock_range(ps, PMFS_SB_SIZE);
}
static inline void pmfs_memlock_super(struct super_block *sb,
@@ -123,18 +105,14 @@ static inline void pmfs_memlock_super(struct super_block *sb,
{
pmfs_sync_super(ps);
if (pmfs_is_protected(sb))
- __pmfs_memlock_range(ps, PMFS_SB_SIZE, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memlock_range(ps, PMFS_SB_SIZE, 1);
+ __pmfs_memlock_range(ps, PMFS_SB_SIZE);
}
static inline void pmfs_memunlock_inode(struct super_block *sb,
struct pmfs_inode *pi)
{
if (pmfs_is_protected(sb))
- __pmfs_memunlock_range(pi, PMFS_SB_SIZE, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memunlock_range(pi, PMFS_SB_SIZE, 1);
+ __pmfs_memunlock_range(pi, PMFS_SB_SIZE);
}
static inline void pmfs_memlock_inode(struct super_block *sb,
@@ -142,25 +120,19 @@ static inline void pmfs_memlock_inode(struct super_block *sb,
{
/* pmfs_sync_inode(pi); */
if (pmfs_is_protected(sb))
- __pmfs_memlock_range(pi, PMFS_SB_SIZE, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memlock_range(pi, PMFS_SB_SIZE, 1);
+ __pmfs_memlock_range(pi, PMFS_SB_SIZE);
}
static inline void pmfs_memunlock_block(struct super_block *sb, void *bp)
{
if (pmfs_is_protected(sb))
- __pmfs_memunlock_range(bp, sb->s_blocksize, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memunlock_range(bp, sb->s_blocksize, 1);
+ __pmfs_memunlock_range(bp, sb->s_blocksize);
}
static inline void pmfs_memlock_block(struct super_block *sb, void *bp)
{
if (pmfs_is_protected(sb))
- __pmfs_memlock_range(bp, sb->s_blocksize, 0);
- else if (pmfs_is_protected_old(sb))
- __pmfs_memlock_range(bp, sb->s_blocksize, 1);
+ __pmfs_memlock_range(bp, sb->s_blocksize);
}
#endif
--
1.8.4.rc3
More information about the Linux-pmfs
mailing list