From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: with ECARTIS (v1.0.0; list xfs); Mon, 29 Sep 2008 00:41:06 -0700 (PDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m8T7f1HG018090 for ; Mon, 29 Sep 2008 00:41:04 -0700 Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4D96699E647 for ; Mon, 29 Sep 2008 00:42:36 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id JMpJoHUxI6zg7IiU for ; Mon, 29 Sep 2008 00:42:36 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m8T7gZIF023838 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Mon, 29 Sep 2008 09:42:35 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m8T7gY9X023836 for xfs@oss.sgi.com; Mon, 29 Sep 2008 09:42:34 +0200 Date: Mon, 29 Sep 2008 09:42:34 +0200 From: Christoph Hellwig Subject: Re: [PATCH] use proper mnt_want_write calls for handle ioctls Message-ID: <20080929074234.GA23785@lst.de> References: <20080814203952.GB18704@lst.de> <20080912084431.GA22641@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080912084431.GA22641@lst.de> Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com List-Id: xfs To: xfs@oss.sgi.com ping^2? On Fri, Sep 12, 2008 at 10:44:31AM +0200, Christoph Hellwig wrote: > ping? Without this patch the CVS tree won't properly work with > read-only bind mounts. > > On Thu, Aug 14, 2008 at 10:39:52PM +0200, Christoph Hellwig wrote: > > Since 2.6.26 all writes to filesystems need to be enclosed by a > > mnt_want_write / mnt_drop_write pair instead of checking for IS_RDONLY. > > > > XFs was updated for this in mainline but the changes to xfs_ioctl.c > > were never megred back into the CVS tree. > > > > The original commit introducing this was: > > > > commit 42a74f206b914db13ee1f5ae932dcd91a77c8579 > > Author: Dave Hansen > > Date: Fri Feb 15 14:37:46 2008 -0800 > > > > [PATCH] r/o bind mounts: elevate write count for ioctls() > > > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c > > =================================================================== > > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2008-08-14 14:54:53.000000000 -0300 > > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-08-14 15:15:49.000000000 -0300 > > @@ -543,8 +543,6 @@ xfs_attrmulti_attr_set( > > char *kbuf; > > int error = EFAULT; > > > > - if (IS_RDONLY(inode)) > > - return -EROFS; > > if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > > return EPERM; > > if (len > XATTR_SIZE_MAX) > > @@ -570,8 +568,6 @@ xfs_attrmulti_attr_remove( > > char *name, > > __uint32_t flags) > > { > > - if (IS_RDONLY(inode)) > > - return -EROFS; > > if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > > return EPERM; > > return xfs_attr_remove(XFS_I(inode), name, flags); > > @@ -581,6 +577,7 @@ STATIC int > > xfs_attrmulti_by_handle( > > xfs_mount_t *mp, > > void __user *arg, > > + struct file *parfilp, > > struct inode *parinode) > > { > > int error; > > @@ -634,13 +631,21 @@ xfs_attrmulti_by_handle( > > &ops[i].am_length, ops[i].am_flags); > > break; > > case ATTR_OP_SET: > > + ops[i].am_error = mnt_want_write(parfilp->f_path.mnt); > > + if (ops[i].am_error) > > + break; > > ops[i].am_error = xfs_attrmulti_attr_set(inode, > > attr_name, ops[i].am_attrvalue, > > ops[i].am_length, ops[i].am_flags); > > + mnt_drop_write(parfilp->f_path.mnt); > > break; > > case ATTR_OP_REMOVE: > > + ops[i].am_error = mnt_want_write(parfilp->f_path.mnt); > > + if (ops[i].am_error) > > + break; > > ops[i].am_error = xfs_attrmulti_attr_remove(inode, > > attr_name, ops[i].am_flags); > > + mnt_drop_write(parfilp->f_path.mnt); > > break; > > default: > > ops[i].am_error = EINVAL; > > @@ -1431,7 +1436,7 @@ xfs_ioctl( > > return xfs_attrlist_by_handle(mp, arg, inode); > > > > case XFS_IOC_ATTRMULTI_BY_HANDLE: > > - return xfs_attrmulti_by_handle(mp, arg, inode); > > + return xfs_attrmulti_by_handle(mp, arg, filp, inode); > > > > case XFS_IOC_SWAPEXT: { > > error = xfs_swapext((struct xfs_swapext __user *)arg); > ---end quoted text--- ---end quoted text---