[PATCH] Don't block writes to swap-files with ETXTBSY.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit dc617f29dbe5 ("vfs: don't allow writes to swap files")
broke swap-over-NFS as it introduced an ETXTBSY error when NFS tries to
swap-out using ->direct_IO().

There is no sound justification for this error.  File permissions are
sufficient to stop non-root users from writing to a swap file, and root
must always be cautious not to do anything dangerous.

These checks effectively provide a mandatory write lock on swap, and
mandatory locks are not supported in Linux.

So remove all the checks that return ETXTBSY when attempts are made to
write to swap.

Fixes: dc617f29dbe5 ("vfs: don't allow writes to swap files")
Signed-off-by: NeilBrown <neilb@xxxxxxx>
---
 fs/block_dev.c  | 3 ---
 fs/read_write.c | 6 ------
 2 files changed, 9 deletions(-)

diff --git a/fs/block_dev.c b/fs/block_dev.c
index 9ef4f1fc2cb0..e5605c88e6e9 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1623,9 +1623,6 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	if (bdev_read_only(I_BDEV(bd_inode)))
 		return -EPERM;
 
-	if (IS_SWAPFILE(bd_inode) && !is_hibernate_resume_dev(bd_inode->i_rdev))
-		return -ETXTBSY;
-
 	if (!iov_iter_count(from))
 		return 0;
 
diff --git a/fs/read_write.c b/fs/read_write.c
index 9db7adf160d2..14f1c622a066 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -1442,9 +1442,6 @@ static int generic_copy_file_checks(struct file *file_in, loff_t pos_in,
 	if (IS_IMMUTABLE(inode_out))
 		return -EPERM;
 
-	if (IS_SWAPFILE(inode_in) || IS_SWAPFILE(inode_out))
-		return -ETXTBSY;
-
 	/* Ensure offsets don't wrap. */
 	if (pos_in + count < pos_in || pos_out + count < pos_out)
 		return -EOVERFLOW;
@@ -1646,9 +1643,6 @@ ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
 	loff_t count;
 	int ret;
 
-	if (IS_SWAPFILE(inode))
-		return -ETXTBSY;
-
 	if (!iov_iter_count(from))
 		return 0;
 
-- 
2.32.0





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux