Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756816Ab3EDG57 (ORCPT ); Sat, 4 May 2013 02:57:59 -0400 Received: from mail-ea0-f170.google.com ([209.85.215.170]:44850 "EHLO mail-ea0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753772Ab3EDG55 (ORCPT ); Sat, 4 May 2013 02:57:57 -0400 Message-ID: <5184AFC4.60009@gmail.com> Date: Sat, 04 May 2013 08:50:44 +0200 From: Marco Stornelli User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: linux-fsdevel@vger.kernel.org CC: Alexander Viro , "J. Bruce Fields" , Chuck Lever , linux-kernel@vger.kernel.org, Jan Kara Subject: [PATCH 4/4] fsfreeze: return EINTR from mnt_want_write and mnt_want_write_file Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2483 Lines: 85 Replaced sb_start_write with sb_start_write_killable inside mnt_want_write and mnt_want_write_file. Signed-off-by: Marco Stornelli Reviewed-by: Jan Kara --- fs/namei.c | 6 ++++++ fs/namespace.c | 8 ++++++-- ipc/mqueue.c | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 57ae9c8..5f239fd 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2750,6 +2750,8 @@ static int do_last(struct nameidata *nd, struct path *path, retry_lookup: if (op->open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) { error = mnt_want_write(nd->path.mnt); + if (error == -EINTR) + goto out; if (!error) got_write = true; /* @@ -3053,6 +3055,10 @@ struct dentry *kern_path_create(int dfd, const char *pathname, /* don't fail immediately if it's r/o, at least try to report other errors */ err2 = mnt_want_write(nd.path.mnt); + if (err2 == -EINTR) { + dentry = ERR_PTR(-EINTR); + goto out; + } /* * Do the final lookup. */ diff --git a/fs/namespace.c b/fs/namespace.c index b4f96a5..2028e74 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -345,7 +345,9 @@ int mnt_want_write(struct vfsmount *m) { int ret; - sb_start_write(m->mnt_sb); + ret = sb_start_write_killable(m->mnt_sb); + if (ret < 0) + return ret; ret = __mnt_want_write(m); if (ret) sb_end_write(m->mnt_sb); @@ -405,7 +407,9 @@ int mnt_want_write_file(struct file *file) { int ret; - sb_start_write(file->f_path.mnt->mnt_sb); + ret = sb_start_write_killable(file->f_path.mnt->mnt_sb); + if (ret < 0) + return ret; ret = __mnt_want_write_file(file); if (ret) sb_end_write(file->f_path.mnt->mnt_sb); diff --git a/ipc/mqueue.c b/ipc/mqueue.c index e4e47f6..e8fdc03 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -800,7 +800,11 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, umode_t, mode, if (fd < 0) goto out_putname; - ro = mnt_want_write(mnt); /* we'll drop it in any case */ + ro = mnt_want_write(mnt); + if (ro == -EINTR) { + fd = ro; + goto out_putname; + } error = 0; mutex_lock(&root->d_inode->i_mutex); path.dentry = lookup_one_len(name->name, root, strlen(name->name)); -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/