Messages in this thread | | | Subject | Re: [PATCH 2/2][RFC][BUG] msync: updating ctime and mtime at syncing | From | Peter Zijlstra <> | Date | Sat, 12 Jan 2008 10:36:05 +0100 |
| |
On Fri, 2008-01-11 at 03:44 +0300, Anton Salikhmetov wrote:
> +/* > + * Update the ctime and mtime stamps after checking if they are to be updated. > + */ > +void mapped_file_update_time(struct file *file) > +{ > + if (test_and_clear_bit(AS_MCTIME, &file->f_mapping->flags)) { > + get_file(file); > + file_update_time(file); > + fput(file); > + } > +} > +
I don't think you need the get/put file stuff here, because
> @@ -87,6 +87,8 @@ long do_fsync(struct file *file, int datasync) > goto out; > } > > + mapped_file_update_time(file); > + > ret = filemap_fdatawrite(mapping); > > /*
at this call-site we already hold an extra reference on the file, and
> @@ -74,14 +79,17 @@ asmlinkage long sys_msync(unsigned long start, size_t len, int flags) > break; > } > file = vma->vm_file; > - if ((flags & MS_SYNC) && file && (vma->vm_flags & VM_SHARED)) { > - get_file(file); > - up_read(&mm->mmap_sem); > - error = do_fsync(file, 0); > - fput(file); > - if (error) > - return error; > - down_read(&mm->mmap_sem); > + if (file && (vma->vm_flags & VM_SHARED)) { > + mapped_file_update_time(file); > + if (flags & MS_SYNC) { > + get_file(file); > + up_read(&mm->mmap_sem); > + error = do_fsync(file, 0); > + fput(file); > + if (error) > + return error; > + down_read(&mm->mmap_sem); > + } > } > > start = vma->vm_end;
here we hold the mmap_sem so the vma reference on the file can't go away.
| |