| From 5f8db3bc09b7cb812b330b9fa3445d94c6766be5 Mon Sep 17 00:00:00 2001 |
| From: Martin Brandenburg <martin@omnibond.com> |
| Date: Tue, 25 Apr 2017 15:38:04 -0400 |
| Subject: [PATCH] orangefs: do not check possibly stale size on truncate |
| |
| commit 53950ef541675df48c219a8d665111a0e68dfc2f upstream. |
| |
| Let the server figure this out because our size might be out of date or |
| not present. |
| |
| The bug was that |
| |
| xfs_io -f -t -c "pread -v 0 100" /mnt/foo |
| echo "Test" > /mnt/foo |
| xfs_io -f -t -c "pread -v 0 100" /mnt/foo |
| |
| fails because the second truncate did not happen if nothing had |
| requested the size after the write in echo. Thus i_size was zero (not |
| present) and the orangefs_setattr though i_size was zero and there was |
| nothing to do. |
| |
| Signed-off-by: Martin Brandenburg <martin@omnibond.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Mike Marshall <hubcap@omnibond.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c |
| index 28a0557a69be..ca0b4b9cced4 100644 |
| --- a/fs/orangefs/inode.c |
| +++ b/fs/orangefs/inode.c |
| @@ -223,8 +223,7 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr) |
| if (ret) |
| goto out; |
| |
| - if ((iattr->ia_valid & ATTR_SIZE) && |
| - iattr->ia_size != i_size_read(inode)) { |
| + if (iattr->ia_valid & ATTR_SIZE) { |
| ret = orangefs_setattr_size(inode, iattr); |
| if (ret) |
| goto out; |
| -- |
| 2.12.0 |
| |