Unionfs: copy lower times in fsync/fasync only when needed
authorErez Zadok <ezk@cs.sunysb.edu>
Thu, 3 Apr 2008 17:15:59 +0000 (13:15 -0400)
committerErez Zadok <ezk@cs.sunysb.edu>
Fri, 12 Aug 2011 02:38:06 +0000 (22:38 -0400)
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
fs/unionfs/file.c

index 1fe4c30ac5994e6940c7113d66eaeb84f3c390f3..f14b38bb15e71c5439f06537bca8620c26db094c 100644 (file)
@@ -196,13 +196,13 @@ int unionfs_fsync(struct file *file, struct dentry *dentry, int datasync)
                err = lower_inode->i_fop->fsync(lower_file,
                                                lower_dentry,
                                                datasync);
+               if (!err && bindex == bstart)
+                       fsstack_copy_attr_times(inode, lower_inode);
                mutex_unlock(&lower_inode->i_mutex);
                if (err)
                        goto out;
        }
 
-       unionfs_copy_attr_times(inode);
-
 out:
        if (!err)
                unionfs_check_file(file);
@@ -244,13 +244,13 @@ int unionfs_fasync(int fd, struct file *file, int flag)
                lower_file = unionfs_lower_file_idx(file, bindex);
                mutex_lock(&lower_inode->i_mutex);
                err = lower_inode->i_fop->fasync(fd, lower_file, flag);
+               if (!err && bindex == bstart)
+                       fsstack_copy_attr_times(inode, lower_inode);
                mutex_unlock(&lower_inode->i_mutex);
                if (err)
                        goto out;
        }
 
-       unionfs_copy_attr_times(inode);
-
 out:
        if (!err)
                unionfs_check_file(file);