Skip to content

Commit

Permalink
Btrfs: don't update atime on RO subvolumes
Browse files Browse the repository at this point in the history
Before the update_time inode operation was indroduced, it was
not possible to prevent updates of atime on RO subvolumes. VFS
was only able to check for RO on the mount, but did not know
anything about btrfs subvolumes.

btrfs_update_time does now check if the root is RO and skip
updating of times.

Signed-off-by: Alexander Block <ablock84@googlemail.com>
  • Loading branch information
Alexander Block authored and Chris Mason committed Jul 23, 2012
1 parent 063849e commit 2bc5565
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
5 changes: 5 additions & 0 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -4518,6 +4518,11 @@ int btrfs_dirty_inode(struct inode *inode)
static int btrfs_update_time(struct inode *inode, struct timespec *now,
int flags)
{
struct btrfs_root *root = BTRFS_I(inode)->root;

if (btrfs_root_readonly(root))
return -EROFS;

if (flags & S_VERSION)
inode_inc_iversion(inode);
if (flags & S_CTIME)
Expand Down
2 changes: 2 additions & 0 deletions fs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1551,6 +1551,8 @@ void touch_atime(struct path *path)
* Btrfs), but since we touch atime while walking down the path we
* really don't care if we failed to update the atime of the file,
* so just ignore the return value.
* We may also fail on filesystems that have the ability to make parts
* of the fs read only, e.g. subvolumes in Btrfs.
*/
update_time(inode, &now, S_ATIME);
mnt_drop_write(mnt);
Expand Down

0 comments on commit 2bc5565

Please sign in to comment.