Re: [PATCH RESEND 1/4] btrfs: Remove userspace transaction ioctls

2018-02-02 Thread David Sterba
On Wed, Jan 10, 2018 at 06:32:10PM +0200, Nikolay Borisov wrote:
> Commit 3558d4f88ec8 ("btrfs: Deprecate userspace transaction ioctls")
> marked the beginning of the end of userspace transaction. This commit
> finishes the job!
> 
> Signed-off-by: Nikolay Borisov 

This does not compile without the other patches, the last use of
btrfs_ioctl_trans_end is in patch 3/4. All patches should compile and
work separately, not just as the whole series.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH RESEND 1/4] btrfs: Remove userspace transaction ioctls

2018-02-02 Thread David Sterba
On Wed, Jan 10, 2018 at 06:32:10PM +0200, Nikolay Borisov wrote:
> Commit 3558d4f88ec8 ("btrfs: Deprecate userspace transaction ioctls")
> marked the beginning of the end of userspace transaction. This commit
> finishes the job!
> 
> Signed-off-by: Nikolay Borisov 

Reviewed-by: David Sterba 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH RESEND 1/4] btrfs: Remove userspace transaction ioctls

2018-01-10 Thread Nikolay Borisov
Commit 3558d4f88ec8 ("btrfs: Deprecate userspace transaction ioctls")
marked the beginning of the end of userspace transaction. This commit
finishes the job!

Signed-off-by: Nikolay Borisov 
---
 fs/btrfs/ctree.h |  1 -
 fs/btrfs/file.c  |  6 
 fs/btrfs/ioctl.c | 95 
 3 files changed, 102 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 1a462ab85c49..6a4752177ad8 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3193,7 +3193,6 @@ void btrfs_destroy_inode(struct inode *inode);
 int btrfs_drop_inode(struct inode *inode);
 int __init btrfs_init_cachep(void);
 void btrfs_destroy_cachep(void);
-long btrfs_ioctl_trans_end(struct file *file);
 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
 struct btrfs_root *root, int *was_new);
 struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index cba2ac371ce0..291036513017 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2189,12 +2189,6 @@ int btrfs_sync_file(struct file *file, loff_t start, 
loff_t end, int datasync)
}
 
/*
-* ok we haven't committed the transaction yet, lets do a commit
-*/
-   if (file->private_data)
-   btrfs_ioctl_trans_end(file);
-
-   /*
 * We use start here because we will need to wait on the IO to complete
 * in btrfs_sync_log, which could require joining a transaction (for
 * example checking cross references in the nocow path).  If we use join
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index f573cad72b7e..3094e079fc4f 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3935,73 +3935,6 @@ int btrfs_clone_file_range(struct file *src_file, loff_t 
off,
return btrfs_clone_files(dst_file, src_file, off, len, destoff);
 }
 
-/*
- * there are many ways the trans_start and trans_end ioctls can lead
- * to deadlocks.  They should only be used by applications that
- * basically own the machine, and have a very in depth understanding
- * of all the possible deadlocks and enospc problems.
- */
-static long btrfs_ioctl_trans_start(struct file *file)
-{
-   struct inode *inode = file_inode(file);
-   struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
-   struct btrfs_root *root = BTRFS_I(inode)->root;
-   struct btrfs_trans_handle *trans;
-   struct btrfs_file_private *private;
-   int ret;
-   static bool warned = false;
-
-   ret = -EPERM;
-   if (!capable(CAP_SYS_ADMIN))
-   goto out;
-
-   if (!warned) {
-   btrfs_warn(fs_info,
-   "Userspace transaction mechanism is considered "
-   "deprecated and slated to be removed in 4.17. "
-   "If you have a valid use case please "
-   "speak up on the mailing list");
-   WARN_ON(1);
-   warned = true;
-   }
-
-   ret = -EINPROGRESS;
-   private = file->private_data;
-   if (private && private->trans)
-   goto out;
-   if (!private) {
-   private = kzalloc(sizeof(struct btrfs_file_private),
- GFP_KERNEL);
-   if (!private)
-   return -ENOMEM;
-   file->private_data = private;
-   }
-
-   ret = -EROFS;
-   if (btrfs_root_readonly(root))
-   goto out;
-
-   ret = mnt_want_write_file(file);
-   if (ret)
-   goto out;
-
-   atomic_inc(_info->open_ioctl_trans);
-
-   ret = -ENOMEM;
-   trans = btrfs_start_ioctl_transaction(root);
-   if (IS_ERR(trans))
-   goto out_drop;
-
-   private->trans = trans;
-   return 0;
-
-out_drop:
-   atomic_dec(_info->open_ioctl_trans);
-   mnt_drop_write_file(file);
-out:
-   return ret;
-}
-
 static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)
 {
struct inode *inode = file_inode(file);
@@ -4243,30 +4176,6 @@ static long btrfs_ioctl_space_info(struct btrfs_fs_info 
*fs_info,
return ret;
 }
 
-/*
- * there are many ways the trans_start and trans_end ioctls can lead
- * to deadlocks.  They should only be used by applications that
- * basically own the machine, and have a very in depth understanding
- * of all the possible deadlocks and enospc problems.
- */
-long btrfs_ioctl_trans_end(struct file *file)
-{
-   struct inode *inode = file_inode(file);
-   struct btrfs_root *root = BTRFS_I(inode)->root;
-   struct btrfs_file_private *private = file->private_data;
-
-   if (!private || !private->trans)
-   return -EINVAL;
-
-   btrfs_end_transaction(private->trans);
-   private->trans = NULL;
-
-   atomic_dec(>fs_info->open_ioctl_trans);
-
-   mnt_drop_write_file(file);
-   return 0;
-}
-
 static noinline long