Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030793AbXAZUl1 (ORCPT ); Fri, 26 Jan 2007 15:41:27 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1030834AbXAZUl1 (ORCPT ); Fri, 26 Jan 2007 15:41:27 -0500 Received: from smtp.osdl.org ([65.172.181.24]:54066 "EHLO smtp.osdl.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030793AbXAZUl0 (ORCPT ); Fri, 26 Jan 2007 15:41:26 -0500 Date: Fri, 26 Jan 2007 12:41:20 -0800 From: Andrew Morton To: Alexey Dobriyan Cc: devel@openvz.org, linux-kernel@vger.kernel.org, Arnd Bergmann Subject: Re: [PATCH 1/3] lutimesat: simplify utime(2) Message-Id: <20070126124120.f8f78623.akpm@osdl.org> In-Reply-To: <20070126112142.GA11128@localhost.sw.ru> References: <20070126112142.GA11128@localhost.sw.ru> X-Mailer: Sylpheed version 2.2.7 (GTK+ 2.8.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2484 Lines: 81 On Fri, 26 Jan 2007 14:21:42 +0300 Alexey Dobriyan wrote: > Rewrite via do_utimes() like compat_sys_utime(). > > Signed-off-by: Alexey Dobriyan > --- > > fs/utimes.c | 50 +++++++------------------------------------------- > 1 file changed, 7 insertions(+), 43 deletions(-) > > --- a/fs/utimes.c > +++ b/fs/utimes.c > @@ -22,52 +22,16 @@ #ifdef __ARCH_WANT_SYS_UTIME > */ > asmlinkage long sys_utime(char __user * filename, struct utimbuf __user * times) > { > - int error; > - struct nameidata nd; > - struct inode * inode; > - struct iattr newattrs; > + struct timeval tv[2]; > > - error = user_path_walk(filename, &nd); > - if (error) > - goto out; > - inode = nd.dentry->d_inode; > - > - error = -EROFS; > - if (IS_RDONLY(inode)) > - goto dput_and_out; > - > - /* Don't worry, the checks are done in inode_change_ok() */ > - newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME; > if (times) { > - error = -EPERM; > - if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) > - goto dput_and_out; > - > - error = get_user(newattrs.ia_atime.tv_sec, ×->actime); > - newattrs.ia_atime.tv_nsec = 0; > - if (!error) > - error = get_user(newattrs.ia_mtime.tv_sec, ×->modtime); > - newattrs.ia_mtime.tv_nsec = 0; > - if (error) > - goto dput_and_out; > - > - newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET; > - } else { > - error = -EACCES; > - if (IS_IMMUTABLE(inode)) > - goto dput_and_out; > - > - if (current->fsuid != inode->i_uid && > - (error = vfs_permission(&nd, MAY_WRITE)) != 0) > - goto dput_and_out; > + if (get_user(tv[0].tv_sec, ×->actime) || > + get_user(tv[1].tv_sec, ×->modtime)) > + return -EFAULT; > + tv[0].tv_usec = 0; > + tv[1].tv_usec = 0; > } > - mutex_lock(&inode->i_mutex); > - error = notify_change(nd.dentry, &newattrs); > - mutex_unlock(&inode->i_mutex); > -dput_and_out: > - path_release(&nd); > -out: > - return error; > + return do_utimes(AT_FDCWD, filename, times ? tv : NULL); > } > > #endif I'm somewhat surprised that this wasn't done earlier. I wonder if there's some subtle reason why this won't work. How well tested is this? - 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/