mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
cifs: Move cifs_loose_read_iter() and cifs_file_write_iter() to file.c
Move cifs_loose_read_iter() and cifs_file_write_iter() to file.c so that they are colocated with similar functions rather than being split with cifsfs.c. Signed-off-by: David Howells <dhowells@redhat.com> cc: Steve French <sfrench@samba.org> cc: Shyam Prasad N <nspmangalore@gmail.com> cc: Rohith Surabattula <rohiths.msft@gmail.com> cc: Jeff Layton <jlayton@kernel.org> cc: linux-cifs@vger.kernel.org cc: netfs@lists.linux.dev cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org
This commit is contained in:
parent
dc5939de82
commit
1a5b4edd97
|
|
@ -986,61 +986,6 @@ cifs_smb3_do_mount(struct file_system_type *fs_type,
|
|||
return root;
|
||||
}
|
||||
|
||||
|
||||
static ssize_t
|
||||
cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
|
||||
if (iocb->ki_flags & IOCB_DIRECT)
|
||||
return cifs_user_readv(iocb, iter);
|
||||
|
||||
rc = cifs_revalidate_mapping(inode);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return generic_file_read_iter(iocb, iter);
|
||||
}
|
||||
|
||||
static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(inode);
|
||||
ssize_t written;
|
||||
int rc;
|
||||
|
||||
if (iocb->ki_filp->f_flags & O_DIRECT) {
|
||||
written = cifs_user_writev(iocb, from);
|
||||
if (written > 0 && CIFS_CACHE_READ(cinode)) {
|
||||
cifs_zap_mapping(inode);
|
||||
cifs_dbg(FYI,
|
||||
"Set no oplock for inode=%p after a write operation\n",
|
||||
inode);
|
||||
cinode->oplock = 0;
|
||||
}
|
||||
return written;
|
||||
}
|
||||
|
||||
written = cifs_get_writer(cinode);
|
||||
if (written)
|
||||
return written;
|
||||
|
||||
written = generic_file_write_iter(iocb, from);
|
||||
|
||||
if (CIFS_CACHE_WRITE(CIFS_I(inode)))
|
||||
goto out;
|
||||
|
||||
rc = filemap_fdatawrite(inode->i_mapping);
|
||||
if (rc)
|
||||
cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
|
||||
rc, inode);
|
||||
|
||||
out:
|
||||
cifs_put_writer(cinode);
|
||||
return written;
|
||||
}
|
||||
|
||||
static loff_t cifs_llseek(struct file *file, loff_t offset, int whence)
|
||||
{
|
||||
struct cifsFileInfo *cfile = file->private_data;
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ extern ssize_t cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to);
|
|||
extern ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from);
|
||||
extern ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from);
|
||||
extern ssize_t cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from);
|
||||
ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from);
|
||||
ssize_t cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter);
|
||||
extern int cifs_flock(struct file *pfile, int cmd, struct file_lock *plock);
|
||||
extern int cifs_lock(struct file *, int, struct file_lock *);
|
||||
extern int cifs_fsync(struct file *, loff_t, loff_t, int);
|
||||
|
|
|
|||
|
|
@ -4250,6 +4250,59 @@ ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
|
|||
return __cifs_readv(iocb, to, false);
|
||||
}
|
||||
|
||||
ssize_t cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
|
||||
if (iocb->ki_flags & IOCB_DIRECT)
|
||||
return cifs_user_readv(iocb, iter);
|
||||
|
||||
rc = cifs_revalidate_mapping(inode);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return generic_file_read_iter(iocb, iter);
|
||||
}
|
||||
|
||||
ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(inode);
|
||||
ssize_t written;
|
||||
int rc;
|
||||
|
||||
if (iocb->ki_filp->f_flags & O_DIRECT) {
|
||||
written = cifs_user_writev(iocb, from);
|
||||
if (written > 0 && CIFS_CACHE_READ(cinode)) {
|
||||
cifs_zap_mapping(inode);
|
||||
cifs_dbg(FYI,
|
||||
"Set no oplock for inode=%p after a write operation\n",
|
||||
inode);
|
||||
cinode->oplock = 0;
|
||||
}
|
||||
return written;
|
||||
}
|
||||
|
||||
written = cifs_get_writer(cinode);
|
||||
if (written)
|
||||
return written;
|
||||
|
||||
written = generic_file_write_iter(iocb, from);
|
||||
|
||||
if (CIFS_CACHE_WRITE(CIFS_I(inode)))
|
||||
goto out;
|
||||
|
||||
rc = filemap_fdatawrite(inode->i_mapping);
|
||||
if (rc)
|
||||
cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
|
||||
rc, inode);
|
||||
|
||||
out:
|
||||
cifs_put_writer(cinode);
|
||||
return written;
|
||||
}
|
||||
|
||||
ssize_t
|
||||
cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user