On Fri 26-04-13 10:53:27, Marco Stornelli wrote: > Replaced sb_start_write with sb_start_write_killable inside > mnt_want_write and mnt_want_write_file. The patch looks good. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > > Signed-off-by: Marco Stornelli <marco.stornelli@xxxxxxxxx> > --- > 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 af73554..db09ecb 100644 > --- a/fs/namespace.c > +++ b/fs/namespace.c > @@ -344,7 +344,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); > @@ -404,7 +406,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 -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html