From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Mon, 17 Jan 2011 22:43:43 +0000 (-0800)
Subject: Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs... 
X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=eee2a817df7c5a6e569f353f8be78cc1b3604bb6;p=openwrt%2Fstaging%2Fblogic.git

Merge branch 'for-linus' of git://git./linux/kernel/git/mason/btrfs-unstable

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (25 commits)
  Btrfs: forced readonly mounts on errors
  btrfs: Require CAP_SYS_ADMIN for filesystem rebalance
  Btrfs: don't warn if we get ENOSPC in btrfs_block_rsv_check
  btrfs: Fix memory leak in btrfs_read_fs_root_no_radix()
  btrfs: check NULL or not
  btrfs: Don't pass NULL ptr to func that may deref it.
  btrfs: mount failure return value fix
  btrfs: Mem leak in btrfs_get_acl()
  btrfs: fix wrong free space information of btrfs
  btrfs: make the chunk allocator utilize the devices better
  btrfs: restructure find_free_dev_extent()
  btrfs: fix wrong calculation of stripe size
  btrfs: try to reclaim some space when chunk allocation fails
  btrfs: fix wrong data space statistics
  fs/btrfs: Fix build of ctree
  Btrfs: fix off by one while setting block groups readonly
  Btrfs: Add BTRFS_IOC_SUBVOL_GETFLAGS/SETFLAGS ioctls
  Btrfs: Add readonly snapshots support
  Btrfs: Refactor btrfs_ioctl_snap_create()
  btrfs: Extract duplicate decompress code
  ...
---

eee2a817df7c5a6e569f353f8be78cc1b3604bb6
diff --cc fs/btrfs/inode.c
index 902afbf50811,1562765c8e6a..160b55b3e132
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@@ -7103,11 -7228,15 +7127,15 @@@ static int btrfs_set_page_dirty(struct 
  	return __set_page_dirty_nobuffers(page);
  }
  
 -static int btrfs_permission(struct inode *inode, int mask)
 +static int btrfs_permission(struct inode *inode, int mask, unsigned int flags)
  {
+ 	struct btrfs_root *root = BTRFS_I(inode)->root;
+ 
+ 	if (btrfs_root_readonly(root) && (mask & MAY_WRITE))
+ 		return -EROFS;
  	if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE))
  		return -EACCES;
 -	return generic_permission(inode, mask, btrfs_check_acl);
 +	return generic_permission(inode, mask, flags, btrfs_check_acl);
  }
  
  static const struct inode_operations btrfs_dir_inode_operations = {