Re: [PATCH] CIFS: Use invalidate_inode_pages2 instead of invalidate_remote_inode (try #4)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2011/3/23 Steve French <smfrench@xxxxxxxxx>:
> Pavel,
> Jeff and I talked about invalidate_mapping and its uses this
> afternoon.  A few comments:
> 1)   Take a look at what happens on filemap_fdatawait call in
> invalidate_mapping to see if it makes sense to return errors through
> back to some of the callers of invalidate_mapping, in particular,
> strict_fsync.  If we can't write out the file data (ENOSPC, or host
> down etc.), we want to make sure that the return code gets sent back
> on any calls that can reasonably expect such an error.

vfs_fsync_range has already done filemap_fdatawait call - so, in this
case there is no need to do it again in cifs_invalidate_mapping. The
only reason for calling this is to invalidate_inode_pages2 but any
error there shouldn't affect fsync behavior, as I think.

> 2) If invalidate_inode_pages2 fails (e.g. with EBUSY, because one of
> the pages couldn't be freed from the mapping because it just got
> redirtied right after we flushed it the line before) we set the
> mapping to invalid but don't check
>    cifs_i->invalid_mapping
> in many places.  Should we add checks for cifs_i->invalid_mapping in
> more places?

The one place where we should add such a check is read call, but it
needs cifs_revalidate_file instead (that I am going to provide next)
before generic_file_aio_read. In this case cifs_revalidate will check
for invalid_mapping and needs to return a error if we could not
invalidate all inode pages in cifs_invalidate_mapping (because it
returns wrong data to the read call). But as you noticed lseek
shouldn't think about this error and it uses cifs_revalidate_file too.

So, we may add extra check for -EBUSY error code in callers of
cifs_revalidate_{dentry,file} and cifs_invaliadate_mapping and
separate them into two groups:
1) that aware about -EBUSY error code and return a error the it's caller.
these are: cifs_d_revalidate, cifs_file_aio_read (future
implementation), cifs_file_strict_mmap.
2) that doesn't aware about it and return ok in this case.
these are: cifs_getattrs, cifs_lseek, cifs_fsync.

Thoughts?

-- 
Best regards,
Pavel Shilovsky.
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux