From: Nikolay Borisov <nborisov@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: Nikolay Borisov <nborisov@suse.com>
Subject: [PATCH v3] btrfs: Remove userspace transaction ioctls
Date: Wed, 10 Jan 2018 15:40:02 +0200 [thread overview]
Message-ID: <1515591602-17400-1-git-send-email-nborisov@suse.com> (raw)
In-Reply-To: <1515590477-22878-2-git-send-email-nborisov@suse.com>
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 <nborisov@suse.com>
---
V3:
Remove btrfs_ioctl_trans_end declaration in ctree.h
V2:
Remove btrfs_ioctl_trans_end reference in btrfs_sync_fil
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(&fs_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(&fs_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(&root->fs_info->open_ioctl_trans);
-
- mnt_drop_write_file(file);
- return 0;
-}
-
static noinline long btrfs_ioctl_start_sync(struct btrfs_root *root,
void __user *argp)
{
@@ -5573,10 +5482,6 @@ long btrfs_ioctl(struct file *file, unsigned int
return btrfs_ioctl_dev_info(fs_info, argp);
case BTRFS_IOC_BALANCE:
return btrfs_ioctl_balance(file, NULL);
- case BTRFS_IOC_TRANS_START:
- return btrfs_ioctl_trans_start(file);
- case BTRFS_IOC_TRANS_END:
- return btrfs_ioctl_trans_end(file);
case BTRFS_IOC_TREE_SEARCH:
return btrfs_ioctl_tree_search(file, argp);
case BTRFS_IOC_TREE_SEARCH_V2:
--
2.7.4
next prev parent reply other threads:[~2018-01-10 13:40 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 13:21 [PATCH 0/4] Finally remove userspace transaction support Nikolay Borisov
2018-01-10 13:21 ` [PATCH 1/4] btrfs: Remove userspace transaction ioctls Nikolay Borisov
2018-01-10 13:37 ` [PATCH v2] " Nikolay Borisov
2018-01-10 13:40 ` Nikolay Borisov [this message]
2018-01-10 13:21 ` [PATCH 2/4] btrfs: Remove code referencing unused TRANS_USERSPACE Nikolay Borisov
2018-01-10 13:21 ` [PATCH 3/4] btrfs: Remove transaction handle from btrfs_file_private Nikolay Borisov
2018-01-10 13:21 ` [PATCH 4/4] btrfs: Remove btrfs_fs_info::open_ioctl_trans Nikolay Borisov
2018-01-10 15:47 ` [PATCH 0/4] Finally remove userspace transaction support Josef Bacik
2018-01-10 16:26 ` David Sterba
2018-01-10 16:32 ` [PATCH RESEND 1/4] btrfs: Remove userspace transaction ioctls Nikolay Borisov
2018-01-10 16:32 ` [PATCH RESEND 2/4] btrfs: Remove code referencing unused TRANS_USERSPACE Nikolay Borisov
2018-02-02 17:40 ` David Sterba
2018-01-10 16:32 ` [PATCH RESEND 3/4] btrfs: Remove transaction handle from btrfs_file_private Nikolay Borisov
2018-02-02 17:40 ` David Sterba
2018-01-10 16:32 ` [PATCH RESEND 4/4] btrfs: Remove btrfs_fs_info::open_ioctl_trans Nikolay Borisov
2018-02-02 17:40 ` David Sterba
2018-02-02 17:39 ` [PATCH RESEND 1/4] btrfs: Remove userspace transaction ioctls David Sterba
2018-02-02 17:45 ` David Sterba
2018-02-05 8:41 ` [PATCH v2 " Nikolay Borisov
2018-02-05 8:41 ` [PATCH v2 2/4] btrfs: Remove btrfs_file_private::trans Nikolay Borisov
2018-02-05 8:41 ` [PATCH v2 3/4] btrfs: Remove code referencing unused TRANS_USERSPACE Nikolay Borisov
2018-02-05 8:41 ` [PATCH v2 4/4] btrfs: Remove btrfs_fs_info::open_ioctl_trans Nikolay Borisov
2018-02-05 8:52 ` [PATCH v2 1/4] btrfs: Remove userspace transaction ioctls Wang Shilong
2018-02-05 13:30 ` David Sterba
2018-02-05 14:27 ` Sage Weil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1515591602-17400-1-git-send-email-nborisov@suse.com \
--to=nborisov@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).