1 // SPDX-License-Identifier: LGPL-2.1 2 /* 3 * 4 * vfs operations that deal with files 5 * 6 * Copyright (C) International Business Machines Corp., 2002,2010 7 * Author(s): Steve French (sfrench@us.ibm.com) 8 * Jeremy Allison (jra@samba.org) 9 * 10 */ 11 #include <linux/fs.h> 12 #include <linux/filelock.h> 13 #include <linux/backing-dev.h> 14 #include <linux/stat.h> 15 #include <linux/fcntl.h> 16 #include <linux/pagemap.h> 17 #include <linux/pagevec.h> 18 #include <linux/writeback.h> 19 #include <linux/task_io_accounting_ops.h> 20 #include <linux/delay.h> 21 #include <linux/mount.h> 22 #include <linux/slab.h> 23 #include <linux/swap.h> 24 #include <linux/mm.h> 25 #include <asm/div64.h> 26 #include "cifsfs.h" 27 #include "cifspdu.h" 28 #include "cifsglob.h" 29 #include "cifsproto.h" 30 #include "smb2proto.h" 31 #include "cifs_unicode.h" 32 #include "cifs_debug.h" 33 #include "cifs_fs_sb.h" 34 #include "fscache.h" 35 #include "smbdirect.h" 36 #include "fs_context.h" 37 #include "cifs_ioctl.h" 38 #include "cached_dir.h" 39 40 /* 41 * Remove the dirty flags from a span of pages. 42 */ 43 static void cifs_undirty_folios(struct inode *inode, loff_t start, unsigned int len) 44 { 45 struct address_space *mapping = inode->i_mapping; 46 struct folio *folio; 47 pgoff_t end; 48 49 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE); 50 51 rcu_read_lock(); 52 53 end = (start + len - 1) / PAGE_SIZE; 54 xas_for_each_marked(&xas, folio, end, PAGECACHE_TAG_DIRTY) { 55 if (xas_retry(&xas, folio)) 56 continue; 57 xas_pause(&xas); 58 rcu_read_unlock(); 59 folio_lock(folio); 60 folio_clear_dirty_for_io(folio); 61 folio_unlock(folio); 62 rcu_read_lock(); 63 } 64 65 rcu_read_unlock(); 66 } 67 68 /* 69 * Completion of write to server. 70 */ 71 void cifs_pages_written_back(struct inode *inode, loff_t start, unsigned int len) 72 { 73 struct address_space *mapping = inode->i_mapping; 74 struct folio *folio; 75 pgoff_t end; 76 77 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE); 78 79 if (!len) 80 return; 81 82 rcu_read_lock(); 83 84 end = (start + len - 1) / PAGE_SIZE; 85 xas_for_each(&xas, folio, end) { 86 if (xas_retry(&xas, folio)) 87 continue; 88 if (!folio_test_writeback(folio)) { 89 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n", 90 len, start, folio->index, end); 91 continue; 92 } 93 94 folio_detach_private(folio); 95 folio_end_writeback(folio); 96 } 97 98 rcu_read_unlock(); 99 } 100 101 /* 102 * Failure of write to server. 103 */ 104 void cifs_pages_write_failed(struct inode *inode, loff_t start, unsigned int len) 105 { 106 struct address_space *mapping = inode->i_mapping; 107 struct folio *folio; 108 pgoff_t end; 109 110 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE); 111 112 if (!len) 113 return; 114 115 rcu_read_lock(); 116 117 end = (start + len - 1) / PAGE_SIZE; 118 xas_for_each(&xas, folio, end) { 119 if (xas_retry(&xas, folio)) 120 continue; 121 if (!folio_test_writeback(folio)) { 122 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n", 123 len, start, folio->index, end); 124 continue; 125 } 126 127 folio_set_error(folio); 128 folio_end_writeback(folio); 129 } 130 131 rcu_read_unlock(); 132 } 133 134 /* 135 * Redirty pages after a temporary failure. 136 */ 137 void cifs_pages_write_redirty(struct inode *inode, loff_t start, unsigned int len) 138 { 139 struct address_space *mapping = inode->i_mapping; 140 struct folio *folio; 141 pgoff_t end; 142 143 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE); 144 145 if (!len) 146 return; 147 148 rcu_read_lock(); 149 150 end = (start + len - 1) / PAGE_SIZE; 151 xas_for_each(&xas, folio, end) { 152 if (!folio_test_writeback(folio)) { 153 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n", 154 len, start, folio->index, end); 155 continue; 156 } 157 158 filemap_dirty_folio(folio->mapping, folio); 159 folio_end_writeback(folio); 160 } 161 162 rcu_read_unlock(); 163 } 164 165 /* 166 * Mark as invalid, all open files on tree connections since they 167 * were closed when session to server was lost. 168 */ 169 void 170 cifs_mark_open_files_invalid(struct cifs_tcon *tcon) 171 { 172 struct cifsFileInfo *open_file = NULL; 173 struct list_head *tmp; 174 struct list_head *tmp1; 175 176 /* only send once per connect */ 177 spin_lock(&tcon->tc_lock); 178 if (tcon->need_reconnect) 179 tcon->status = TID_NEED_RECON; 180 181 if (tcon->status != TID_NEED_RECON) { 182 spin_unlock(&tcon->tc_lock); 183 return; 184 } 185 tcon->status = TID_IN_FILES_INVALIDATE; 186 spin_unlock(&tcon->tc_lock); 187 188 /* list all files open on tree connection and mark them invalid */ 189 spin_lock(&tcon->open_file_lock); 190 list_for_each_safe(tmp, tmp1, &tcon->openFileList) { 191 open_file = list_entry(tmp, struct cifsFileInfo, tlist); 192 open_file->invalidHandle = true; 193 open_file->oplock_break_cancelled = true; 194 } 195 spin_unlock(&tcon->open_file_lock); 196 197 invalidate_all_cached_dirs(tcon); 198 spin_lock(&tcon->tc_lock); 199 if (tcon->status == TID_IN_FILES_INVALIDATE) 200 tcon->status = TID_NEED_TCON; 201 spin_unlock(&tcon->tc_lock); 202 203 /* 204 * BB Add call to invalidate_inodes(sb) for all superblocks mounted 205 * to this tcon. 206 */ 207 } 208 209 static inline int cifs_convert_flags(unsigned int flags) 210 { 211 if ((flags & O_ACCMODE) == O_RDONLY) 212 return GENERIC_READ; 213 else if ((flags & O_ACCMODE) == O_WRONLY) 214 return GENERIC_WRITE; 215 else if ((flags & O_ACCMODE) == O_RDWR) { 216 /* GENERIC_ALL is too much permission to request 217 can cause unnecessary access denied on create */ 218 /* return GENERIC_ALL; */ 219 return (GENERIC_READ | GENERIC_WRITE); 220 } 221 222 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES | 223 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA | 224 FILE_READ_DATA); 225 } 226 227 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 228 static u32 cifs_posix_convert_flags(unsigned int flags) 229 { 230 u32 posix_flags = 0; 231 232 if ((flags & O_ACCMODE) == O_RDONLY) 233 posix_flags = SMB_O_RDONLY; 234 else if ((flags & O_ACCMODE) == O_WRONLY) 235 posix_flags = SMB_O_WRONLY; 236 else if ((flags & O_ACCMODE) == O_RDWR) 237 posix_flags = SMB_O_RDWR; 238 239 if (flags & O_CREAT) { 240 posix_flags |= SMB_O_CREAT; 241 if (flags & O_EXCL) 242 posix_flags |= SMB_O_EXCL; 243 } else if (flags & O_EXCL) 244 cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n", 245 current->comm, current->tgid); 246 247 if (flags & O_TRUNC) 248 posix_flags |= SMB_O_TRUNC; 249 /* be safe and imply O_SYNC for O_DSYNC */ 250 if (flags & O_DSYNC) 251 posix_flags |= SMB_O_SYNC; 252 if (flags & O_DIRECTORY) 253 posix_flags |= SMB_O_DIRECTORY; 254 if (flags & O_NOFOLLOW) 255 posix_flags |= SMB_O_NOFOLLOW; 256 if (flags & O_DIRECT) 257 posix_flags |= SMB_O_DIRECT; 258 259 return posix_flags; 260 } 261 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 262 263 static inline int cifs_get_disposition(unsigned int flags) 264 { 265 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) 266 return FILE_CREATE; 267 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC)) 268 return FILE_OVERWRITE_IF; 269 else if ((flags & O_CREAT) == O_CREAT) 270 return FILE_OPEN_IF; 271 else if ((flags & O_TRUNC) == O_TRUNC) 272 return FILE_OVERWRITE; 273 else 274 return FILE_OPEN; 275 } 276 277 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 278 int cifs_posix_open(const char *full_path, struct inode **pinode, 279 struct super_block *sb, int mode, unsigned int f_flags, 280 __u32 *poplock, __u16 *pnetfid, unsigned int xid) 281 { 282 int rc; 283 FILE_UNIX_BASIC_INFO *presp_data; 284 __u32 posix_flags = 0; 285 struct cifs_sb_info *cifs_sb = CIFS_SB(sb); 286 struct cifs_fattr fattr; 287 struct tcon_link *tlink; 288 struct cifs_tcon *tcon; 289 290 cifs_dbg(FYI, "posix open %s\n", full_path); 291 292 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL); 293 if (presp_data == NULL) 294 return -ENOMEM; 295 296 tlink = cifs_sb_tlink(cifs_sb); 297 if (IS_ERR(tlink)) { 298 rc = PTR_ERR(tlink); 299 goto posix_open_ret; 300 } 301 302 tcon = tlink_tcon(tlink); 303 mode &= ~current_umask(); 304 305 posix_flags = cifs_posix_convert_flags(f_flags); 306 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data, 307 poplock, full_path, cifs_sb->local_nls, 308 cifs_remap(cifs_sb)); 309 cifs_put_tlink(tlink); 310 311 if (rc) 312 goto posix_open_ret; 313 314 if (presp_data->Type == cpu_to_le32(-1)) 315 goto posix_open_ret; /* open ok, caller does qpathinfo */ 316 317 if (!pinode) 318 goto posix_open_ret; /* caller does not need info */ 319 320 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb); 321 322 /* get new inode and set it up */ 323 if (*pinode == NULL) { 324 cifs_fill_uniqueid(sb, &fattr); 325 *pinode = cifs_iget(sb, &fattr); 326 if (!*pinode) { 327 rc = -ENOMEM; 328 goto posix_open_ret; 329 } 330 } else { 331 cifs_revalidate_mapping(*pinode); 332 rc = cifs_fattr_to_inode(*pinode, &fattr); 333 } 334 335 posix_open_ret: 336 kfree(presp_data); 337 return rc; 338 } 339 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 340 341 static int cifs_nt_open(const char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb, 342 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock, 343 struct cifs_fid *fid, unsigned int xid, struct cifs_open_info_data *buf) 344 { 345 int rc; 346 int desired_access; 347 int disposition; 348 int create_options = CREATE_NOT_DIR; 349 struct TCP_Server_Info *server = tcon->ses->server; 350 struct cifs_open_parms oparms; 351 352 if (!server->ops->open) 353 return -ENOSYS; 354 355 desired_access = cifs_convert_flags(f_flags); 356 357 /********************************************************************* 358 * open flag mapping table: 359 * 360 * POSIX Flag CIFS Disposition 361 * ---------- ---------------- 362 * O_CREAT FILE_OPEN_IF 363 * O_CREAT | O_EXCL FILE_CREATE 364 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF 365 * O_TRUNC FILE_OVERWRITE 366 * none of the above FILE_OPEN 367 * 368 * Note that there is not a direct match between disposition 369 * FILE_SUPERSEDE (ie create whether or not file exists although 370 * O_CREAT | O_TRUNC is similar but truncates the existing 371 * file rather than creating a new file as FILE_SUPERSEDE does 372 * (which uses the attributes / metadata passed in on open call) 373 *? 374 *? O_SYNC is a reasonable match to CIFS writethrough flag 375 *? and the read write flags match reasonably. O_LARGEFILE 376 *? is irrelevant because largefile support is always used 377 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY, 378 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation 379 *********************************************************************/ 380 381 disposition = cifs_get_disposition(f_flags); 382 383 /* BB pass O_SYNC flag through on file attributes .. BB */ 384 385 /* O_SYNC also has bit for O_DSYNC so following check picks up either */ 386 if (f_flags & O_SYNC) 387 create_options |= CREATE_WRITE_THROUGH; 388 389 if (f_flags & O_DIRECT) 390 create_options |= CREATE_NO_BUFFER; 391 392 oparms = (struct cifs_open_parms) { 393 .tcon = tcon, 394 .cifs_sb = cifs_sb, 395 .desired_access = desired_access, 396 .create_options = cifs_create_options(cifs_sb, create_options), 397 .disposition = disposition, 398 .path = full_path, 399 .fid = fid, 400 }; 401 402 rc = server->ops->open(xid, &oparms, oplock, buf); 403 if (rc) 404 return rc; 405 406 /* TODO: Add support for calling posix query info but with passing in fid */ 407 if (tcon->unix_ext) 408 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb, 409 xid); 410 else 411 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb, 412 xid, fid); 413 414 if (rc) { 415 server->ops->close(xid, tcon, fid); 416 if (rc == -ESTALE) 417 rc = -EOPENSTALE; 418 } 419 420 return rc; 421 } 422 423 static bool 424 cifs_has_mand_locks(struct cifsInodeInfo *cinode) 425 { 426 struct cifs_fid_locks *cur; 427 bool has_locks = false; 428 429 down_read(&cinode->lock_sem); 430 list_for_each_entry(cur, &cinode->llist, llist) { 431 if (!list_empty(&cur->locks)) { 432 has_locks = true; 433 break; 434 } 435 } 436 up_read(&cinode->lock_sem); 437 return has_locks; 438 } 439 440 void 441 cifs_down_write(struct rw_semaphore *sem) 442 { 443 while (!down_write_trylock(sem)) 444 msleep(10); 445 } 446 447 static void cifsFileInfo_put_work(struct work_struct *work); 448 449 struct cifsFileInfo *cifs_new_fileinfo(struct cifs_fid *fid, struct file *file, 450 struct tcon_link *tlink, __u32 oplock, 451 const char *symlink_target) 452 { 453 struct dentry *dentry = file_dentry(file); 454 struct inode *inode = d_inode(dentry); 455 struct cifsInodeInfo *cinode = CIFS_I(inode); 456 struct cifsFileInfo *cfile; 457 struct cifs_fid_locks *fdlocks; 458 struct cifs_tcon *tcon = tlink_tcon(tlink); 459 struct TCP_Server_Info *server = tcon->ses->server; 460 461 cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL); 462 if (cfile == NULL) 463 return cfile; 464 465 fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL); 466 if (!fdlocks) { 467 kfree(cfile); 468 return NULL; 469 } 470 471 if (symlink_target) { 472 cfile->symlink_target = kstrdup(symlink_target, GFP_KERNEL); 473 if (!cfile->symlink_target) { 474 kfree(fdlocks); 475 kfree(cfile); 476 return NULL; 477 } 478 } 479 480 INIT_LIST_HEAD(&fdlocks->locks); 481 fdlocks->cfile = cfile; 482 cfile->llist = fdlocks; 483 484 cfile->count = 1; 485 cfile->pid = current->tgid; 486 cfile->uid = current_fsuid(); 487 cfile->dentry = dget(dentry); 488 cfile->f_flags = file->f_flags; 489 cfile->invalidHandle = false; 490 cfile->deferred_close_scheduled = false; 491 cfile->tlink = cifs_get_tlink(tlink); 492 INIT_WORK(&cfile->oplock_break, cifs_oplock_break); 493 INIT_WORK(&cfile->put, cifsFileInfo_put_work); 494 INIT_DELAYED_WORK(&cfile->deferred, smb2_deferred_work_close); 495 mutex_init(&cfile->fh_mutex); 496 spin_lock_init(&cfile->file_info_lock); 497 498 cifs_sb_active(inode->i_sb); 499 500 /* 501 * If the server returned a read oplock and we have mandatory brlocks, 502 * set oplock level to None. 503 */ 504 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) { 505 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n"); 506 oplock = 0; 507 } 508 509 cifs_down_write(&cinode->lock_sem); 510 list_add(&fdlocks->llist, &cinode->llist); 511 up_write(&cinode->lock_sem); 512 513 spin_lock(&tcon->open_file_lock); 514 if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock) 515 oplock = fid->pending_open->oplock; 516 list_del(&fid->pending_open->olist); 517 518 fid->purge_cache = false; 519 server->ops->set_fid(cfile, fid, oplock); 520 521 list_add(&cfile->tlist, &tcon->openFileList); 522 atomic_inc(&tcon->num_local_opens); 523 524 /* if readable file instance put first in list*/ 525 spin_lock(&cinode->open_file_lock); 526 if (file->f_mode & FMODE_READ) 527 list_add(&cfile->flist, &cinode->openFileList); 528 else 529 list_add_tail(&cfile->flist, &cinode->openFileList); 530 spin_unlock(&cinode->open_file_lock); 531 spin_unlock(&tcon->open_file_lock); 532 533 if (fid->purge_cache) 534 cifs_zap_mapping(inode); 535 536 file->private_data = cfile; 537 return cfile; 538 } 539 540 struct cifsFileInfo * 541 cifsFileInfo_get(struct cifsFileInfo *cifs_file) 542 { 543 spin_lock(&cifs_file->file_info_lock); 544 cifsFileInfo_get_locked(cifs_file); 545 spin_unlock(&cifs_file->file_info_lock); 546 return cifs_file; 547 } 548 549 static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file) 550 { 551 struct inode *inode = d_inode(cifs_file->dentry); 552 struct cifsInodeInfo *cifsi = CIFS_I(inode); 553 struct cifsLockInfo *li, *tmp; 554 struct super_block *sb = inode->i_sb; 555 556 /* 557 * Delete any outstanding lock records. We'll lose them when the file 558 * is closed anyway. 559 */ 560 cifs_down_write(&cifsi->lock_sem); 561 list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) { 562 list_del(&li->llist); 563 cifs_del_lock_waiters(li); 564 kfree(li); 565 } 566 list_del(&cifs_file->llist->llist); 567 kfree(cifs_file->llist); 568 up_write(&cifsi->lock_sem); 569 570 cifs_put_tlink(cifs_file->tlink); 571 dput(cifs_file->dentry); 572 cifs_sb_deactive(sb); 573 kfree(cifs_file->symlink_target); 574 kfree(cifs_file); 575 } 576 577 static void cifsFileInfo_put_work(struct work_struct *work) 578 { 579 struct cifsFileInfo *cifs_file = container_of(work, 580 struct cifsFileInfo, put); 581 582 cifsFileInfo_put_final(cifs_file); 583 } 584 585 /** 586 * cifsFileInfo_put - release a reference of file priv data 587 * 588 * Always potentially wait for oplock handler. See _cifsFileInfo_put(). 589 * 590 * @cifs_file: cifs/smb3 specific info (eg refcounts) for an open file 591 */ 592 void cifsFileInfo_put(struct cifsFileInfo *cifs_file) 593 { 594 _cifsFileInfo_put(cifs_file, true, true); 595 } 596 597 /** 598 * _cifsFileInfo_put - release a reference of file priv data 599 * 600 * This may involve closing the filehandle @cifs_file out on the 601 * server. Must be called without holding tcon->open_file_lock, 602 * cinode->open_file_lock and cifs_file->file_info_lock. 603 * 604 * If @wait_for_oplock_handler is true and we are releasing the last 605 * reference, wait for any running oplock break handler of the file 606 * and cancel any pending one. 607 * 608 * @cifs_file: cifs/smb3 specific info (eg refcounts) for an open file 609 * @wait_oplock_handler: must be false if called from oplock_break_handler 610 * @offload: not offloaded on close and oplock breaks 611 * 612 */ 613 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, 614 bool wait_oplock_handler, bool offload) 615 { 616 struct inode *inode = d_inode(cifs_file->dentry); 617 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink); 618 struct TCP_Server_Info *server = tcon->ses->server; 619 struct cifsInodeInfo *cifsi = CIFS_I(inode); 620 struct super_block *sb = inode->i_sb; 621 struct cifs_sb_info *cifs_sb = CIFS_SB(sb); 622 struct cifs_fid fid = {}; 623 struct cifs_pending_open open; 624 bool oplock_break_cancelled; 625 626 spin_lock(&tcon->open_file_lock); 627 spin_lock(&cifsi->open_file_lock); 628 spin_lock(&cifs_file->file_info_lock); 629 if (--cifs_file->count > 0) { 630 spin_unlock(&cifs_file->file_info_lock); 631 spin_unlock(&cifsi->open_file_lock); 632 spin_unlock(&tcon->open_file_lock); 633 return; 634 } 635 spin_unlock(&cifs_file->file_info_lock); 636 637 if (server->ops->get_lease_key) 638 server->ops->get_lease_key(inode, &fid); 639 640 /* store open in pending opens to make sure we don't miss lease break */ 641 cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open); 642 643 /* remove it from the lists */ 644 list_del(&cifs_file->flist); 645 list_del(&cifs_file->tlist); 646 atomic_dec(&tcon->num_local_opens); 647 648 if (list_empty(&cifsi->openFileList)) { 649 cifs_dbg(FYI, "closing last open instance for inode %p\n", 650 d_inode(cifs_file->dentry)); 651 /* 652 * In strict cache mode we need invalidate mapping on the last 653 * close because it may cause a error when we open this file 654 * again and get at least level II oplock. 655 */ 656 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) 657 set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags); 658 cifs_set_oplock_level(cifsi, 0); 659 } 660 661 spin_unlock(&cifsi->open_file_lock); 662 spin_unlock(&tcon->open_file_lock); 663 664 oplock_break_cancelled = wait_oplock_handler ? 665 cancel_work_sync(&cifs_file->oplock_break) : false; 666 667 if (!tcon->need_reconnect && !cifs_file->invalidHandle) { 668 struct TCP_Server_Info *server = tcon->ses->server; 669 unsigned int xid; 670 671 xid = get_xid(); 672 if (server->ops->close_getattr) 673 server->ops->close_getattr(xid, tcon, cifs_file); 674 else if (server->ops->close) 675 server->ops->close(xid, tcon, &cifs_file->fid); 676 _free_xid(xid); 677 } 678 679 if (oplock_break_cancelled) 680 cifs_done_oplock_break(cifsi); 681 682 cifs_del_pending_open(&open); 683 684 if (offload) 685 queue_work(fileinfo_put_wq, &cifs_file->put); 686 else 687 cifsFileInfo_put_final(cifs_file); 688 } 689 690 int cifs_open(struct inode *inode, struct file *file) 691 692 { 693 int rc = -EACCES; 694 unsigned int xid; 695 __u32 oplock; 696 struct cifs_sb_info *cifs_sb; 697 struct TCP_Server_Info *server; 698 struct cifs_tcon *tcon; 699 struct tcon_link *tlink; 700 struct cifsFileInfo *cfile = NULL; 701 void *page; 702 const char *full_path; 703 bool posix_open_ok = false; 704 struct cifs_fid fid = {}; 705 struct cifs_pending_open open; 706 struct cifs_open_info_data data = {}; 707 708 xid = get_xid(); 709 710 cifs_sb = CIFS_SB(inode->i_sb); 711 if (unlikely(cifs_forced_shutdown(cifs_sb))) { 712 free_xid(xid); 713 return -EIO; 714 } 715 716 tlink = cifs_sb_tlink(cifs_sb); 717 if (IS_ERR(tlink)) { 718 free_xid(xid); 719 return PTR_ERR(tlink); 720 } 721 tcon = tlink_tcon(tlink); 722 server = tcon->ses->server; 723 724 page = alloc_dentry_path(); 725 full_path = build_path_from_dentry(file_dentry(file), page); 726 if (IS_ERR(full_path)) { 727 rc = PTR_ERR(full_path); 728 goto out; 729 } 730 731 cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n", 732 inode, file->f_flags, full_path); 733 734 if (file->f_flags & O_DIRECT && 735 cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) { 736 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL) 737 file->f_op = &cifs_file_direct_nobrl_ops; 738 else 739 file->f_op = &cifs_file_direct_ops; 740 } 741 742 /* Get the cached handle as SMB2 close is deferred */ 743 rc = cifs_get_readable_path(tcon, full_path, &cfile); 744 if (rc == 0) { 745 if (file->f_flags == cfile->f_flags) { 746 file->private_data = cfile; 747 spin_lock(&CIFS_I(inode)->deferred_lock); 748 cifs_del_deferred_close(cfile); 749 spin_unlock(&CIFS_I(inode)->deferred_lock); 750 goto use_cache; 751 } else { 752 _cifsFileInfo_put(cfile, true, false); 753 } 754 } 755 756 if (server->oplocks) 757 oplock = REQ_OPLOCK; 758 else 759 oplock = 0; 760 761 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 762 if (!tcon->broken_posix_open && tcon->unix_ext && 763 cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP & 764 le64_to_cpu(tcon->fsUnixInfo.Capability))) { 765 /* can not refresh inode info since size could be stale */ 766 rc = cifs_posix_open(full_path, &inode, inode->i_sb, 767 cifs_sb->ctx->file_mode /* ignored */, 768 file->f_flags, &oplock, &fid.netfid, xid); 769 if (rc == 0) { 770 cifs_dbg(FYI, "posix open succeeded\n"); 771 posix_open_ok = true; 772 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) { 773 if (tcon->ses->serverNOS) 774 cifs_dbg(VFS, "server %s of type %s returned unexpected error on SMB posix open, disabling posix open support. Check if server update available.\n", 775 tcon->ses->ip_addr, 776 tcon->ses->serverNOS); 777 tcon->broken_posix_open = true; 778 } else if ((rc != -EIO) && (rc != -EREMOTE) && 779 (rc != -EOPNOTSUPP)) /* path not found or net err */ 780 goto out; 781 /* 782 * Else fallthrough to retry open the old way on network i/o 783 * or DFS errors. 784 */ 785 } 786 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 787 788 if (server->ops->get_lease_key) 789 server->ops->get_lease_key(inode, &fid); 790 791 cifs_add_pending_open(&fid, tlink, &open); 792 793 if (!posix_open_ok) { 794 if (server->ops->get_lease_key) 795 server->ops->get_lease_key(inode, &fid); 796 797 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon, file->f_flags, &oplock, &fid, 798 xid, &data); 799 if (rc) { 800 cifs_del_pending_open(&open); 801 goto out; 802 } 803 } 804 805 cfile = cifs_new_fileinfo(&fid, file, tlink, oplock, data.symlink_target); 806 if (cfile == NULL) { 807 if (server->ops->close) 808 server->ops->close(xid, tcon, &fid); 809 cifs_del_pending_open(&open); 810 rc = -ENOMEM; 811 goto out; 812 } 813 814 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 815 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) { 816 /* 817 * Time to set mode which we can not set earlier due to 818 * problems creating new read-only files. 819 */ 820 struct cifs_unix_set_info_args args = { 821 .mode = inode->i_mode, 822 .uid = INVALID_UID, /* no change */ 823 .gid = INVALID_GID, /* no change */ 824 .ctime = NO_CHANGE_64, 825 .atime = NO_CHANGE_64, 826 .mtime = NO_CHANGE_64, 827 .device = 0, 828 }; 829 CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid, 830 cfile->pid); 831 } 832 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 833 834 use_cache: 835 fscache_use_cookie(cifs_inode_cookie(file_inode(file)), 836 file->f_mode & FMODE_WRITE); 837 if (file->f_flags & O_DIRECT && 838 (!((file->f_flags & O_ACCMODE) != O_RDONLY) || 839 file->f_flags & O_APPEND)) 840 cifs_invalidate_cache(file_inode(file), 841 FSCACHE_INVAL_DIO_WRITE); 842 843 out: 844 free_dentry_path(page); 845 free_xid(xid); 846 cifs_put_tlink(tlink); 847 cifs_free_open_info(&data); 848 return rc; 849 } 850 851 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 852 static int cifs_push_posix_locks(struct cifsFileInfo *cfile); 853 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 854 855 /* 856 * Try to reacquire byte range locks that were released when session 857 * to server was lost. 858 */ 859 static int 860 cifs_relock_file(struct cifsFileInfo *cfile) 861 { 862 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 863 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 864 int rc = 0; 865 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 866 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb); 867 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 868 869 down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING); 870 if (cinode->can_cache_brlcks) { 871 /* can cache locks - no need to relock */ 872 up_read(&cinode->lock_sem); 873 return rc; 874 } 875 876 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 877 if (cap_unix(tcon->ses) && 878 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 879 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 880 rc = cifs_push_posix_locks(cfile); 881 else 882 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 883 rc = tcon->ses->server->ops->push_mand_locks(cfile); 884 885 up_read(&cinode->lock_sem); 886 return rc; 887 } 888 889 static int 890 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush) 891 { 892 int rc = -EACCES; 893 unsigned int xid; 894 __u32 oplock; 895 struct cifs_sb_info *cifs_sb; 896 struct cifs_tcon *tcon; 897 struct TCP_Server_Info *server; 898 struct cifsInodeInfo *cinode; 899 struct inode *inode; 900 void *page; 901 const char *full_path; 902 int desired_access; 903 int disposition = FILE_OPEN; 904 int create_options = CREATE_NOT_DIR; 905 struct cifs_open_parms oparms; 906 907 xid = get_xid(); 908 mutex_lock(&cfile->fh_mutex); 909 if (!cfile->invalidHandle) { 910 mutex_unlock(&cfile->fh_mutex); 911 free_xid(xid); 912 return 0; 913 } 914 915 inode = d_inode(cfile->dentry); 916 cifs_sb = CIFS_SB(inode->i_sb); 917 tcon = tlink_tcon(cfile->tlink); 918 server = tcon->ses->server; 919 920 /* 921 * Can not grab rename sem here because various ops, including those 922 * that already have the rename sem can end up causing writepage to get 923 * called and if the server was down that means we end up here, and we 924 * can never tell if the caller already has the rename_sem. 925 */ 926 page = alloc_dentry_path(); 927 full_path = build_path_from_dentry(cfile->dentry, page); 928 if (IS_ERR(full_path)) { 929 mutex_unlock(&cfile->fh_mutex); 930 free_dentry_path(page); 931 free_xid(xid); 932 return PTR_ERR(full_path); 933 } 934 935 cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n", 936 inode, cfile->f_flags, full_path); 937 938 if (tcon->ses->server->oplocks) 939 oplock = REQ_OPLOCK; 940 else 941 oplock = 0; 942 943 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 944 if (tcon->unix_ext && cap_unix(tcon->ses) && 945 (CIFS_UNIX_POSIX_PATH_OPS_CAP & 946 le64_to_cpu(tcon->fsUnixInfo.Capability))) { 947 /* 948 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the 949 * original open. Must mask them off for a reopen. 950 */ 951 unsigned int oflags = cfile->f_flags & 952 ~(O_CREAT | O_EXCL | O_TRUNC); 953 954 rc = cifs_posix_open(full_path, NULL, inode->i_sb, 955 cifs_sb->ctx->file_mode /* ignored */, 956 oflags, &oplock, &cfile->fid.netfid, xid); 957 if (rc == 0) { 958 cifs_dbg(FYI, "posix reopen succeeded\n"); 959 oparms.reconnect = true; 960 goto reopen_success; 961 } 962 /* 963 * fallthrough to retry open the old way on errors, especially 964 * in the reconnect path it is important to retry hard 965 */ 966 } 967 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 968 969 desired_access = cifs_convert_flags(cfile->f_flags); 970 971 /* O_SYNC also has bit for O_DSYNC so following check picks up either */ 972 if (cfile->f_flags & O_SYNC) 973 create_options |= CREATE_WRITE_THROUGH; 974 975 if (cfile->f_flags & O_DIRECT) 976 create_options |= CREATE_NO_BUFFER; 977 978 if (server->ops->get_lease_key) 979 server->ops->get_lease_key(inode, &cfile->fid); 980 981 oparms = (struct cifs_open_parms) { 982 .tcon = tcon, 983 .cifs_sb = cifs_sb, 984 .desired_access = desired_access, 985 .create_options = cifs_create_options(cifs_sb, create_options), 986 .disposition = disposition, 987 .path = full_path, 988 .fid = &cfile->fid, 989 .reconnect = true, 990 }; 991 992 /* 993 * Can not refresh inode by passing in file_info buf to be returned by 994 * ops->open and then calling get_inode_info with returned buf since 995 * file might have write behind data that needs to be flushed and server 996 * version of file size can be stale. If we knew for sure that inode was 997 * not dirty locally we could do this. 998 */ 999 rc = server->ops->open(xid, &oparms, &oplock, NULL); 1000 if (rc == -ENOENT && oparms.reconnect == false) { 1001 /* durable handle timeout is expired - open the file again */ 1002 rc = server->ops->open(xid, &oparms, &oplock, NULL); 1003 /* indicate that we need to relock the file */ 1004 oparms.reconnect = true; 1005 } 1006 1007 if (rc) { 1008 mutex_unlock(&cfile->fh_mutex); 1009 cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc); 1010 cifs_dbg(FYI, "oplock: %d\n", oplock); 1011 goto reopen_error_exit; 1012 } 1013 1014 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1015 reopen_success: 1016 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1017 cfile->invalidHandle = false; 1018 mutex_unlock(&cfile->fh_mutex); 1019 cinode = CIFS_I(inode); 1020 1021 if (can_flush) { 1022 rc = filemap_write_and_wait(inode->i_mapping); 1023 if (!is_interrupt_error(rc)) 1024 mapping_set_error(inode->i_mapping, rc); 1025 1026 if (tcon->posix_extensions) { 1027 rc = smb311_posix_get_inode_info(&inode, full_path, 1028 NULL, inode->i_sb, xid); 1029 } else if (tcon->unix_ext) { 1030 rc = cifs_get_inode_info_unix(&inode, full_path, 1031 inode->i_sb, xid); 1032 } else { 1033 rc = cifs_get_inode_info(&inode, full_path, NULL, 1034 inode->i_sb, xid, NULL); 1035 } 1036 } 1037 /* 1038 * Else we are writing out data to server already and could deadlock if 1039 * we tried to flush data, and since we do not know if we have data that 1040 * would invalidate the current end of file on the server we can not go 1041 * to the server to get the new inode info. 1042 */ 1043 1044 /* 1045 * If the server returned a read oplock and we have mandatory brlocks, 1046 * set oplock level to None. 1047 */ 1048 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) { 1049 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n"); 1050 oplock = 0; 1051 } 1052 1053 server->ops->set_fid(cfile, &cfile->fid, oplock); 1054 if (oparms.reconnect) 1055 cifs_relock_file(cfile); 1056 1057 reopen_error_exit: 1058 free_dentry_path(page); 1059 free_xid(xid); 1060 return rc; 1061 } 1062 1063 void smb2_deferred_work_close(struct work_struct *work) 1064 { 1065 struct cifsFileInfo *cfile = container_of(work, 1066 struct cifsFileInfo, deferred.work); 1067 1068 spin_lock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock); 1069 cifs_del_deferred_close(cfile); 1070 cfile->deferred_close_scheduled = false; 1071 spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock); 1072 _cifsFileInfo_put(cfile, true, false); 1073 } 1074 1075 int cifs_close(struct inode *inode, struct file *file) 1076 { 1077 struct cifsFileInfo *cfile; 1078 struct cifsInodeInfo *cinode = CIFS_I(inode); 1079 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 1080 struct cifs_deferred_close *dclose; 1081 1082 cifs_fscache_unuse_inode_cookie(inode, file->f_mode & FMODE_WRITE); 1083 1084 if (file->private_data != NULL) { 1085 cfile = file->private_data; 1086 file->private_data = NULL; 1087 dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL); 1088 if ((cifs_sb->ctx->closetimeo && cinode->oplock == CIFS_CACHE_RHW_FLG) 1089 && cinode->lease_granted && 1090 !test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) && 1091 dclose) { 1092 if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) { 1093 inode_set_mtime_to_ts(inode, 1094 inode_set_ctime_current(inode)); 1095 } 1096 spin_lock(&cinode->deferred_lock); 1097 cifs_add_deferred_close(cfile, dclose); 1098 if (cfile->deferred_close_scheduled && 1099 delayed_work_pending(&cfile->deferred)) { 1100 /* 1101 * If there is no pending work, mod_delayed_work queues new work. 1102 * So, Increase the ref count to avoid use-after-free. 1103 */ 1104 if (!mod_delayed_work(deferredclose_wq, 1105 &cfile->deferred, cifs_sb->ctx->closetimeo)) 1106 cifsFileInfo_get(cfile); 1107 } else { 1108 /* Deferred close for files */ 1109 queue_delayed_work(deferredclose_wq, 1110 &cfile->deferred, cifs_sb->ctx->closetimeo); 1111 cfile->deferred_close_scheduled = true; 1112 spin_unlock(&cinode->deferred_lock); 1113 return 0; 1114 } 1115 spin_unlock(&cinode->deferred_lock); 1116 _cifsFileInfo_put(cfile, true, false); 1117 } else { 1118 _cifsFileInfo_put(cfile, true, false); 1119 kfree(dclose); 1120 } 1121 } 1122 1123 /* return code from the ->release op is always ignored */ 1124 return 0; 1125 } 1126 1127 void 1128 cifs_reopen_persistent_handles(struct cifs_tcon *tcon) 1129 { 1130 struct cifsFileInfo *open_file, *tmp; 1131 struct list_head tmp_list; 1132 1133 if (!tcon->use_persistent || !tcon->need_reopen_files) 1134 return; 1135 1136 tcon->need_reopen_files = false; 1137 1138 cifs_dbg(FYI, "Reopen persistent handles\n"); 1139 INIT_LIST_HEAD(&tmp_list); 1140 1141 /* list all files open on tree connection, reopen resilient handles */ 1142 spin_lock(&tcon->open_file_lock); 1143 list_for_each_entry(open_file, &tcon->openFileList, tlist) { 1144 if (!open_file->invalidHandle) 1145 continue; 1146 cifsFileInfo_get(open_file); 1147 list_add_tail(&open_file->rlist, &tmp_list); 1148 } 1149 spin_unlock(&tcon->open_file_lock); 1150 1151 list_for_each_entry_safe(open_file, tmp, &tmp_list, rlist) { 1152 if (cifs_reopen_file(open_file, false /* do not flush */)) 1153 tcon->need_reopen_files = true; 1154 list_del_init(&open_file->rlist); 1155 cifsFileInfo_put(open_file); 1156 } 1157 } 1158 1159 int cifs_closedir(struct inode *inode, struct file *file) 1160 { 1161 int rc = 0; 1162 unsigned int xid; 1163 struct cifsFileInfo *cfile = file->private_data; 1164 struct cifs_tcon *tcon; 1165 struct TCP_Server_Info *server; 1166 char *buf; 1167 1168 cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode); 1169 1170 if (cfile == NULL) 1171 return rc; 1172 1173 xid = get_xid(); 1174 tcon = tlink_tcon(cfile->tlink); 1175 server = tcon->ses->server; 1176 1177 cifs_dbg(FYI, "Freeing private data in close dir\n"); 1178 spin_lock(&cfile->file_info_lock); 1179 if (server->ops->dir_needs_close(cfile)) { 1180 cfile->invalidHandle = true; 1181 spin_unlock(&cfile->file_info_lock); 1182 if (server->ops->close_dir) 1183 rc = server->ops->close_dir(xid, tcon, &cfile->fid); 1184 else 1185 rc = -ENOSYS; 1186 cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc); 1187 /* not much we can do if it fails anyway, ignore rc */ 1188 rc = 0; 1189 } else 1190 spin_unlock(&cfile->file_info_lock); 1191 1192 buf = cfile->srch_inf.ntwrk_buf_start; 1193 if (buf) { 1194 cifs_dbg(FYI, "closedir free smb buf in srch struct\n"); 1195 cfile->srch_inf.ntwrk_buf_start = NULL; 1196 if (cfile->srch_inf.smallBuf) 1197 cifs_small_buf_release(buf); 1198 else 1199 cifs_buf_release(buf); 1200 } 1201 1202 cifs_put_tlink(cfile->tlink); 1203 kfree(file->private_data); 1204 file->private_data = NULL; 1205 /* BB can we lock the filestruct while this is going on? */ 1206 free_xid(xid); 1207 return rc; 1208 } 1209 1210 static struct cifsLockInfo * 1211 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags) 1212 { 1213 struct cifsLockInfo *lock = 1214 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL); 1215 if (!lock) 1216 return lock; 1217 lock->offset = offset; 1218 lock->length = length; 1219 lock->type = type; 1220 lock->pid = current->tgid; 1221 lock->flags = flags; 1222 INIT_LIST_HEAD(&lock->blist); 1223 init_waitqueue_head(&lock->block_q); 1224 return lock; 1225 } 1226 1227 void 1228 cifs_del_lock_waiters(struct cifsLockInfo *lock) 1229 { 1230 struct cifsLockInfo *li, *tmp; 1231 list_for_each_entry_safe(li, tmp, &lock->blist, blist) { 1232 list_del_init(&li->blist); 1233 wake_up(&li->block_q); 1234 } 1235 } 1236 1237 #define CIFS_LOCK_OP 0 1238 #define CIFS_READ_OP 1 1239 #define CIFS_WRITE_OP 2 1240 1241 /* @rw_check : 0 - no op, 1 - read, 2 - write */ 1242 static bool 1243 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset, 1244 __u64 length, __u8 type, __u16 flags, 1245 struct cifsFileInfo *cfile, 1246 struct cifsLockInfo **conf_lock, int rw_check) 1247 { 1248 struct cifsLockInfo *li; 1249 struct cifsFileInfo *cur_cfile = fdlocks->cfile; 1250 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server; 1251 1252 list_for_each_entry(li, &fdlocks->locks, llist) { 1253 if (offset + length <= li->offset || 1254 offset >= li->offset + li->length) 1255 continue; 1256 if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid && 1257 server->ops->compare_fids(cfile, cur_cfile)) { 1258 /* shared lock prevents write op through the same fid */ 1259 if (!(li->type & server->vals->shared_lock_type) || 1260 rw_check != CIFS_WRITE_OP) 1261 continue; 1262 } 1263 if ((type & server->vals->shared_lock_type) && 1264 ((server->ops->compare_fids(cfile, cur_cfile) && 1265 current->tgid == li->pid) || type == li->type)) 1266 continue; 1267 if (rw_check == CIFS_LOCK_OP && 1268 (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) && 1269 server->ops->compare_fids(cfile, cur_cfile)) 1270 continue; 1271 if (conf_lock) 1272 *conf_lock = li; 1273 return true; 1274 } 1275 return false; 1276 } 1277 1278 bool 1279 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length, 1280 __u8 type, __u16 flags, 1281 struct cifsLockInfo **conf_lock, int rw_check) 1282 { 1283 bool rc = false; 1284 struct cifs_fid_locks *cur; 1285 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1286 1287 list_for_each_entry(cur, &cinode->llist, llist) { 1288 rc = cifs_find_fid_lock_conflict(cur, offset, length, type, 1289 flags, cfile, conf_lock, 1290 rw_check); 1291 if (rc) 1292 break; 1293 } 1294 1295 return rc; 1296 } 1297 1298 /* 1299 * Check if there is another lock that prevents us to set the lock (mandatory 1300 * style). If such a lock exists, update the flock structure with its 1301 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks 1302 * or leave it the same if we can't. Returns 0 if we don't need to request to 1303 * the server or 1 otherwise. 1304 */ 1305 static int 1306 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length, 1307 __u8 type, struct file_lock *flock) 1308 { 1309 int rc = 0; 1310 struct cifsLockInfo *conf_lock; 1311 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1312 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server; 1313 bool exist; 1314 1315 down_read(&cinode->lock_sem); 1316 1317 exist = cifs_find_lock_conflict(cfile, offset, length, type, 1318 flock->fl_flags, &conf_lock, 1319 CIFS_LOCK_OP); 1320 if (exist) { 1321 flock->fl_start = conf_lock->offset; 1322 flock->fl_end = conf_lock->offset + conf_lock->length - 1; 1323 flock->fl_pid = conf_lock->pid; 1324 if (conf_lock->type & server->vals->shared_lock_type) 1325 flock->fl_type = F_RDLCK; 1326 else 1327 flock->fl_type = F_WRLCK; 1328 } else if (!cinode->can_cache_brlcks) 1329 rc = 1; 1330 else 1331 flock->fl_type = F_UNLCK; 1332 1333 up_read(&cinode->lock_sem); 1334 return rc; 1335 } 1336 1337 static void 1338 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock) 1339 { 1340 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1341 cifs_down_write(&cinode->lock_sem); 1342 list_add_tail(&lock->llist, &cfile->llist->locks); 1343 up_write(&cinode->lock_sem); 1344 } 1345 1346 /* 1347 * Set the byte-range lock (mandatory style). Returns: 1348 * 1) 0, if we set the lock and don't need to request to the server; 1349 * 2) 1, if no locks prevent us but we need to request to the server; 1350 * 3) -EACCES, if there is a lock that prevents us and wait is false. 1351 */ 1352 static int 1353 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock, 1354 bool wait) 1355 { 1356 struct cifsLockInfo *conf_lock; 1357 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1358 bool exist; 1359 int rc = 0; 1360 1361 try_again: 1362 exist = false; 1363 cifs_down_write(&cinode->lock_sem); 1364 1365 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length, 1366 lock->type, lock->flags, &conf_lock, 1367 CIFS_LOCK_OP); 1368 if (!exist && cinode->can_cache_brlcks) { 1369 list_add_tail(&lock->llist, &cfile->llist->locks); 1370 up_write(&cinode->lock_sem); 1371 return rc; 1372 } 1373 1374 if (!exist) 1375 rc = 1; 1376 else if (!wait) 1377 rc = -EACCES; 1378 else { 1379 list_add_tail(&lock->blist, &conf_lock->blist); 1380 up_write(&cinode->lock_sem); 1381 rc = wait_event_interruptible(lock->block_q, 1382 (lock->blist.prev == &lock->blist) && 1383 (lock->blist.next == &lock->blist)); 1384 if (!rc) 1385 goto try_again; 1386 cifs_down_write(&cinode->lock_sem); 1387 list_del_init(&lock->blist); 1388 } 1389 1390 up_write(&cinode->lock_sem); 1391 return rc; 1392 } 1393 1394 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1395 /* 1396 * Check if there is another lock that prevents us to set the lock (posix 1397 * style). If such a lock exists, update the flock structure with its 1398 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks 1399 * or leave it the same if we can't. Returns 0 if we don't need to request to 1400 * the server or 1 otherwise. 1401 */ 1402 static int 1403 cifs_posix_lock_test(struct file *file, struct file_lock *flock) 1404 { 1405 int rc = 0; 1406 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file)); 1407 unsigned char saved_type = flock->fl_type; 1408 1409 if ((flock->fl_flags & FL_POSIX) == 0) 1410 return 1; 1411 1412 down_read(&cinode->lock_sem); 1413 posix_test_lock(file, flock); 1414 1415 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) { 1416 flock->fl_type = saved_type; 1417 rc = 1; 1418 } 1419 1420 up_read(&cinode->lock_sem); 1421 return rc; 1422 } 1423 1424 /* 1425 * Set the byte-range lock (posix style). Returns: 1426 * 1) <0, if the error occurs while setting the lock; 1427 * 2) 0, if we set the lock and don't need to request to the server; 1428 * 3) FILE_LOCK_DEFERRED, if we will wait for some other file_lock; 1429 * 4) FILE_LOCK_DEFERRED + 1, if we need to request to the server. 1430 */ 1431 static int 1432 cifs_posix_lock_set(struct file *file, struct file_lock *flock) 1433 { 1434 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file)); 1435 int rc = FILE_LOCK_DEFERRED + 1; 1436 1437 if ((flock->fl_flags & FL_POSIX) == 0) 1438 return rc; 1439 1440 cifs_down_write(&cinode->lock_sem); 1441 if (!cinode->can_cache_brlcks) { 1442 up_write(&cinode->lock_sem); 1443 return rc; 1444 } 1445 1446 rc = posix_lock_file(file, flock, NULL); 1447 up_write(&cinode->lock_sem); 1448 return rc; 1449 } 1450 1451 int 1452 cifs_push_mandatory_locks(struct cifsFileInfo *cfile) 1453 { 1454 unsigned int xid; 1455 int rc = 0, stored_rc; 1456 struct cifsLockInfo *li, *tmp; 1457 struct cifs_tcon *tcon; 1458 unsigned int num, max_num, max_buf; 1459 LOCKING_ANDX_RANGE *buf, *cur; 1460 static const int types[] = { 1461 LOCKING_ANDX_LARGE_FILES, 1462 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES 1463 }; 1464 int i; 1465 1466 xid = get_xid(); 1467 tcon = tlink_tcon(cfile->tlink); 1468 1469 /* 1470 * Accessing maxBuf is racy with cifs_reconnect - need to store value 1471 * and check it before using. 1472 */ 1473 max_buf = tcon->ses->server->maxBuf; 1474 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) { 1475 free_xid(xid); 1476 return -EINVAL; 1477 } 1478 1479 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) > 1480 PAGE_SIZE); 1481 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr), 1482 PAGE_SIZE); 1483 max_num = (max_buf - sizeof(struct smb_hdr)) / 1484 sizeof(LOCKING_ANDX_RANGE); 1485 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL); 1486 if (!buf) { 1487 free_xid(xid); 1488 return -ENOMEM; 1489 } 1490 1491 for (i = 0; i < 2; i++) { 1492 cur = buf; 1493 num = 0; 1494 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) { 1495 if (li->type != types[i]) 1496 continue; 1497 cur->Pid = cpu_to_le16(li->pid); 1498 cur->LengthLow = cpu_to_le32((u32)li->length); 1499 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32)); 1500 cur->OffsetLow = cpu_to_le32((u32)li->offset); 1501 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32)); 1502 if (++num == max_num) { 1503 stored_rc = cifs_lockv(xid, tcon, 1504 cfile->fid.netfid, 1505 (__u8)li->type, 0, num, 1506 buf); 1507 if (stored_rc) 1508 rc = stored_rc; 1509 cur = buf; 1510 num = 0; 1511 } else 1512 cur++; 1513 } 1514 1515 if (num) { 1516 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid, 1517 (__u8)types[i], 0, num, buf); 1518 if (stored_rc) 1519 rc = stored_rc; 1520 } 1521 } 1522 1523 kfree(buf); 1524 free_xid(xid); 1525 return rc; 1526 } 1527 1528 static __u32 1529 hash_lockowner(fl_owner_t owner) 1530 { 1531 return cifs_lock_secret ^ hash32_ptr((const void *)owner); 1532 } 1533 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1534 1535 struct lock_to_push { 1536 struct list_head llist; 1537 __u64 offset; 1538 __u64 length; 1539 __u32 pid; 1540 __u16 netfid; 1541 __u8 type; 1542 }; 1543 1544 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1545 static int 1546 cifs_push_posix_locks(struct cifsFileInfo *cfile) 1547 { 1548 struct inode *inode = d_inode(cfile->dentry); 1549 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 1550 struct file_lock *flock; 1551 struct file_lock_context *flctx = locks_inode_context(inode); 1552 unsigned int count = 0, i; 1553 int rc = 0, xid, type; 1554 struct list_head locks_to_send, *el; 1555 struct lock_to_push *lck, *tmp; 1556 __u64 length; 1557 1558 xid = get_xid(); 1559 1560 if (!flctx) 1561 goto out; 1562 1563 spin_lock(&flctx->flc_lock); 1564 list_for_each(el, &flctx->flc_posix) { 1565 count++; 1566 } 1567 spin_unlock(&flctx->flc_lock); 1568 1569 INIT_LIST_HEAD(&locks_to_send); 1570 1571 /* 1572 * Allocating count locks is enough because no FL_POSIX locks can be 1573 * added to the list while we are holding cinode->lock_sem that 1574 * protects locking operations of this inode. 1575 */ 1576 for (i = 0; i < count; i++) { 1577 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL); 1578 if (!lck) { 1579 rc = -ENOMEM; 1580 goto err_out; 1581 } 1582 list_add_tail(&lck->llist, &locks_to_send); 1583 } 1584 1585 el = locks_to_send.next; 1586 spin_lock(&flctx->flc_lock); 1587 list_for_each_entry(flock, &flctx->flc_posix, fl_list) { 1588 if (el == &locks_to_send) { 1589 /* 1590 * The list ended. We don't have enough allocated 1591 * structures - something is really wrong. 1592 */ 1593 cifs_dbg(VFS, "Can't push all brlocks!\n"); 1594 break; 1595 } 1596 length = cifs_flock_len(flock); 1597 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK) 1598 type = CIFS_RDLCK; 1599 else 1600 type = CIFS_WRLCK; 1601 lck = list_entry(el, struct lock_to_push, llist); 1602 lck->pid = hash_lockowner(flock->fl_owner); 1603 lck->netfid = cfile->fid.netfid; 1604 lck->length = length; 1605 lck->type = type; 1606 lck->offset = flock->fl_start; 1607 } 1608 spin_unlock(&flctx->flc_lock); 1609 1610 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) { 1611 int stored_rc; 1612 1613 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid, 1614 lck->offset, lck->length, NULL, 1615 lck->type, 0); 1616 if (stored_rc) 1617 rc = stored_rc; 1618 list_del(&lck->llist); 1619 kfree(lck); 1620 } 1621 1622 out: 1623 free_xid(xid); 1624 return rc; 1625 err_out: 1626 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) { 1627 list_del(&lck->llist); 1628 kfree(lck); 1629 } 1630 goto out; 1631 } 1632 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1633 1634 static int 1635 cifs_push_locks(struct cifsFileInfo *cfile) 1636 { 1637 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1638 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 1639 int rc = 0; 1640 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1641 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb); 1642 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1643 1644 /* we are going to update can_cache_brlcks here - need a write access */ 1645 cifs_down_write(&cinode->lock_sem); 1646 if (!cinode->can_cache_brlcks) { 1647 up_write(&cinode->lock_sem); 1648 return rc; 1649 } 1650 1651 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1652 if (cap_unix(tcon->ses) && 1653 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 1654 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 1655 rc = cifs_push_posix_locks(cfile); 1656 else 1657 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1658 rc = tcon->ses->server->ops->push_mand_locks(cfile); 1659 1660 cinode->can_cache_brlcks = false; 1661 up_write(&cinode->lock_sem); 1662 return rc; 1663 } 1664 1665 static void 1666 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock, 1667 bool *wait_flag, struct TCP_Server_Info *server) 1668 { 1669 if (flock->fl_flags & FL_POSIX) 1670 cifs_dbg(FYI, "Posix\n"); 1671 if (flock->fl_flags & FL_FLOCK) 1672 cifs_dbg(FYI, "Flock\n"); 1673 if (flock->fl_flags & FL_SLEEP) { 1674 cifs_dbg(FYI, "Blocking lock\n"); 1675 *wait_flag = true; 1676 } 1677 if (flock->fl_flags & FL_ACCESS) 1678 cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n"); 1679 if (flock->fl_flags & FL_LEASE) 1680 cifs_dbg(FYI, "Lease on file - not implemented yet\n"); 1681 if (flock->fl_flags & 1682 (~(FL_POSIX | FL_FLOCK | FL_SLEEP | 1683 FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK))) 1684 cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags); 1685 1686 *type = server->vals->large_lock_type; 1687 if (flock->fl_type == F_WRLCK) { 1688 cifs_dbg(FYI, "F_WRLCK\n"); 1689 *type |= server->vals->exclusive_lock_type; 1690 *lock = 1; 1691 } else if (flock->fl_type == F_UNLCK) { 1692 cifs_dbg(FYI, "F_UNLCK\n"); 1693 *type |= server->vals->unlock_lock_type; 1694 *unlock = 1; 1695 /* Check if unlock includes more than one lock range */ 1696 } else if (flock->fl_type == F_RDLCK) { 1697 cifs_dbg(FYI, "F_RDLCK\n"); 1698 *type |= server->vals->shared_lock_type; 1699 *lock = 1; 1700 } else if (flock->fl_type == F_EXLCK) { 1701 cifs_dbg(FYI, "F_EXLCK\n"); 1702 *type |= server->vals->exclusive_lock_type; 1703 *lock = 1; 1704 } else if (flock->fl_type == F_SHLCK) { 1705 cifs_dbg(FYI, "F_SHLCK\n"); 1706 *type |= server->vals->shared_lock_type; 1707 *lock = 1; 1708 } else 1709 cifs_dbg(FYI, "Unknown type of lock\n"); 1710 } 1711 1712 static int 1713 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type, 1714 bool wait_flag, bool posix_lck, unsigned int xid) 1715 { 1716 int rc = 0; 1717 __u64 length = cifs_flock_len(flock); 1718 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data; 1719 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 1720 struct TCP_Server_Info *server = tcon->ses->server; 1721 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1722 __u16 netfid = cfile->fid.netfid; 1723 1724 if (posix_lck) { 1725 int posix_lock_type; 1726 1727 rc = cifs_posix_lock_test(file, flock); 1728 if (!rc) 1729 return rc; 1730 1731 if (type & server->vals->shared_lock_type) 1732 posix_lock_type = CIFS_RDLCK; 1733 else 1734 posix_lock_type = CIFS_WRLCK; 1735 rc = CIFSSMBPosixLock(xid, tcon, netfid, 1736 hash_lockowner(flock->fl_owner), 1737 flock->fl_start, length, flock, 1738 posix_lock_type, wait_flag); 1739 return rc; 1740 } 1741 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1742 1743 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock); 1744 if (!rc) 1745 return rc; 1746 1747 /* BB we could chain these into one lock request BB */ 1748 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type, 1749 1, 0, false); 1750 if (rc == 0) { 1751 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, 1752 type, 0, 1, false); 1753 flock->fl_type = F_UNLCK; 1754 if (rc != 0) 1755 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n", 1756 rc); 1757 return 0; 1758 } 1759 1760 if (type & server->vals->shared_lock_type) { 1761 flock->fl_type = F_WRLCK; 1762 return 0; 1763 } 1764 1765 type &= ~server->vals->exclusive_lock_type; 1766 1767 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, 1768 type | server->vals->shared_lock_type, 1769 1, 0, false); 1770 if (rc == 0) { 1771 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, 1772 type | server->vals->shared_lock_type, 0, 1, false); 1773 flock->fl_type = F_RDLCK; 1774 if (rc != 0) 1775 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n", 1776 rc); 1777 } else 1778 flock->fl_type = F_WRLCK; 1779 1780 return 0; 1781 } 1782 1783 void 1784 cifs_move_llist(struct list_head *source, struct list_head *dest) 1785 { 1786 struct list_head *li, *tmp; 1787 list_for_each_safe(li, tmp, source) 1788 list_move(li, dest); 1789 } 1790 1791 void 1792 cifs_free_llist(struct list_head *llist) 1793 { 1794 struct cifsLockInfo *li, *tmp; 1795 list_for_each_entry_safe(li, tmp, llist, llist) { 1796 cifs_del_lock_waiters(li); 1797 list_del(&li->llist); 1798 kfree(li); 1799 } 1800 } 1801 1802 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1803 int 1804 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, 1805 unsigned int xid) 1806 { 1807 int rc = 0, stored_rc; 1808 static const int types[] = { 1809 LOCKING_ANDX_LARGE_FILES, 1810 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES 1811 }; 1812 unsigned int i; 1813 unsigned int max_num, num, max_buf; 1814 LOCKING_ANDX_RANGE *buf, *cur; 1815 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 1816 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); 1817 struct cifsLockInfo *li, *tmp; 1818 __u64 length = cifs_flock_len(flock); 1819 struct list_head tmp_llist; 1820 1821 INIT_LIST_HEAD(&tmp_llist); 1822 1823 /* 1824 * Accessing maxBuf is racy with cifs_reconnect - need to store value 1825 * and check it before using. 1826 */ 1827 max_buf = tcon->ses->server->maxBuf; 1828 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) 1829 return -EINVAL; 1830 1831 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) > 1832 PAGE_SIZE); 1833 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr), 1834 PAGE_SIZE); 1835 max_num = (max_buf - sizeof(struct smb_hdr)) / 1836 sizeof(LOCKING_ANDX_RANGE); 1837 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL); 1838 if (!buf) 1839 return -ENOMEM; 1840 1841 cifs_down_write(&cinode->lock_sem); 1842 for (i = 0; i < 2; i++) { 1843 cur = buf; 1844 num = 0; 1845 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) { 1846 if (flock->fl_start > li->offset || 1847 (flock->fl_start + length) < 1848 (li->offset + li->length)) 1849 continue; 1850 if (current->tgid != li->pid) 1851 continue; 1852 if (types[i] != li->type) 1853 continue; 1854 if (cinode->can_cache_brlcks) { 1855 /* 1856 * We can cache brlock requests - simply remove 1857 * a lock from the file's list. 1858 */ 1859 list_del(&li->llist); 1860 cifs_del_lock_waiters(li); 1861 kfree(li); 1862 continue; 1863 } 1864 cur->Pid = cpu_to_le16(li->pid); 1865 cur->LengthLow = cpu_to_le32((u32)li->length); 1866 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32)); 1867 cur->OffsetLow = cpu_to_le32((u32)li->offset); 1868 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32)); 1869 /* 1870 * We need to save a lock here to let us add it again to 1871 * the file's list if the unlock range request fails on 1872 * the server. 1873 */ 1874 list_move(&li->llist, &tmp_llist); 1875 if (++num == max_num) { 1876 stored_rc = cifs_lockv(xid, tcon, 1877 cfile->fid.netfid, 1878 li->type, num, 0, buf); 1879 if (stored_rc) { 1880 /* 1881 * We failed on the unlock range 1882 * request - add all locks from the tmp 1883 * list to the head of the file's list. 1884 */ 1885 cifs_move_llist(&tmp_llist, 1886 &cfile->llist->locks); 1887 rc = stored_rc; 1888 } else 1889 /* 1890 * The unlock range request succeed - 1891 * free the tmp list. 1892 */ 1893 cifs_free_llist(&tmp_llist); 1894 cur = buf; 1895 num = 0; 1896 } else 1897 cur++; 1898 } 1899 if (num) { 1900 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid, 1901 types[i], num, 0, buf); 1902 if (stored_rc) { 1903 cifs_move_llist(&tmp_llist, 1904 &cfile->llist->locks); 1905 rc = stored_rc; 1906 } else 1907 cifs_free_llist(&tmp_llist); 1908 } 1909 } 1910 1911 up_write(&cinode->lock_sem); 1912 kfree(buf); 1913 return rc; 1914 } 1915 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1916 1917 static int 1918 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type, 1919 bool wait_flag, bool posix_lck, int lock, int unlock, 1920 unsigned int xid) 1921 { 1922 int rc = 0; 1923 __u64 length = cifs_flock_len(flock); 1924 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data; 1925 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 1926 struct TCP_Server_Info *server = tcon->ses->server; 1927 struct inode *inode = d_inode(cfile->dentry); 1928 1929 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY 1930 if (posix_lck) { 1931 int posix_lock_type; 1932 1933 rc = cifs_posix_lock_set(file, flock); 1934 if (rc <= FILE_LOCK_DEFERRED) 1935 return rc; 1936 1937 if (type & server->vals->shared_lock_type) 1938 posix_lock_type = CIFS_RDLCK; 1939 else 1940 posix_lock_type = CIFS_WRLCK; 1941 1942 if (unlock == 1) 1943 posix_lock_type = CIFS_UNLCK; 1944 1945 rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid, 1946 hash_lockowner(flock->fl_owner), 1947 flock->fl_start, length, 1948 NULL, posix_lock_type, wait_flag); 1949 goto out; 1950 } 1951 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ 1952 if (lock) { 1953 struct cifsLockInfo *lock; 1954 1955 lock = cifs_lock_init(flock->fl_start, length, type, 1956 flock->fl_flags); 1957 if (!lock) 1958 return -ENOMEM; 1959 1960 rc = cifs_lock_add_if(cfile, lock, wait_flag); 1961 if (rc < 0) { 1962 kfree(lock); 1963 return rc; 1964 } 1965 if (!rc) 1966 goto out; 1967 1968 /* 1969 * Windows 7 server can delay breaking lease from read to None 1970 * if we set a byte-range lock on a file - break it explicitly 1971 * before sending the lock to the server to be sure the next 1972 * read won't conflict with non-overlapted locks due to 1973 * pagereading. 1974 */ 1975 if (!CIFS_CACHE_WRITE(CIFS_I(inode)) && 1976 CIFS_CACHE_READ(CIFS_I(inode))) { 1977 cifs_zap_mapping(inode); 1978 cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n", 1979 inode); 1980 CIFS_I(inode)->oplock = 0; 1981 } 1982 1983 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, 1984 type, 1, 0, wait_flag); 1985 if (rc) { 1986 kfree(lock); 1987 return rc; 1988 } 1989 1990 cifs_lock_add(cfile, lock); 1991 } else if (unlock) 1992 rc = server->ops->mand_unlock_range(cfile, flock, xid); 1993 1994 out: 1995 if ((flock->fl_flags & FL_POSIX) || (flock->fl_flags & FL_FLOCK)) { 1996 /* 1997 * If this is a request to remove all locks because we 1998 * are closing the file, it doesn't matter if the 1999 * unlocking failed as both cifs.ko and the SMB server 2000 * remove the lock on file close 2001 */ 2002 if (rc) { 2003 cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc); 2004 if (!(flock->fl_flags & FL_CLOSE)) 2005 return rc; 2006 } 2007 rc = locks_lock_file_wait(file, flock); 2008 } 2009 return rc; 2010 } 2011 2012 int cifs_flock(struct file *file, int cmd, struct file_lock *fl) 2013 { 2014 int rc, xid; 2015 int lock = 0, unlock = 0; 2016 bool wait_flag = false; 2017 bool posix_lck = false; 2018 struct cifs_sb_info *cifs_sb; 2019 struct cifs_tcon *tcon; 2020 struct cifsFileInfo *cfile; 2021 __u32 type; 2022 2023 xid = get_xid(); 2024 2025 if (!(fl->fl_flags & FL_FLOCK)) { 2026 rc = -ENOLCK; 2027 free_xid(xid); 2028 return rc; 2029 } 2030 2031 cfile = (struct cifsFileInfo *)file->private_data; 2032 tcon = tlink_tcon(cfile->tlink); 2033 2034 cifs_read_flock(fl, &type, &lock, &unlock, &wait_flag, 2035 tcon->ses->server); 2036 cifs_sb = CIFS_FILE_SB(file); 2037 2038 if (cap_unix(tcon->ses) && 2039 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 2040 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 2041 posix_lck = true; 2042 2043 if (!lock && !unlock) { 2044 /* 2045 * if no lock or unlock then nothing to do since we do not 2046 * know what it is 2047 */ 2048 rc = -EOPNOTSUPP; 2049 free_xid(xid); 2050 return rc; 2051 } 2052 2053 rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock, 2054 xid); 2055 free_xid(xid); 2056 return rc; 2057 2058 2059 } 2060 2061 int cifs_lock(struct file *file, int cmd, struct file_lock *flock) 2062 { 2063 int rc, xid; 2064 int lock = 0, unlock = 0; 2065 bool wait_flag = false; 2066 bool posix_lck = false; 2067 struct cifs_sb_info *cifs_sb; 2068 struct cifs_tcon *tcon; 2069 struct cifsFileInfo *cfile; 2070 __u32 type; 2071 2072 rc = -EACCES; 2073 xid = get_xid(); 2074 2075 cifs_dbg(FYI, "%s: %pD2 cmd=0x%x type=0x%x flags=0x%x r=%lld:%lld\n", __func__, file, cmd, 2076 flock->fl_flags, flock->fl_type, (long long)flock->fl_start, 2077 (long long)flock->fl_end); 2078 2079 cfile = (struct cifsFileInfo *)file->private_data; 2080 tcon = tlink_tcon(cfile->tlink); 2081 2082 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag, 2083 tcon->ses->server); 2084 cifs_sb = CIFS_FILE_SB(file); 2085 set_bit(CIFS_INO_CLOSE_ON_LOCK, &CIFS_I(d_inode(cfile->dentry))->flags); 2086 2087 if (cap_unix(tcon->ses) && 2088 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 2089 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 2090 posix_lck = true; 2091 /* 2092 * BB add code here to normalize offset and length to account for 2093 * negative length which we can not accept over the wire. 2094 */ 2095 if (IS_GETLK(cmd)) { 2096 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid); 2097 free_xid(xid); 2098 return rc; 2099 } 2100 2101 if (!lock && !unlock) { 2102 /* 2103 * if no lock or unlock then nothing to do since we do not 2104 * know what it is 2105 */ 2106 free_xid(xid); 2107 return -EOPNOTSUPP; 2108 } 2109 2110 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock, 2111 xid); 2112 free_xid(xid); 2113 return rc; 2114 } 2115 2116 /* 2117 * update the file size (if needed) after a write. Should be called with 2118 * the inode->i_lock held 2119 */ 2120 void 2121 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset, 2122 unsigned int bytes_written) 2123 { 2124 loff_t end_of_write = offset + bytes_written; 2125 2126 if (end_of_write > cifsi->netfs.remote_i_size) 2127 netfs_resize_file(&cifsi->netfs, end_of_write, true); 2128 } 2129 2130 static ssize_t 2131 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data, 2132 size_t write_size, loff_t *offset) 2133 { 2134 int rc = 0; 2135 unsigned int bytes_written = 0; 2136 unsigned int total_written; 2137 struct cifs_tcon *tcon; 2138 struct TCP_Server_Info *server; 2139 unsigned int xid; 2140 struct dentry *dentry = open_file->dentry; 2141 struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry)); 2142 struct cifs_io_parms io_parms = {0}; 2143 2144 cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n", 2145 write_size, *offset, dentry); 2146 2147 tcon = tlink_tcon(open_file->tlink); 2148 server = tcon->ses->server; 2149 2150 if (!server->ops->sync_write) 2151 return -ENOSYS; 2152 2153 xid = get_xid(); 2154 2155 for (total_written = 0; write_size > total_written; 2156 total_written += bytes_written) { 2157 rc = -EAGAIN; 2158 while (rc == -EAGAIN) { 2159 struct kvec iov[2]; 2160 unsigned int len; 2161 2162 if (open_file->invalidHandle) { 2163 /* we could deadlock if we called 2164 filemap_fdatawait from here so tell 2165 reopen_file not to flush data to 2166 server now */ 2167 rc = cifs_reopen_file(open_file, false); 2168 if (rc != 0) 2169 break; 2170 } 2171 2172 len = min(server->ops->wp_retry_size(d_inode(dentry)), 2173 (unsigned int)write_size - total_written); 2174 /* iov[0] is reserved for smb header */ 2175 iov[1].iov_base = (char *)write_data + total_written; 2176 iov[1].iov_len = len; 2177 io_parms.pid = pid; 2178 io_parms.tcon = tcon; 2179 io_parms.offset = *offset; 2180 io_parms.length = len; 2181 rc = server->ops->sync_write(xid, &open_file->fid, 2182 &io_parms, &bytes_written, iov, 1); 2183 } 2184 if (rc || (bytes_written == 0)) { 2185 if (total_written) 2186 break; 2187 else { 2188 free_xid(xid); 2189 return rc; 2190 } 2191 } else { 2192 spin_lock(&d_inode(dentry)->i_lock); 2193 cifs_update_eof(cifsi, *offset, bytes_written); 2194 spin_unlock(&d_inode(dentry)->i_lock); 2195 *offset += bytes_written; 2196 } 2197 } 2198 2199 cifs_stats_bytes_written(tcon, total_written); 2200 2201 if (total_written > 0) { 2202 spin_lock(&d_inode(dentry)->i_lock); 2203 if (*offset > d_inode(dentry)->i_size) { 2204 i_size_write(d_inode(dentry), *offset); 2205 d_inode(dentry)->i_blocks = (512 - 1 + *offset) >> 9; 2206 } 2207 spin_unlock(&d_inode(dentry)->i_lock); 2208 } 2209 mark_inode_dirty_sync(d_inode(dentry)); 2210 free_xid(xid); 2211 return total_written; 2212 } 2213 2214 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode, 2215 bool fsuid_only) 2216 { 2217 struct cifsFileInfo *open_file = NULL; 2218 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb); 2219 2220 /* only filter by fsuid on multiuser mounts */ 2221 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)) 2222 fsuid_only = false; 2223 2224 spin_lock(&cifs_inode->open_file_lock); 2225 /* we could simply get the first_list_entry since write-only entries 2226 are always at the end of the list but since the first entry might 2227 have a close pending, we go through the whole list */ 2228 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) { 2229 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid())) 2230 continue; 2231 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) { 2232 if ((!open_file->invalidHandle)) { 2233 /* found a good file */ 2234 /* lock it so it will not be closed on us */ 2235 cifsFileInfo_get(open_file); 2236 spin_unlock(&cifs_inode->open_file_lock); 2237 return open_file; 2238 } /* else might as well continue, and look for 2239 another, or simply have the caller reopen it 2240 again rather than trying to fix this handle */ 2241 } else /* write only file */ 2242 break; /* write only files are last so must be done */ 2243 } 2244 spin_unlock(&cifs_inode->open_file_lock); 2245 return NULL; 2246 } 2247 2248 /* Return -EBADF if no handle is found and general rc otherwise */ 2249 int 2250 cifs_get_writable_file(struct cifsInodeInfo *cifs_inode, int flags, 2251 struct cifsFileInfo **ret_file) 2252 { 2253 struct cifsFileInfo *open_file, *inv_file = NULL; 2254 struct cifs_sb_info *cifs_sb; 2255 bool any_available = false; 2256 int rc = -EBADF; 2257 unsigned int refind = 0; 2258 bool fsuid_only = flags & FIND_WR_FSUID_ONLY; 2259 bool with_delete = flags & FIND_WR_WITH_DELETE; 2260 *ret_file = NULL; 2261 2262 /* 2263 * Having a null inode here (because mapping->host was set to zero by 2264 * the VFS or MM) should not happen but we had reports of on oops (due 2265 * to it being zero) during stress testcases so we need to check for it 2266 */ 2267 2268 if (cifs_inode == NULL) { 2269 cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n"); 2270 dump_stack(); 2271 return rc; 2272 } 2273 2274 cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb); 2275 2276 /* only filter by fsuid on multiuser mounts */ 2277 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)) 2278 fsuid_only = false; 2279 2280 spin_lock(&cifs_inode->open_file_lock); 2281 refind_writable: 2282 if (refind > MAX_REOPEN_ATT) { 2283 spin_unlock(&cifs_inode->open_file_lock); 2284 return rc; 2285 } 2286 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) { 2287 if (!any_available && open_file->pid != current->tgid) 2288 continue; 2289 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid())) 2290 continue; 2291 if (with_delete && !(open_file->fid.access & DELETE)) 2292 continue; 2293 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) { 2294 if (!open_file->invalidHandle) { 2295 /* found a good writable file */ 2296 cifsFileInfo_get(open_file); 2297 spin_unlock(&cifs_inode->open_file_lock); 2298 *ret_file = open_file; 2299 return 0; 2300 } else { 2301 if (!inv_file) 2302 inv_file = open_file; 2303 } 2304 } 2305 } 2306 /* couldn't find useable FH with same pid, try any available */ 2307 if (!any_available) { 2308 any_available = true; 2309 goto refind_writable; 2310 } 2311 2312 if (inv_file) { 2313 any_available = false; 2314 cifsFileInfo_get(inv_file); 2315 } 2316 2317 spin_unlock(&cifs_inode->open_file_lock); 2318 2319 if (inv_file) { 2320 rc = cifs_reopen_file(inv_file, false); 2321 if (!rc) { 2322 *ret_file = inv_file; 2323 return 0; 2324 } 2325 2326 spin_lock(&cifs_inode->open_file_lock); 2327 list_move_tail(&inv_file->flist, &cifs_inode->openFileList); 2328 spin_unlock(&cifs_inode->open_file_lock); 2329 cifsFileInfo_put(inv_file); 2330 ++refind; 2331 inv_file = NULL; 2332 spin_lock(&cifs_inode->open_file_lock); 2333 goto refind_writable; 2334 } 2335 2336 return rc; 2337 } 2338 2339 struct cifsFileInfo * 2340 find_writable_file(struct cifsInodeInfo *cifs_inode, int flags) 2341 { 2342 struct cifsFileInfo *cfile; 2343 int rc; 2344 2345 rc = cifs_get_writable_file(cifs_inode, flags, &cfile); 2346 if (rc) 2347 cifs_dbg(FYI, "Couldn't find writable handle rc=%d\n", rc); 2348 2349 return cfile; 2350 } 2351 2352 int 2353 cifs_get_writable_path(struct cifs_tcon *tcon, const char *name, 2354 int flags, 2355 struct cifsFileInfo **ret_file) 2356 { 2357 struct cifsFileInfo *cfile; 2358 void *page = alloc_dentry_path(); 2359 2360 *ret_file = NULL; 2361 2362 spin_lock(&tcon->open_file_lock); 2363 list_for_each_entry(cfile, &tcon->openFileList, tlist) { 2364 struct cifsInodeInfo *cinode; 2365 const char *full_path = build_path_from_dentry(cfile->dentry, page); 2366 if (IS_ERR(full_path)) { 2367 spin_unlock(&tcon->open_file_lock); 2368 free_dentry_path(page); 2369 return PTR_ERR(full_path); 2370 } 2371 if (strcmp(full_path, name)) 2372 continue; 2373 2374 cinode = CIFS_I(d_inode(cfile->dentry)); 2375 spin_unlock(&tcon->open_file_lock); 2376 free_dentry_path(page); 2377 return cifs_get_writable_file(cinode, flags, ret_file); 2378 } 2379 2380 spin_unlock(&tcon->open_file_lock); 2381 free_dentry_path(page); 2382 return -ENOENT; 2383 } 2384 2385 int 2386 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name, 2387 struct cifsFileInfo **ret_file) 2388 { 2389 struct cifsFileInfo *cfile; 2390 void *page = alloc_dentry_path(); 2391 2392 *ret_file = NULL; 2393 2394 spin_lock(&tcon->open_file_lock); 2395 list_for_each_entry(cfile, &tcon->openFileList, tlist) { 2396 struct cifsInodeInfo *cinode; 2397 const char *full_path = build_path_from_dentry(cfile->dentry, page); 2398 if (IS_ERR(full_path)) { 2399 spin_unlock(&tcon->open_file_lock); 2400 free_dentry_path(page); 2401 return PTR_ERR(full_path); 2402 } 2403 if (strcmp(full_path, name)) 2404 continue; 2405 2406 cinode = CIFS_I(d_inode(cfile->dentry)); 2407 spin_unlock(&tcon->open_file_lock); 2408 free_dentry_path(page); 2409 *ret_file = find_readable_file(cinode, 0); 2410 return *ret_file ? 0 : -ENOENT; 2411 } 2412 2413 spin_unlock(&tcon->open_file_lock); 2414 free_dentry_path(page); 2415 return -ENOENT; 2416 } 2417 2418 void 2419 cifs_writedata_release(struct kref *refcount) 2420 { 2421 struct cifs_writedata *wdata = container_of(refcount, 2422 struct cifs_writedata, refcount); 2423 #ifdef CONFIG_CIFS_SMB_DIRECT 2424 if (wdata->mr) { 2425 smbd_deregister_mr(wdata->mr); 2426 wdata->mr = NULL; 2427 } 2428 #endif 2429 2430 if (wdata->cfile) 2431 cifsFileInfo_put(wdata->cfile); 2432 2433 kfree(wdata); 2434 } 2435 2436 /* 2437 * Write failed with a retryable error. Resend the write request. It's also 2438 * possible that the page was redirtied so re-clean the page. 2439 */ 2440 static void 2441 cifs_writev_requeue(struct cifs_writedata *wdata) 2442 { 2443 int rc = 0; 2444 struct inode *inode = d_inode(wdata->cfile->dentry); 2445 struct TCP_Server_Info *server; 2446 unsigned int rest_len = wdata->bytes; 2447 loff_t fpos = wdata->offset; 2448 2449 server = tlink_tcon(wdata->cfile->tlink)->ses->server; 2450 do { 2451 struct cifs_writedata *wdata2; 2452 unsigned int wsize, cur_len; 2453 2454 wsize = server->ops->wp_retry_size(inode); 2455 if (wsize < rest_len) { 2456 if (wsize < PAGE_SIZE) { 2457 rc = -EOPNOTSUPP; 2458 break; 2459 } 2460 cur_len = min(round_down(wsize, PAGE_SIZE), rest_len); 2461 } else { 2462 cur_len = rest_len; 2463 } 2464 2465 wdata2 = cifs_writedata_alloc(cifs_writev_complete); 2466 if (!wdata2) { 2467 rc = -ENOMEM; 2468 break; 2469 } 2470 2471 wdata2->sync_mode = wdata->sync_mode; 2472 wdata2->offset = fpos; 2473 wdata2->bytes = cur_len; 2474 wdata2->iter = wdata->iter; 2475 2476 iov_iter_advance(&wdata2->iter, fpos - wdata->offset); 2477 iov_iter_truncate(&wdata2->iter, wdata2->bytes); 2478 2479 if (iov_iter_is_xarray(&wdata2->iter)) 2480 /* Check for pages having been redirtied and clean 2481 * them. We can do this by walking the xarray. If 2482 * it's not an xarray, then it's a DIO and we shouldn't 2483 * be mucking around with the page bits. 2484 */ 2485 cifs_undirty_folios(inode, fpos, cur_len); 2486 2487 rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY, 2488 &wdata2->cfile); 2489 if (!wdata2->cfile) { 2490 cifs_dbg(VFS, "No writable handle to retry writepages rc=%d\n", 2491 rc); 2492 if (!is_retryable_error(rc)) 2493 rc = -EBADF; 2494 } else { 2495 wdata2->pid = wdata2->cfile->pid; 2496 rc = server->ops->async_writev(wdata2, 2497 cifs_writedata_release); 2498 } 2499 2500 kref_put(&wdata2->refcount, cifs_writedata_release); 2501 if (rc) { 2502 if (is_retryable_error(rc)) 2503 continue; 2504 fpos += cur_len; 2505 rest_len -= cur_len; 2506 break; 2507 } 2508 2509 fpos += cur_len; 2510 rest_len -= cur_len; 2511 } while (rest_len > 0); 2512 2513 /* Clean up remaining pages from the original wdata */ 2514 if (iov_iter_is_xarray(&wdata->iter)) 2515 cifs_pages_write_failed(inode, fpos, rest_len); 2516 2517 if (rc != 0 && !is_retryable_error(rc)) 2518 mapping_set_error(inode->i_mapping, rc); 2519 kref_put(&wdata->refcount, cifs_writedata_release); 2520 } 2521 2522 void 2523 cifs_writev_complete(struct work_struct *work) 2524 { 2525 struct cifs_writedata *wdata = container_of(work, 2526 struct cifs_writedata, work); 2527 struct inode *inode = d_inode(wdata->cfile->dentry); 2528 2529 if (wdata->result == 0) { 2530 spin_lock(&inode->i_lock); 2531 cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes); 2532 spin_unlock(&inode->i_lock); 2533 cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink), 2534 wdata->bytes); 2535 } else if (wdata->sync_mode == WB_SYNC_ALL && wdata->result == -EAGAIN) 2536 return cifs_writev_requeue(wdata); 2537 2538 if (wdata->result == -EAGAIN) 2539 cifs_pages_write_redirty(inode, wdata->offset, wdata->bytes); 2540 else if (wdata->result < 0) 2541 cifs_pages_write_failed(inode, wdata->offset, wdata->bytes); 2542 else 2543 cifs_pages_written_back(inode, wdata->offset, wdata->bytes); 2544 2545 if (wdata->result != -EAGAIN) 2546 mapping_set_error(inode->i_mapping, wdata->result); 2547 kref_put(&wdata->refcount, cifs_writedata_release); 2548 } 2549 2550 struct cifs_writedata *cifs_writedata_alloc(work_func_t complete) 2551 { 2552 struct cifs_writedata *wdata; 2553 2554 wdata = kzalloc(sizeof(*wdata), GFP_NOFS); 2555 if (wdata != NULL) { 2556 kref_init(&wdata->refcount); 2557 INIT_LIST_HEAD(&wdata->list); 2558 init_completion(&wdata->done); 2559 INIT_WORK(&wdata->work, complete); 2560 } 2561 return wdata; 2562 } 2563 2564 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to) 2565 { 2566 struct address_space *mapping = page->mapping; 2567 loff_t offset = (loff_t)page->index << PAGE_SHIFT; 2568 char *write_data; 2569 int rc = -EFAULT; 2570 int bytes_written = 0; 2571 struct inode *inode; 2572 struct cifsFileInfo *open_file; 2573 2574 if (!mapping || !mapping->host) 2575 return -EFAULT; 2576 2577 inode = page->mapping->host; 2578 2579 offset += (loff_t)from; 2580 write_data = kmap(page); 2581 write_data += from; 2582 2583 if ((to > PAGE_SIZE) || (from > to)) { 2584 kunmap(page); 2585 return -EIO; 2586 } 2587 2588 /* racing with truncate? */ 2589 if (offset > mapping->host->i_size) { 2590 kunmap(page); 2591 return 0; /* don't care */ 2592 } 2593 2594 /* check to make sure that we are not extending the file */ 2595 if (mapping->host->i_size - offset < (loff_t)to) 2596 to = (unsigned)(mapping->host->i_size - offset); 2597 2598 rc = cifs_get_writable_file(CIFS_I(mapping->host), FIND_WR_ANY, 2599 &open_file); 2600 if (!rc) { 2601 bytes_written = cifs_write(open_file, open_file->pid, 2602 write_data, to - from, &offset); 2603 cifsFileInfo_put(open_file); 2604 /* Does mm or vfs already set times? */ 2605 simple_inode_init_ts(inode); 2606 if ((bytes_written > 0) && (offset)) 2607 rc = 0; 2608 else if (bytes_written < 0) 2609 rc = bytes_written; 2610 else 2611 rc = -EFAULT; 2612 } else { 2613 cifs_dbg(FYI, "No writable handle for write page rc=%d\n", rc); 2614 if (!is_retryable_error(rc)) 2615 rc = -EIO; 2616 } 2617 2618 kunmap(page); 2619 return rc; 2620 } 2621 2622 /* 2623 * Extend the region to be written back to include subsequent contiguously 2624 * dirty pages if possible, but don't sleep while doing so. 2625 */ 2626 static void cifs_extend_writeback(struct address_space *mapping, 2627 long *_count, 2628 loff_t start, 2629 int max_pages, 2630 size_t max_len, 2631 unsigned int *_len) 2632 { 2633 struct folio_batch batch; 2634 struct folio *folio; 2635 unsigned int psize, nr_pages; 2636 size_t len = *_len; 2637 pgoff_t index = (start + len) / PAGE_SIZE; 2638 bool stop = true; 2639 unsigned int i; 2640 XA_STATE(xas, &mapping->i_pages, index); 2641 2642 folio_batch_init(&batch); 2643 2644 do { 2645 /* Firstly, we gather up a batch of contiguous dirty pages 2646 * under the RCU read lock - but we can't clear the dirty flags 2647 * there if any of those pages are mapped. 2648 */ 2649 rcu_read_lock(); 2650 2651 xas_for_each(&xas, folio, ULONG_MAX) { 2652 stop = true; 2653 if (xas_retry(&xas, folio)) 2654 continue; 2655 if (xa_is_value(folio)) 2656 break; 2657 if (folio->index != index) 2658 break; 2659 if (!folio_try_get_rcu(folio)) { 2660 xas_reset(&xas); 2661 continue; 2662 } 2663 nr_pages = folio_nr_pages(folio); 2664 if (nr_pages > max_pages) 2665 break; 2666 2667 /* Has the page moved or been split? */ 2668 if (unlikely(folio != xas_reload(&xas))) { 2669 folio_put(folio); 2670 break; 2671 } 2672 2673 if (!folio_trylock(folio)) { 2674 folio_put(folio); 2675 break; 2676 } 2677 if (!folio_test_dirty(folio) || folio_test_writeback(folio)) { 2678 folio_unlock(folio); 2679 folio_put(folio); 2680 break; 2681 } 2682 2683 max_pages -= nr_pages; 2684 psize = folio_size(folio); 2685 len += psize; 2686 stop = false; 2687 if (max_pages <= 0 || len >= max_len || *_count <= 0) 2688 stop = true; 2689 2690 index += nr_pages; 2691 if (!folio_batch_add(&batch, folio)) 2692 break; 2693 if (stop) 2694 break; 2695 } 2696 2697 if (!stop) 2698 xas_pause(&xas); 2699 rcu_read_unlock(); 2700 2701 /* Now, if we obtained any pages, we can shift them to being 2702 * writable and mark them for caching. 2703 */ 2704 if (!folio_batch_count(&batch)) 2705 break; 2706 2707 for (i = 0; i < folio_batch_count(&batch); i++) { 2708 folio = batch.folios[i]; 2709 /* The folio should be locked, dirty and not undergoing 2710 * writeback from the loop above. 2711 */ 2712 if (!folio_clear_dirty_for_io(folio)) 2713 WARN_ON(1); 2714 folio_start_writeback(folio); 2715 2716 *_count -= folio_nr_pages(folio); 2717 folio_unlock(folio); 2718 } 2719 2720 folio_batch_release(&batch); 2721 cond_resched(); 2722 } while (!stop); 2723 2724 *_len = len; 2725 } 2726 2727 /* 2728 * Write back the locked page and any subsequent non-locked dirty pages. 2729 */ 2730 static ssize_t cifs_write_back_from_locked_folio(struct address_space *mapping, 2731 struct writeback_control *wbc, 2732 struct folio *folio, 2733 loff_t start, loff_t end) 2734 { 2735 struct inode *inode = mapping->host; 2736 struct TCP_Server_Info *server; 2737 struct cifs_writedata *wdata; 2738 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 2739 struct cifs_credits credits_on_stack; 2740 struct cifs_credits *credits = &credits_on_stack; 2741 struct cifsFileInfo *cfile = NULL; 2742 unsigned int xid, wsize, len; 2743 loff_t i_size = i_size_read(inode); 2744 size_t max_len; 2745 long count = wbc->nr_to_write; 2746 int rc; 2747 2748 /* The folio should be locked, dirty and not undergoing writeback. */ 2749 folio_start_writeback(folio); 2750 2751 count -= folio_nr_pages(folio); 2752 len = folio_size(folio); 2753 2754 xid = get_xid(); 2755 server = cifs_pick_channel(cifs_sb_master_tcon(cifs_sb)->ses); 2756 2757 rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY, &cfile); 2758 if (rc) { 2759 cifs_dbg(VFS, "No writable handle in writepages rc=%d\n", rc); 2760 goto err_xid; 2761 } 2762 2763 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize, 2764 &wsize, credits); 2765 if (rc != 0) 2766 goto err_close; 2767 2768 wdata = cifs_writedata_alloc(cifs_writev_complete); 2769 if (!wdata) { 2770 rc = -ENOMEM; 2771 goto err_uncredit; 2772 } 2773 2774 wdata->sync_mode = wbc->sync_mode; 2775 wdata->offset = folio_pos(folio); 2776 wdata->pid = cfile->pid; 2777 wdata->credits = credits_on_stack; 2778 wdata->cfile = cfile; 2779 wdata->server = server; 2780 cfile = NULL; 2781 2782 /* Find all consecutive lockable dirty pages, stopping when we find a 2783 * page that is not immediately lockable, is not dirty or is missing, 2784 * or we reach the end of the range. 2785 */ 2786 if (start < i_size) { 2787 /* Trim the write to the EOF; the extra data is ignored. Also 2788 * put an upper limit on the size of a single storedata op. 2789 */ 2790 max_len = wsize; 2791 max_len = min_t(unsigned long long, max_len, end - start + 1); 2792 max_len = min_t(unsigned long long, max_len, i_size - start); 2793 2794 if (len < max_len) { 2795 int max_pages = INT_MAX; 2796 2797 #ifdef CONFIG_CIFS_SMB_DIRECT 2798 if (server->smbd_conn) 2799 max_pages = server->smbd_conn->max_frmr_depth; 2800 #endif 2801 max_pages -= folio_nr_pages(folio); 2802 2803 if (max_pages > 0) 2804 cifs_extend_writeback(mapping, &count, start, 2805 max_pages, max_len, &len); 2806 } 2807 len = min_t(loff_t, len, max_len); 2808 } 2809 2810 wdata->bytes = len; 2811 2812 /* We now have a contiguous set of dirty pages, each with writeback 2813 * set; the first page is still locked at this point, but all the rest 2814 * have been unlocked. 2815 */ 2816 folio_unlock(folio); 2817 2818 if (start < i_size) { 2819 iov_iter_xarray(&wdata->iter, ITER_SOURCE, &mapping->i_pages, 2820 start, len); 2821 2822 rc = adjust_credits(wdata->server, &wdata->credits, wdata->bytes); 2823 if (rc) 2824 goto err_wdata; 2825 2826 if (wdata->cfile->invalidHandle) 2827 rc = -EAGAIN; 2828 else 2829 rc = wdata->server->ops->async_writev(wdata, 2830 cifs_writedata_release); 2831 if (rc >= 0) { 2832 kref_put(&wdata->refcount, cifs_writedata_release); 2833 goto err_close; 2834 } 2835 } else { 2836 /* The dirty region was entirely beyond the EOF. */ 2837 cifs_pages_written_back(inode, start, len); 2838 rc = 0; 2839 } 2840 2841 err_wdata: 2842 kref_put(&wdata->refcount, cifs_writedata_release); 2843 err_uncredit: 2844 add_credits_and_wake_if(server, credits, 0); 2845 err_close: 2846 if (cfile) 2847 cifsFileInfo_put(cfile); 2848 err_xid: 2849 free_xid(xid); 2850 if (rc == 0) { 2851 wbc->nr_to_write = count; 2852 rc = len; 2853 } else if (is_retryable_error(rc)) { 2854 cifs_pages_write_redirty(inode, start, len); 2855 } else { 2856 cifs_pages_write_failed(inode, start, len); 2857 mapping_set_error(mapping, rc); 2858 } 2859 /* Indication to update ctime and mtime as close is deferred */ 2860 set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags); 2861 return rc; 2862 } 2863 2864 /* 2865 * write a region of pages back to the server 2866 */ 2867 static int cifs_writepages_region(struct address_space *mapping, 2868 struct writeback_control *wbc, 2869 loff_t start, loff_t end, loff_t *_next) 2870 { 2871 struct folio_batch fbatch; 2872 int skips = 0; 2873 2874 folio_batch_init(&fbatch); 2875 do { 2876 int nr; 2877 pgoff_t index = start / PAGE_SIZE; 2878 2879 nr = filemap_get_folios_tag(mapping, &index, end / PAGE_SIZE, 2880 PAGECACHE_TAG_DIRTY, &fbatch); 2881 if (!nr) 2882 break; 2883 2884 for (int i = 0; i < nr; i++) { 2885 ssize_t ret; 2886 struct folio *folio = fbatch.folios[i]; 2887 2888 redo_folio: 2889 start = folio_pos(folio); /* May regress with THPs */ 2890 2891 /* At this point we hold neither the i_pages lock nor the 2892 * page lock: the page may be truncated or invalidated 2893 * (changing page->mapping to NULL), or even swizzled 2894 * back from swapper_space to tmpfs file mapping 2895 */ 2896 if (wbc->sync_mode != WB_SYNC_NONE) { 2897 ret = folio_lock_killable(folio); 2898 if (ret < 0) 2899 goto write_error; 2900 } else { 2901 if (!folio_trylock(folio)) 2902 goto skip_write; 2903 } 2904 2905 if (folio->mapping != mapping || 2906 !folio_test_dirty(folio)) { 2907 start += folio_size(folio); 2908 folio_unlock(folio); 2909 continue; 2910 } 2911 2912 if (folio_test_writeback(folio) || 2913 folio_test_fscache(folio)) { 2914 folio_unlock(folio); 2915 if (wbc->sync_mode == WB_SYNC_NONE) 2916 goto skip_write; 2917 2918 folio_wait_writeback(folio); 2919 #ifdef CONFIG_CIFS_FSCACHE 2920 folio_wait_fscache(folio); 2921 #endif 2922 goto redo_folio; 2923 } 2924 2925 if (!folio_clear_dirty_for_io(folio)) 2926 /* We hold the page lock - it should've been dirty. */ 2927 WARN_ON(1); 2928 2929 ret = cifs_write_back_from_locked_folio(mapping, wbc, folio, start, end); 2930 if (ret < 0) 2931 goto write_error; 2932 2933 start += ret; 2934 continue; 2935 2936 write_error: 2937 folio_batch_release(&fbatch); 2938 *_next = start; 2939 return ret; 2940 2941 skip_write: 2942 /* 2943 * Too many skipped writes, or need to reschedule? 2944 * Treat it as a write error without an error code. 2945 */ 2946 if (skips >= 5 || need_resched()) { 2947 ret = 0; 2948 goto write_error; 2949 } 2950 2951 /* Otherwise, just skip that folio and go on to the next */ 2952 skips++; 2953 start += folio_size(folio); 2954 continue; 2955 } 2956 2957 folio_batch_release(&fbatch); 2958 cond_resched(); 2959 } while (wbc->nr_to_write > 0); 2960 2961 *_next = start; 2962 return 0; 2963 } 2964 2965 /* 2966 * Write some of the pending data back to the server 2967 */ 2968 static int cifs_writepages(struct address_space *mapping, 2969 struct writeback_control *wbc) 2970 { 2971 loff_t start, next; 2972 int ret; 2973 2974 /* We have to be careful as we can end up racing with setattr() 2975 * truncating the pagecache since the caller doesn't take a lock here 2976 * to prevent it. 2977 */ 2978 2979 if (wbc->range_cyclic) { 2980 start = mapping->writeback_index * PAGE_SIZE; 2981 ret = cifs_writepages_region(mapping, wbc, start, LLONG_MAX, &next); 2982 if (ret == 0) { 2983 mapping->writeback_index = next / PAGE_SIZE; 2984 if (start > 0 && wbc->nr_to_write > 0) { 2985 ret = cifs_writepages_region(mapping, wbc, 0, 2986 start, &next); 2987 if (ret == 0) 2988 mapping->writeback_index = 2989 next / PAGE_SIZE; 2990 } 2991 } 2992 } else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) { 2993 ret = cifs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next); 2994 if (wbc->nr_to_write > 0 && ret == 0) 2995 mapping->writeback_index = next / PAGE_SIZE; 2996 } else { 2997 ret = cifs_writepages_region(mapping, wbc, 2998 wbc->range_start, wbc->range_end, &next); 2999 } 3000 3001 return ret; 3002 } 3003 3004 static int 3005 cifs_writepage_locked(struct page *page, struct writeback_control *wbc) 3006 { 3007 int rc; 3008 unsigned int xid; 3009 3010 xid = get_xid(); 3011 /* BB add check for wbc flags */ 3012 get_page(page); 3013 if (!PageUptodate(page)) 3014 cifs_dbg(FYI, "ppw - page not up to date\n"); 3015 3016 /* 3017 * Set the "writeback" flag, and clear "dirty" in the radix tree. 3018 * 3019 * A writepage() implementation always needs to do either this, 3020 * or re-dirty the page with "redirty_page_for_writepage()" in 3021 * the case of a failure. 3022 * 3023 * Just unlocking the page will cause the radix tree tag-bits 3024 * to fail to update with the state of the page correctly. 3025 */ 3026 set_page_writeback(page); 3027 retry_write: 3028 rc = cifs_partialpagewrite(page, 0, PAGE_SIZE); 3029 if (is_retryable_error(rc)) { 3030 if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN) 3031 goto retry_write; 3032 redirty_page_for_writepage(wbc, page); 3033 } else if (rc != 0) { 3034 SetPageError(page); 3035 mapping_set_error(page->mapping, rc); 3036 } else { 3037 SetPageUptodate(page); 3038 } 3039 end_page_writeback(page); 3040 put_page(page); 3041 free_xid(xid); 3042 return rc; 3043 } 3044 3045 static int cifs_write_end(struct file *file, struct address_space *mapping, 3046 loff_t pos, unsigned len, unsigned copied, 3047 struct page *page, void *fsdata) 3048 { 3049 int rc; 3050 struct inode *inode = mapping->host; 3051 struct cifsFileInfo *cfile = file->private_data; 3052 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb); 3053 struct folio *folio = page_folio(page); 3054 __u32 pid; 3055 3056 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) 3057 pid = cfile->pid; 3058 else 3059 pid = current->tgid; 3060 3061 cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n", 3062 page, pos, copied); 3063 3064 if (folio_test_checked(folio)) { 3065 if (copied == len) 3066 folio_mark_uptodate(folio); 3067 folio_clear_checked(folio); 3068 } else if (!folio_test_uptodate(folio) && copied == PAGE_SIZE) 3069 folio_mark_uptodate(folio); 3070 3071 if (!folio_test_uptodate(folio)) { 3072 char *page_data; 3073 unsigned offset = pos & (PAGE_SIZE - 1); 3074 unsigned int xid; 3075 3076 xid = get_xid(); 3077 /* this is probably better than directly calling 3078 partialpage_write since in this function the file handle is 3079 known which we might as well leverage */ 3080 /* BB check if anything else missing out of ppw 3081 such as updating last write time */ 3082 page_data = kmap(page); 3083 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos); 3084 /* if (rc < 0) should we set writebehind rc? */ 3085 kunmap(page); 3086 3087 free_xid(xid); 3088 } else { 3089 rc = copied; 3090 pos += copied; 3091 set_page_dirty(page); 3092 } 3093 3094 if (rc > 0) { 3095 spin_lock(&inode->i_lock); 3096 if (pos > inode->i_size) { 3097 i_size_write(inode, pos); 3098 inode->i_blocks = (512 - 1 + pos) >> 9; 3099 } 3100 spin_unlock(&inode->i_lock); 3101 } 3102 3103 unlock_page(page); 3104 put_page(page); 3105 /* Indication to update ctime and mtime as close is deferred */ 3106 set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags); 3107 3108 return rc; 3109 } 3110 3111 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end, 3112 int datasync) 3113 { 3114 unsigned int xid; 3115 int rc = 0; 3116 struct cifs_tcon *tcon; 3117 struct TCP_Server_Info *server; 3118 struct cifsFileInfo *smbfile = file->private_data; 3119 struct inode *inode = file_inode(file); 3120 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 3121 3122 rc = file_write_and_wait_range(file, start, end); 3123 if (rc) { 3124 trace_cifs_fsync_err(inode->i_ino, rc); 3125 return rc; 3126 } 3127 3128 xid = get_xid(); 3129 3130 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n", 3131 file, datasync); 3132 3133 if (!CIFS_CACHE_READ(CIFS_I(inode))) { 3134 rc = cifs_zap_mapping(inode); 3135 if (rc) { 3136 cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc); 3137 rc = 0; /* don't care about it in fsync */ 3138 } 3139 } 3140 3141 tcon = tlink_tcon(smbfile->tlink); 3142 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) { 3143 server = tcon->ses->server; 3144 if (server->ops->flush == NULL) { 3145 rc = -ENOSYS; 3146 goto strict_fsync_exit; 3147 } 3148 3149 if ((OPEN_FMODE(smbfile->f_flags) & FMODE_WRITE) == 0) { 3150 smbfile = find_writable_file(CIFS_I(inode), FIND_WR_ANY); 3151 if (smbfile) { 3152 rc = server->ops->flush(xid, tcon, &smbfile->fid); 3153 cifsFileInfo_put(smbfile); 3154 } else 3155 cifs_dbg(FYI, "ignore fsync for file not open for write\n"); 3156 } else 3157 rc = server->ops->flush(xid, tcon, &smbfile->fid); 3158 } 3159 3160 strict_fsync_exit: 3161 free_xid(xid); 3162 return rc; 3163 } 3164 3165 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync) 3166 { 3167 unsigned int xid; 3168 int rc = 0; 3169 struct cifs_tcon *tcon; 3170 struct TCP_Server_Info *server; 3171 struct cifsFileInfo *smbfile = file->private_data; 3172 struct inode *inode = file_inode(file); 3173 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file); 3174 3175 rc = file_write_and_wait_range(file, start, end); 3176 if (rc) { 3177 trace_cifs_fsync_err(file_inode(file)->i_ino, rc); 3178 return rc; 3179 } 3180 3181 xid = get_xid(); 3182 3183 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n", 3184 file, datasync); 3185 3186 tcon = tlink_tcon(smbfile->tlink); 3187 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) { 3188 server = tcon->ses->server; 3189 if (server->ops->flush == NULL) { 3190 rc = -ENOSYS; 3191 goto fsync_exit; 3192 } 3193 3194 if ((OPEN_FMODE(smbfile->f_flags) & FMODE_WRITE) == 0) { 3195 smbfile = find_writable_file(CIFS_I(inode), FIND_WR_ANY); 3196 if (smbfile) { 3197 rc = server->ops->flush(xid, tcon, &smbfile->fid); 3198 cifsFileInfo_put(smbfile); 3199 } else 3200 cifs_dbg(FYI, "ignore fsync for file not open for write\n"); 3201 } else 3202 rc = server->ops->flush(xid, tcon, &smbfile->fid); 3203 } 3204 3205 fsync_exit: 3206 free_xid(xid); 3207 return rc; 3208 } 3209 3210 /* 3211 * As file closes, flush all cached write data for this inode checking 3212 * for write behind errors. 3213 */ 3214 int cifs_flush(struct file *file, fl_owner_t id) 3215 { 3216 struct inode *inode = file_inode(file); 3217 int rc = 0; 3218 3219 if (file->f_mode & FMODE_WRITE) 3220 rc = filemap_write_and_wait(inode->i_mapping); 3221 3222 cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc); 3223 if (rc) { 3224 /* get more nuanced writeback errors */ 3225 rc = filemap_check_wb_err(file->f_mapping, 0); 3226 trace_cifs_flush_err(inode->i_ino, rc); 3227 } 3228 return rc; 3229 } 3230 3231 static void 3232 cifs_uncached_writedata_release(struct kref *refcount) 3233 { 3234 struct cifs_writedata *wdata = container_of(refcount, 3235 struct cifs_writedata, refcount); 3236 3237 kref_put(&wdata->ctx->refcount, cifs_aio_ctx_release); 3238 cifs_writedata_release(refcount); 3239 } 3240 3241 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx); 3242 3243 static void 3244 cifs_uncached_writev_complete(struct work_struct *work) 3245 { 3246 struct cifs_writedata *wdata = container_of(work, 3247 struct cifs_writedata, work); 3248 struct inode *inode = d_inode(wdata->cfile->dentry); 3249 struct cifsInodeInfo *cifsi = CIFS_I(inode); 3250 3251 spin_lock(&inode->i_lock); 3252 cifs_update_eof(cifsi, wdata->offset, wdata->bytes); 3253 if (cifsi->netfs.remote_i_size > inode->i_size) 3254 i_size_write(inode, cifsi->netfs.remote_i_size); 3255 spin_unlock(&inode->i_lock); 3256 3257 complete(&wdata->done); 3258 collect_uncached_write_data(wdata->ctx); 3259 /* the below call can possibly free the last ref to aio ctx */ 3260 kref_put(&wdata->refcount, cifs_uncached_writedata_release); 3261 } 3262 3263 static int 3264 cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list, 3265 struct cifs_aio_ctx *ctx) 3266 { 3267 unsigned int wsize; 3268 struct cifs_credits credits; 3269 int rc; 3270 struct TCP_Server_Info *server = wdata->server; 3271 3272 do { 3273 if (wdata->cfile->invalidHandle) { 3274 rc = cifs_reopen_file(wdata->cfile, false); 3275 if (rc == -EAGAIN) 3276 continue; 3277 else if (rc) 3278 break; 3279 } 3280 3281 3282 /* 3283 * Wait for credits to resend this wdata. 3284 * Note: we are attempting to resend the whole wdata not in 3285 * segments 3286 */ 3287 do { 3288 rc = server->ops->wait_mtu_credits(server, wdata->bytes, 3289 &wsize, &credits); 3290 if (rc) 3291 goto fail; 3292 3293 if (wsize < wdata->bytes) { 3294 add_credits_and_wake_if(server, &credits, 0); 3295 msleep(1000); 3296 } 3297 } while (wsize < wdata->bytes); 3298 wdata->credits = credits; 3299 3300 rc = adjust_credits(server, &wdata->credits, wdata->bytes); 3301 3302 if (!rc) { 3303 if (wdata->cfile->invalidHandle) 3304 rc = -EAGAIN; 3305 else { 3306 wdata->replay = true; 3307 #ifdef CONFIG_CIFS_SMB_DIRECT 3308 if (wdata->mr) { 3309 wdata->mr->need_invalidate = true; 3310 smbd_deregister_mr(wdata->mr); 3311 wdata->mr = NULL; 3312 } 3313 #endif 3314 rc = server->ops->async_writev(wdata, 3315 cifs_uncached_writedata_release); 3316 } 3317 } 3318 3319 /* If the write was successfully sent, we are done */ 3320 if (!rc) { 3321 list_add_tail(&wdata->list, wdata_list); 3322 return 0; 3323 } 3324 3325 /* Roll back credits and retry if needed */ 3326 add_credits_and_wake_if(server, &wdata->credits, 0); 3327 } while (rc == -EAGAIN); 3328 3329 fail: 3330 kref_put(&wdata->refcount, cifs_uncached_writedata_release); 3331 return rc; 3332 } 3333 3334 /* 3335 * Select span of a bvec iterator we're going to use. Limit it by both maximum 3336 * size and maximum number of segments. 3337 */ 3338 static size_t cifs_limit_bvec_subset(const struct iov_iter *iter, size_t max_size, 3339 size_t max_segs, unsigned int *_nsegs) 3340 { 3341 const struct bio_vec *bvecs = iter->bvec; 3342 unsigned int nbv = iter->nr_segs, ix = 0, nsegs = 0; 3343 size_t len, span = 0, n = iter->count; 3344 size_t skip = iter->iov_offset; 3345 3346 if (WARN_ON(!iov_iter_is_bvec(iter)) || n == 0) 3347 return 0; 3348 3349 while (n && ix < nbv && skip) { 3350 len = bvecs[ix].bv_len; 3351 if (skip < len) 3352 break; 3353 skip -= len; 3354 n -= len; 3355 ix++; 3356 } 3357 3358 while (n && ix < nbv) { 3359 len = min3(n, bvecs[ix].bv_len - skip, max_size); 3360 span += len; 3361 max_size -= len; 3362 nsegs++; 3363 ix++; 3364 if (max_size == 0 || nsegs >= max_segs) 3365 break; 3366 skip = 0; 3367 n -= len; 3368 } 3369 3370 *_nsegs = nsegs; 3371 return span; 3372 } 3373 3374 static int 3375 cifs_write_from_iter(loff_t fpos, size_t len, struct iov_iter *from, 3376 struct cifsFileInfo *open_file, 3377 struct cifs_sb_info *cifs_sb, struct list_head *wdata_list, 3378 struct cifs_aio_ctx *ctx) 3379 { 3380 int rc = 0; 3381 size_t cur_len, max_len; 3382 struct cifs_writedata *wdata; 3383 pid_t pid; 3384 struct TCP_Server_Info *server; 3385 unsigned int xid, max_segs = INT_MAX; 3386 3387 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) 3388 pid = open_file->pid; 3389 else 3390 pid = current->tgid; 3391 3392 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses); 3393 xid = get_xid(); 3394 3395 #ifdef CONFIG_CIFS_SMB_DIRECT 3396 if (server->smbd_conn) 3397 max_segs = server->smbd_conn->max_frmr_depth; 3398 #endif 3399 3400 do { 3401 struct cifs_credits credits_on_stack; 3402 struct cifs_credits *credits = &credits_on_stack; 3403 unsigned int wsize, nsegs = 0; 3404 3405 if (signal_pending(current)) { 3406 rc = -EINTR; 3407 break; 3408 } 3409 3410 if (open_file->invalidHandle) { 3411 rc = cifs_reopen_file(open_file, false); 3412 if (rc == -EAGAIN) 3413 continue; 3414 else if (rc) 3415 break; 3416 } 3417 3418 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize, 3419 &wsize, credits); 3420 if (rc) 3421 break; 3422 3423 max_len = min_t(const size_t, len, wsize); 3424 if (!max_len) { 3425 rc = -EAGAIN; 3426 add_credits_and_wake_if(server, credits, 0); 3427 break; 3428 } 3429 3430 cur_len = cifs_limit_bvec_subset(from, max_len, max_segs, &nsegs); 3431 cifs_dbg(FYI, "write_from_iter len=%zx/%zx nsegs=%u/%lu/%u\n", 3432 cur_len, max_len, nsegs, from->nr_segs, max_segs); 3433 if (cur_len == 0) { 3434 rc = -EIO; 3435 add_credits_and_wake_if(server, credits, 0); 3436 break; 3437 } 3438 3439 wdata = cifs_writedata_alloc(cifs_uncached_writev_complete); 3440 if (!wdata) { 3441 rc = -ENOMEM; 3442 add_credits_and_wake_if(server, credits, 0); 3443 break; 3444 } 3445 3446 wdata->sync_mode = WB_SYNC_ALL; 3447 wdata->offset = (__u64)fpos; 3448 wdata->cfile = cifsFileInfo_get(open_file); 3449 wdata->server = server; 3450 wdata->pid = pid; 3451 wdata->bytes = cur_len; 3452 wdata->credits = credits_on_stack; 3453 wdata->iter = *from; 3454 wdata->ctx = ctx; 3455 kref_get(&ctx->refcount); 3456 3457 iov_iter_truncate(&wdata->iter, cur_len); 3458 3459 rc = adjust_credits(server, &wdata->credits, wdata->bytes); 3460 3461 if (!rc) { 3462 if (wdata->cfile->invalidHandle) 3463 rc = -EAGAIN; 3464 else 3465 rc = server->ops->async_writev(wdata, 3466 cifs_uncached_writedata_release); 3467 } 3468 3469 if (rc) { 3470 add_credits_and_wake_if(server, &wdata->credits, 0); 3471 kref_put(&wdata->refcount, 3472 cifs_uncached_writedata_release); 3473 if (rc == -EAGAIN) 3474 continue; 3475 break; 3476 } 3477 3478 list_add_tail(&wdata->list, wdata_list); 3479 iov_iter_advance(from, cur_len); 3480 fpos += cur_len; 3481 len -= cur_len; 3482 } while (len > 0); 3483 3484 free_xid(xid); 3485 return rc; 3486 } 3487 3488 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx) 3489 { 3490 struct cifs_writedata *wdata, *tmp; 3491 struct cifs_tcon *tcon; 3492 struct cifs_sb_info *cifs_sb; 3493 struct dentry *dentry = ctx->cfile->dentry; 3494 ssize_t rc; 3495 3496 tcon = tlink_tcon(ctx->cfile->tlink); 3497 cifs_sb = CIFS_SB(dentry->d_sb); 3498 3499 mutex_lock(&ctx->aio_mutex); 3500 3501 if (list_empty(&ctx->list)) { 3502 mutex_unlock(&ctx->aio_mutex); 3503 return; 3504 } 3505 3506 rc = ctx->rc; 3507 /* 3508 * Wait for and collect replies for any successful sends in order of 3509 * increasing offset. Once an error is hit, then return without waiting 3510 * for any more replies. 3511 */ 3512 restart_loop: 3513 list_for_each_entry_safe(wdata, tmp, &ctx->list, list) { 3514 if (!rc) { 3515 if (!try_wait_for_completion(&wdata->done)) { 3516 mutex_unlock(&ctx->aio_mutex); 3517 return; 3518 } 3519 3520 if (wdata->result) 3521 rc = wdata->result; 3522 else 3523 ctx->total_len += wdata->bytes; 3524 3525 /* resend call if it's a retryable error */ 3526 if (rc == -EAGAIN) { 3527 struct list_head tmp_list; 3528 struct iov_iter tmp_from = ctx->iter; 3529 3530 INIT_LIST_HEAD(&tmp_list); 3531 list_del_init(&wdata->list); 3532 3533 if (ctx->direct_io) 3534 rc = cifs_resend_wdata( 3535 wdata, &tmp_list, ctx); 3536 else { 3537 iov_iter_advance(&tmp_from, 3538 wdata->offset - ctx->pos); 3539 3540 rc = cifs_write_from_iter(wdata->offset, 3541 wdata->bytes, &tmp_from, 3542 ctx->cfile, cifs_sb, &tmp_list, 3543 ctx); 3544 3545 kref_put(&wdata->refcount, 3546 cifs_uncached_writedata_release); 3547 } 3548 3549 list_splice(&tmp_list, &ctx->list); 3550 goto restart_loop; 3551 } 3552 } 3553 list_del_init(&wdata->list); 3554 kref_put(&wdata->refcount, cifs_uncached_writedata_release); 3555 } 3556 3557 cifs_stats_bytes_written(tcon, ctx->total_len); 3558 set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(dentry->d_inode)->flags); 3559 3560 ctx->rc = (rc == 0) ? ctx->total_len : rc; 3561 3562 mutex_unlock(&ctx->aio_mutex); 3563 3564 if (ctx->iocb && ctx->iocb->ki_complete) 3565 ctx->iocb->ki_complete(ctx->iocb, ctx->rc); 3566 else 3567 complete(&ctx->done); 3568 } 3569 3570 static ssize_t __cifs_writev( 3571 struct kiocb *iocb, struct iov_iter *from, bool direct) 3572 { 3573 struct file *file = iocb->ki_filp; 3574 ssize_t total_written = 0; 3575 struct cifsFileInfo *cfile; 3576 struct cifs_tcon *tcon; 3577 struct cifs_sb_info *cifs_sb; 3578 struct cifs_aio_ctx *ctx; 3579 int rc; 3580 3581 rc = generic_write_checks(iocb, from); 3582 if (rc <= 0) 3583 return rc; 3584 3585 cifs_sb = CIFS_FILE_SB(file); 3586 cfile = file->private_data; 3587 tcon = tlink_tcon(cfile->tlink); 3588 3589 if (!tcon->ses->server->ops->async_writev) 3590 return -ENOSYS; 3591 3592 ctx = cifs_aio_ctx_alloc(); 3593 if (!ctx) 3594 return -ENOMEM; 3595 3596 ctx->cfile = cifsFileInfo_get(cfile); 3597 3598 if (!is_sync_kiocb(iocb)) 3599 ctx->iocb = iocb; 3600 3601 ctx->pos = iocb->ki_pos; 3602 ctx->direct_io = direct; 3603 ctx->nr_pinned_pages = 0; 3604 3605 if (user_backed_iter(from)) { 3606 /* 3607 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as 3608 * they contain references to the calling process's virtual 3609 * memory layout which won't be available in an async worker 3610 * thread. This also takes a pin on every folio involved. 3611 */ 3612 rc = netfs_extract_user_iter(from, iov_iter_count(from), 3613 &ctx->iter, 0); 3614 if (rc < 0) { 3615 kref_put(&ctx->refcount, cifs_aio_ctx_release); 3616 return rc; 3617 } 3618 3619 ctx->nr_pinned_pages = rc; 3620 ctx->bv = (void *)ctx->iter.bvec; 3621 ctx->bv_need_unpin = iov_iter_extract_will_pin(from); 3622 } else if ((iov_iter_is_bvec(from) || iov_iter_is_kvec(from)) && 3623 !is_sync_kiocb(iocb)) { 3624 /* 3625 * If the op is asynchronous, we need to copy the list attached 3626 * to a BVEC/KVEC-type iterator, but we assume that the storage 3627 * will be pinned by the caller; in any case, we may or may not 3628 * be able to pin the pages, so we don't try. 3629 */ 3630 ctx->bv = (void *)dup_iter(&ctx->iter, from, GFP_KERNEL); 3631 if (!ctx->bv) { 3632 kref_put(&ctx->refcount, cifs_aio_ctx_release); 3633 return -ENOMEM; 3634 } 3635 } else { 3636 /* 3637 * Otherwise, we just pass the iterator down as-is and rely on 3638 * the caller to make sure the pages referred to by the 3639 * iterator don't evaporate. 3640 */ 3641 ctx->iter = *from; 3642 } 3643 3644 ctx->len = iov_iter_count(&ctx->iter); 3645 3646 /* grab a lock here due to read response handlers can access ctx */ 3647 mutex_lock(&ctx->aio_mutex); 3648 3649 rc = cifs_write_from_iter(iocb->ki_pos, ctx->len, &ctx->iter, 3650 cfile, cifs_sb, &ctx->list, ctx); 3651 3652 /* 3653 * If at least one write was successfully sent, then discard any rc 3654 * value from the later writes. If the other write succeeds, then 3655 * we'll end up returning whatever was written. If it fails, then 3656 * we'll get a new rc value from that. 3657 */ 3658 if (!list_empty(&ctx->list)) 3659 rc = 0; 3660 3661 mutex_unlock(&ctx->aio_mutex); 3662 3663 if (rc) { 3664 kref_put(&ctx->refcount, cifs_aio_ctx_release); 3665 return rc; 3666 } 3667 3668 if (!is_sync_kiocb(iocb)) { 3669 kref_put(&ctx->refcount, cifs_aio_ctx_release); 3670 return -EIOCBQUEUED; 3671 } 3672 3673 rc = wait_for_completion_killable(&ctx->done); 3674 if (rc) { 3675 mutex_lock(&ctx->aio_mutex); 3676 ctx->rc = rc = -EINTR; 3677 total_written = ctx->total_len; 3678 mutex_unlock(&ctx->aio_mutex); 3679 } else { 3680 rc = ctx->rc; 3681 total_written = ctx->total_len; 3682 } 3683 3684 kref_put(&ctx->refcount, cifs_aio_ctx_release); 3685 3686 if (unlikely(!total_written)) 3687 return rc; 3688 3689 iocb->ki_pos += total_written; 3690 return total_written; 3691 } 3692 3693 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from) 3694 { 3695 struct file *file = iocb->ki_filp; 3696 3697 cifs_revalidate_mapping(file->f_inode); 3698 return __cifs_writev(iocb, from, true); 3699 } 3700 3701 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from) 3702 { 3703 return __cifs_writev(iocb, from, false); 3704 } 3705 3706 static ssize_t 3707 cifs_writev(struct kiocb *iocb, struct iov_iter *from) 3708 { 3709 struct file *file = iocb->ki_filp; 3710 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data; 3711 struct inode *inode = file->f_mapping->host; 3712 struct cifsInodeInfo *cinode = CIFS_I(inode); 3713 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server; 3714 ssize_t rc; 3715 3716 inode_lock(inode); 3717 /* 3718 * We need to hold the sem to be sure nobody modifies lock list 3719 * with a brlock that prevents writing. 3720 */ 3721 down_read(&cinode->lock_sem); 3722 3723 rc = generic_write_checks(iocb, from); 3724 if (rc <= 0) 3725 goto out; 3726 3727 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from), 3728 server->vals->exclusive_lock_type, 0, 3729 NULL, CIFS_WRITE_OP)) 3730 rc = __generic_file_write_iter(iocb, from); 3731 else 3732 rc = -EACCES; 3733 out: 3734 up_read(&cinode->lock_sem); 3735 inode_unlock(inode); 3736 3737 if (rc > 0) 3738 rc = generic_write_sync(iocb, rc); 3739 return rc; 3740 } 3741 3742 ssize_t 3743 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from) 3744 { 3745 struct inode *inode = file_inode(iocb->ki_filp); 3746 struct cifsInodeInfo *cinode = CIFS_I(inode); 3747 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 3748 struct cifsFileInfo *cfile = (struct cifsFileInfo *) 3749 iocb->ki_filp->private_data; 3750 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 3751 ssize_t written; 3752 3753 written = cifs_get_writer(cinode); 3754 if (written) 3755 return written; 3756 3757 if (CIFS_CACHE_WRITE(cinode)) { 3758 if (cap_unix(tcon->ses) && 3759 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) 3760 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) { 3761 written = generic_file_write_iter(iocb, from); 3762 goto out; 3763 } 3764 written = cifs_writev(iocb, from); 3765 goto out; 3766 } 3767 /* 3768 * For non-oplocked files in strict cache mode we need to write the data 3769 * to the server exactly from the pos to pos+len-1 rather than flush all 3770 * affected pages because it may cause a error with mandatory locks on 3771 * these pages but not on the region from pos to ppos+len-1. 3772 */ 3773 written = cifs_user_writev(iocb, from); 3774 if (CIFS_CACHE_READ(cinode)) { 3775 /* 3776 * We have read level caching and we have just sent a write 3777 * request to the server thus making data in the cache stale. 3778 * Zap the cache and set oplock/lease level to NONE to avoid 3779 * reading stale data from the cache. All subsequent read 3780 * operations will read new data from the server. 3781 */ 3782 cifs_zap_mapping(inode); 3783 cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n", 3784 inode); 3785 cinode->oplock = 0; 3786 } 3787 out: 3788 cifs_put_writer(cinode); 3789 return written; 3790 } 3791 3792 static struct cifs_readdata *cifs_readdata_alloc(work_func_t complete) 3793 { 3794 struct cifs_readdata *rdata; 3795 3796 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); 3797 if (rdata) { 3798 kref_init(&rdata->refcount); 3799 INIT_LIST_HEAD(&rdata->list); 3800 init_completion(&rdata->done); 3801 INIT_WORK(&rdata->work, complete); 3802 } 3803 3804 return rdata; 3805 } 3806 3807 void 3808 cifs_readdata_release(struct kref *refcount) 3809 { 3810 struct cifs_readdata *rdata = container_of(refcount, 3811 struct cifs_readdata, refcount); 3812 3813 if (rdata->ctx) 3814 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release); 3815 #ifdef CONFIG_CIFS_SMB_DIRECT 3816 if (rdata->mr) { 3817 smbd_deregister_mr(rdata->mr); 3818 rdata->mr = NULL; 3819 } 3820 #endif 3821 if (rdata->cfile) 3822 cifsFileInfo_put(rdata->cfile); 3823 3824 kfree(rdata); 3825 } 3826 3827 static void collect_uncached_read_data(struct cifs_aio_ctx *ctx); 3828 3829 static void 3830 cifs_uncached_readv_complete(struct work_struct *work) 3831 { 3832 struct cifs_readdata *rdata = container_of(work, 3833 struct cifs_readdata, work); 3834 3835 complete(&rdata->done); 3836 collect_uncached_read_data(rdata->ctx); 3837 /* the below call can possibly free the last ref to aio ctx */ 3838 kref_put(&rdata->refcount, cifs_readdata_release); 3839 } 3840 3841 static int cifs_resend_rdata(struct cifs_readdata *rdata, 3842 struct list_head *rdata_list, 3843 struct cifs_aio_ctx *ctx) 3844 { 3845 unsigned int rsize; 3846 struct cifs_credits credits; 3847 int rc; 3848 struct TCP_Server_Info *server; 3849 3850 /* XXX: should we pick a new channel here? */ 3851 server = rdata->server; 3852 3853 do { 3854 if (rdata->cfile->invalidHandle) { 3855 rc = cifs_reopen_file(rdata->cfile, true); 3856 if (rc == -EAGAIN) 3857 continue; 3858 else if (rc) 3859 break; 3860 } 3861 3862 /* 3863 * Wait for credits to resend this rdata. 3864 * Note: we are attempting to resend the whole rdata not in 3865 * segments 3866 */ 3867 do { 3868 rc = server->ops->wait_mtu_credits(server, rdata->bytes, 3869 &rsize, &credits); 3870 3871 if (rc) 3872 goto fail; 3873 3874 if (rsize < rdata->bytes) { 3875 add_credits_and_wake_if(server, &credits, 0); 3876 msleep(1000); 3877 } 3878 } while (rsize < rdata->bytes); 3879 rdata->credits = credits; 3880 3881 rc = adjust_credits(server, &rdata->credits, rdata->bytes); 3882 if (!rc) { 3883 if (rdata->cfile->invalidHandle) 3884 rc = -EAGAIN; 3885 else { 3886 #ifdef CONFIG_CIFS_SMB_DIRECT 3887 if (rdata->mr) { 3888 rdata->mr->need_invalidate = true; 3889 smbd_deregister_mr(rdata->mr); 3890 rdata->mr = NULL; 3891 } 3892 #endif 3893 rc = server->ops->async_readv(rdata); 3894 } 3895 } 3896 3897 /* If the read was successfully sent, we are done */ 3898 if (!rc) { 3899 /* Add to aio pending list */ 3900 list_add_tail(&rdata->list, rdata_list); 3901 return 0; 3902 } 3903 3904 /* Roll back credits and retry if needed */ 3905 add_credits_and_wake_if(server, &rdata->credits, 0); 3906 } while (rc == -EAGAIN); 3907 3908 fail: 3909 kref_put(&rdata->refcount, cifs_readdata_release); 3910 return rc; 3911 } 3912 3913 static int 3914 cifs_send_async_read(loff_t fpos, size_t len, struct cifsFileInfo *open_file, 3915 struct cifs_sb_info *cifs_sb, struct list_head *rdata_list, 3916 struct cifs_aio_ctx *ctx) 3917 { 3918 struct cifs_readdata *rdata; 3919 unsigned int rsize, nsegs, max_segs = INT_MAX; 3920 struct cifs_credits credits_on_stack; 3921 struct cifs_credits *credits = &credits_on_stack; 3922 size_t cur_len, max_len; 3923 int rc; 3924 pid_t pid; 3925 struct TCP_Server_Info *server; 3926 3927 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses); 3928 3929 #ifdef CONFIG_CIFS_SMB_DIRECT 3930 if (server->smbd_conn) 3931 max_segs = server->smbd_conn->max_frmr_depth; 3932 #endif 3933 3934 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) 3935 pid = open_file->pid; 3936 else 3937 pid = current->tgid; 3938 3939 do { 3940 if (open_file->invalidHandle) { 3941 rc = cifs_reopen_file(open_file, true); 3942 if (rc == -EAGAIN) 3943 continue; 3944 else if (rc) 3945 break; 3946 } 3947 3948 if (cifs_sb->ctx->rsize == 0) 3949 cifs_sb->ctx->rsize = 3950 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink), 3951 cifs_sb->ctx); 3952 3953 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize, 3954 &rsize, credits); 3955 if (rc) 3956 break; 3957 3958 max_len = min_t(size_t, len, rsize); 3959 3960 cur_len = cifs_limit_bvec_subset(&ctx->iter, max_len, 3961 max_segs, &nsegs); 3962 cifs_dbg(FYI, "read-to-iter len=%zx/%zx nsegs=%u/%lu/%u\n", 3963 cur_len, max_len, nsegs, ctx->iter.nr_segs, max_segs); 3964 if (cur_len == 0) { 3965 rc = -EIO; 3966 add_credits_and_wake_if(server, credits, 0); 3967 break; 3968 } 3969 3970 rdata = cifs_readdata_alloc(cifs_uncached_readv_complete); 3971 if (!rdata) { 3972 add_credits_and_wake_if(server, credits, 0); 3973 rc = -ENOMEM; 3974 break; 3975 } 3976 3977 rdata->server = server; 3978 rdata->cfile = cifsFileInfo_get(open_file); 3979 rdata->offset = fpos; 3980 rdata->bytes = cur_len; 3981 rdata->pid = pid; 3982 rdata->credits = credits_on_stack; 3983 rdata->ctx = ctx; 3984 kref_get(&ctx->refcount); 3985 3986 rdata->iter = ctx->iter; 3987 iov_iter_truncate(&rdata->iter, cur_len); 3988 3989 rc = adjust_credits(server, &rdata->credits, rdata->bytes); 3990 3991 if (!rc) { 3992 if (rdata->cfile->invalidHandle) 3993 rc = -EAGAIN; 3994 else 3995 rc = server->ops->async_readv(rdata); 3996 } 3997 3998 if (rc) { 3999 add_credits_and_wake_if(server, &rdata->credits, 0); 4000 kref_put(&rdata->refcount, cifs_readdata_release); 4001 if (rc == -EAGAIN) 4002 continue; 4003 break; 4004 } 4005 4006 list_add_tail(&rdata->list, rdata_list); 4007 iov_iter_advance(&ctx->iter, cur_len); 4008 fpos += cur_len; 4009 len -= cur_len; 4010 } while (len > 0); 4011 4012 return rc; 4013 } 4014 4015 static void 4016 collect_uncached_read_data(struct cifs_aio_ctx *ctx) 4017 { 4018 struct cifs_readdata *rdata, *tmp; 4019 struct cifs_sb_info *cifs_sb; 4020 int rc; 4021 4022 cifs_sb = CIFS_SB(ctx->cfile->dentry->d_sb); 4023 4024 mutex_lock(&ctx->aio_mutex); 4025 4026 if (list_empty(&ctx->list)) { 4027 mutex_unlock(&ctx->aio_mutex); 4028 return; 4029 } 4030 4031 rc = ctx->rc; 4032 /* the loop below should proceed in the order of increasing offsets */ 4033 again: 4034 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) { 4035 if (!rc) { 4036 if (!try_wait_for_completion(&rdata->done)) { 4037 mutex_unlock(&ctx->aio_mutex); 4038 return; 4039 } 4040 4041 if (rdata->result == -EAGAIN) { 4042 /* resend call if it's a retryable error */ 4043 struct list_head tmp_list; 4044 unsigned int got_bytes = rdata->got_bytes; 4045 4046 list_del_init(&rdata->list); 4047 INIT_LIST_HEAD(&tmp_list); 4048 4049 if (ctx->direct_io) { 4050 /* 4051 * Re-use rdata as this is a 4052 * direct I/O 4053 */ 4054 rc = cifs_resend_rdata( 4055 rdata, 4056 &tmp_list, ctx); 4057 } else { 4058 rc = cifs_send_async_read( 4059 rdata->offset + got_bytes, 4060 rdata->bytes - got_bytes, 4061 rdata->cfile, cifs_sb, 4062 &tmp_list, ctx); 4063 4064 kref_put(&rdata->refcount, 4065 cifs_readdata_release); 4066 } 4067 4068 list_splice(&tmp_list, &ctx->list); 4069 4070 goto again; 4071 } else if (rdata->result) 4072 rc = rdata->result; 4073 4074 /* if there was a short read -- discard anything left */ 4075 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes) 4076 rc = -ENODATA; 4077 4078 ctx->total_len += rdata->got_bytes; 4079 } 4080 list_del_init(&rdata->list); 4081 kref_put(&rdata->refcount, cifs_readdata_release); 4082 } 4083 4084 /* mask nodata case */ 4085 if (rc == -ENODATA) 4086 rc = 0; 4087 4088 ctx->rc = (rc == 0) ? (ssize_t)ctx->total_len : rc; 4089 4090 mutex_unlock(&ctx->aio_mutex); 4091 4092 if (ctx->iocb && ctx->iocb->ki_complete) 4093 ctx->iocb->ki_complete(ctx->iocb, ctx->rc); 4094 else 4095 complete(&ctx->done); 4096 } 4097 4098 static ssize_t __cifs_readv( 4099 struct kiocb *iocb, struct iov_iter *to, bool direct) 4100 { 4101 size_t len; 4102 struct file *file = iocb->ki_filp; 4103 struct cifs_sb_info *cifs_sb; 4104 struct cifsFileInfo *cfile; 4105 struct cifs_tcon *tcon; 4106 ssize_t rc, total_read = 0; 4107 loff_t offset = iocb->ki_pos; 4108 struct cifs_aio_ctx *ctx; 4109 4110 len = iov_iter_count(to); 4111 if (!len) 4112 return 0; 4113 4114 cifs_sb = CIFS_FILE_SB(file); 4115 cfile = file->private_data; 4116 tcon = tlink_tcon(cfile->tlink); 4117 4118 if (!tcon->ses->server->ops->async_readv) 4119 return -ENOSYS; 4120 4121 if ((file->f_flags & O_ACCMODE) == O_WRONLY) 4122 cifs_dbg(FYI, "attempting read on write only file instance\n"); 4123 4124 ctx = cifs_aio_ctx_alloc(); 4125 if (!ctx) 4126 return -ENOMEM; 4127 4128 ctx->pos = offset; 4129 ctx->direct_io = direct; 4130 ctx->len = len; 4131 ctx->cfile = cifsFileInfo_get(cfile); 4132 ctx->nr_pinned_pages = 0; 4133 4134 if (!is_sync_kiocb(iocb)) 4135 ctx->iocb = iocb; 4136 4137 if (user_backed_iter(to)) { 4138 /* 4139 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as 4140 * they contain references to the calling process's virtual 4141 * memory layout which won't be available in an async worker 4142 * thread. This also takes a pin on every folio involved. 4143 */ 4144 rc = netfs_extract_user_iter(to, iov_iter_count(to), 4145 &ctx->iter, 0); 4146 if (rc < 0) { 4147 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4148 return rc; 4149 } 4150 4151 ctx->nr_pinned_pages = rc; 4152 ctx->bv = (void *)ctx->iter.bvec; 4153 ctx->bv_need_unpin = iov_iter_extract_will_pin(to); 4154 ctx->should_dirty = true; 4155 } else if ((iov_iter_is_bvec(to) || iov_iter_is_kvec(to)) && 4156 !is_sync_kiocb(iocb)) { 4157 /* 4158 * If the op is asynchronous, we need to copy the list attached 4159 * to a BVEC/KVEC-type iterator, but we assume that the storage 4160 * will be retained by the caller; in any case, we may or may 4161 * not be able to pin the pages, so we don't try. 4162 */ 4163 ctx->bv = (void *)dup_iter(&ctx->iter, to, GFP_KERNEL); 4164 if (!ctx->bv) { 4165 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4166 return -ENOMEM; 4167 } 4168 } else { 4169 /* 4170 * Otherwise, we just pass the iterator down as-is and rely on 4171 * the caller to make sure the pages referred to by the 4172 * iterator don't evaporate. 4173 */ 4174 ctx->iter = *to; 4175 } 4176 4177 if (direct) { 4178 rc = filemap_write_and_wait_range(file->f_inode->i_mapping, 4179 offset, offset + len - 1); 4180 if (rc) { 4181 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4182 return -EAGAIN; 4183 } 4184 } 4185 4186 /* grab a lock here due to read response handlers can access ctx */ 4187 mutex_lock(&ctx->aio_mutex); 4188 4189 rc = cifs_send_async_read(offset, len, cfile, cifs_sb, &ctx->list, ctx); 4190 4191 /* if at least one read request send succeeded, then reset rc */ 4192 if (!list_empty(&ctx->list)) 4193 rc = 0; 4194 4195 mutex_unlock(&ctx->aio_mutex); 4196 4197 if (rc) { 4198 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4199 return rc; 4200 } 4201 4202 if (!is_sync_kiocb(iocb)) { 4203 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4204 return -EIOCBQUEUED; 4205 } 4206 4207 rc = wait_for_completion_killable(&ctx->done); 4208 if (rc) { 4209 mutex_lock(&ctx->aio_mutex); 4210 ctx->rc = rc = -EINTR; 4211 total_read = ctx->total_len; 4212 mutex_unlock(&ctx->aio_mutex); 4213 } else { 4214 rc = ctx->rc; 4215 total_read = ctx->total_len; 4216 } 4217 4218 kref_put(&ctx->refcount, cifs_aio_ctx_release); 4219 4220 if (total_read) { 4221 iocb->ki_pos += total_read; 4222 return total_read; 4223 } 4224 return rc; 4225 } 4226 4227 ssize_t cifs_direct_readv(struct kiocb *iocb, struct iov_iter *to) 4228 { 4229 return __cifs_readv(iocb, to, true); 4230 } 4231 4232 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to) 4233 { 4234 return __cifs_readv(iocb, to, false); 4235 } 4236 4237 ssize_t 4238 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to) 4239 { 4240 struct inode *inode = file_inode(iocb->ki_filp); 4241 struct cifsInodeInfo *cinode = CIFS_I(inode); 4242 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 4243 struct cifsFileInfo *cfile = (struct cifsFileInfo *) 4244 iocb->ki_filp->private_data; 4245 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); 4246 int rc = -EACCES; 4247 4248 /* 4249 * In strict cache mode we need to read from the server all the time 4250 * if we don't have level II oplock because the server can delay mtime 4251 * change - so we can't make a decision about inode invalidating. 4252 * And we can also fail with pagereading if there are mandatory locks 4253 * on pages affected by this read but not on the region from pos to 4254 * pos+len-1. 4255 */ 4256 if (!CIFS_CACHE_READ(cinode)) 4257 return cifs_user_readv(iocb, to); 4258 4259 if (cap_unix(tcon->ses) && 4260 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 4261 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 4262 return generic_file_read_iter(iocb, to); 4263 4264 /* 4265 * We need to hold the sem to be sure nobody modifies lock list 4266 * with a brlock that prevents reading. 4267 */ 4268 down_read(&cinode->lock_sem); 4269 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to), 4270 tcon->ses->server->vals->shared_lock_type, 4271 0, NULL, CIFS_READ_OP)) 4272 rc = generic_file_read_iter(iocb, to); 4273 up_read(&cinode->lock_sem); 4274 return rc; 4275 } 4276 4277 static ssize_t 4278 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset) 4279 { 4280 int rc = -EACCES; 4281 unsigned int bytes_read = 0; 4282 unsigned int total_read; 4283 unsigned int current_read_size; 4284 unsigned int rsize; 4285 struct cifs_sb_info *cifs_sb; 4286 struct cifs_tcon *tcon; 4287 struct TCP_Server_Info *server; 4288 unsigned int xid; 4289 char *cur_offset; 4290 struct cifsFileInfo *open_file; 4291 struct cifs_io_parms io_parms = {0}; 4292 int buf_type = CIFS_NO_BUFFER; 4293 __u32 pid; 4294 4295 xid = get_xid(); 4296 cifs_sb = CIFS_FILE_SB(file); 4297 4298 /* FIXME: set up handlers for larger reads and/or convert to async */ 4299 rsize = min_t(unsigned int, cifs_sb->ctx->rsize, CIFSMaxBufSize); 4300 4301 if (file->private_data == NULL) { 4302 rc = -EBADF; 4303 free_xid(xid); 4304 return rc; 4305 } 4306 open_file = file->private_data; 4307 tcon = tlink_tcon(open_file->tlink); 4308 server = cifs_pick_channel(tcon->ses); 4309 4310 if (!server->ops->sync_read) { 4311 free_xid(xid); 4312 return -ENOSYS; 4313 } 4314 4315 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) 4316 pid = open_file->pid; 4317 else 4318 pid = current->tgid; 4319 4320 if ((file->f_flags & O_ACCMODE) == O_WRONLY) 4321 cifs_dbg(FYI, "attempting read on write only file instance\n"); 4322 4323 for (total_read = 0, cur_offset = read_data; read_size > total_read; 4324 total_read += bytes_read, cur_offset += bytes_read) { 4325 do { 4326 current_read_size = min_t(uint, read_size - total_read, 4327 rsize); 4328 /* 4329 * For windows me and 9x we do not want to request more 4330 * than it negotiated since it will refuse the read 4331 * then. 4332 */ 4333 if (!(tcon->ses->capabilities & 4334 tcon->ses->server->vals->cap_large_files)) { 4335 current_read_size = min_t(uint, 4336 current_read_size, CIFSMaxBufSize); 4337 } 4338 if (open_file->invalidHandle) { 4339 rc = cifs_reopen_file(open_file, true); 4340 if (rc != 0) 4341 break; 4342 } 4343 io_parms.pid = pid; 4344 io_parms.tcon = tcon; 4345 io_parms.offset = *offset; 4346 io_parms.length = current_read_size; 4347 io_parms.server = server; 4348 rc = server->ops->sync_read(xid, &open_file->fid, &io_parms, 4349 &bytes_read, &cur_offset, 4350 &buf_type); 4351 } while (rc == -EAGAIN); 4352 4353 if (rc || (bytes_read == 0)) { 4354 if (total_read) { 4355 break; 4356 } else { 4357 free_xid(xid); 4358 return rc; 4359 } 4360 } else { 4361 cifs_stats_bytes_read(tcon, total_read); 4362 *offset += bytes_read; 4363 } 4364 } 4365 free_xid(xid); 4366 return total_read; 4367 } 4368 4369 /* 4370 * If the page is mmap'ed into a process' page tables, then we need to make 4371 * sure that it doesn't change while being written back. 4372 */ 4373 static vm_fault_t cifs_page_mkwrite(struct vm_fault *vmf) 4374 { 4375 struct folio *folio = page_folio(vmf->page); 4376 4377 /* Wait for the folio to be written to the cache before we allow it to 4378 * be modified. We then assume the entire folio will need writing back. 4379 */ 4380 #ifdef CONFIG_CIFS_FSCACHE 4381 if (folio_test_fscache(folio) && 4382 folio_wait_fscache_killable(folio) < 0) 4383 return VM_FAULT_RETRY; 4384 #endif 4385 4386 folio_wait_writeback(folio); 4387 4388 if (folio_lock_killable(folio) < 0) 4389 return VM_FAULT_RETRY; 4390 return VM_FAULT_LOCKED; 4391 } 4392 4393 static const struct vm_operations_struct cifs_file_vm_ops = { 4394 .fault = filemap_fault, 4395 .map_pages = filemap_map_pages, 4396 .page_mkwrite = cifs_page_mkwrite, 4397 }; 4398 4399 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma) 4400 { 4401 int xid, rc = 0; 4402 struct inode *inode = file_inode(file); 4403 4404 xid = get_xid(); 4405 4406 if (!CIFS_CACHE_READ(CIFS_I(inode))) 4407 rc = cifs_zap_mapping(inode); 4408 if (!rc) 4409 rc = generic_file_mmap(file, vma); 4410 if (!rc) 4411 vma->vm_ops = &cifs_file_vm_ops; 4412 4413 free_xid(xid); 4414 return rc; 4415 } 4416 4417 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma) 4418 { 4419 int rc, xid; 4420 4421 xid = get_xid(); 4422 4423 rc = cifs_revalidate_file(file); 4424 if (rc) 4425 cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n", 4426 rc); 4427 if (!rc) 4428 rc = generic_file_mmap(file, vma); 4429 if (!rc) 4430 vma->vm_ops = &cifs_file_vm_ops; 4431 4432 free_xid(xid); 4433 return rc; 4434 } 4435 4436 /* 4437 * Unlock a bunch of folios in the pagecache. 4438 */ 4439 static void cifs_unlock_folios(struct address_space *mapping, pgoff_t first, pgoff_t last) 4440 { 4441 struct folio *folio; 4442 XA_STATE(xas, &mapping->i_pages, first); 4443 4444 rcu_read_lock(); 4445 xas_for_each(&xas, folio, last) { 4446 folio_unlock(folio); 4447 } 4448 rcu_read_unlock(); 4449 } 4450 4451 static void cifs_readahead_complete(struct work_struct *work) 4452 { 4453 struct cifs_readdata *rdata = container_of(work, 4454 struct cifs_readdata, work); 4455 struct folio *folio; 4456 pgoff_t last; 4457 bool good = rdata->result == 0 || (rdata->result == -EAGAIN && rdata->got_bytes); 4458 4459 XA_STATE(xas, &rdata->mapping->i_pages, rdata->offset / PAGE_SIZE); 4460 4461 if (good) 4462 cifs_readahead_to_fscache(rdata->mapping->host, 4463 rdata->offset, rdata->bytes); 4464 4465 if (iov_iter_count(&rdata->iter) > 0) 4466 iov_iter_zero(iov_iter_count(&rdata->iter), &rdata->iter); 4467 4468 last = (rdata->offset + rdata->bytes - 1) / PAGE_SIZE; 4469 4470 rcu_read_lock(); 4471 xas_for_each(&xas, folio, last) { 4472 if (good) { 4473 flush_dcache_folio(folio); 4474 folio_mark_uptodate(folio); 4475 } 4476 folio_unlock(folio); 4477 } 4478 rcu_read_unlock(); 4479 4480 kref_put(&rdata->refcount, cifs_readdata_release); 4481 } 4482 4483 static void cifs_readahead(struct readahead_control *ractl) 4484 { 4485 struct cifsFileInfo *open_file = ractl->file->private_data; 4486 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(ractl->file); 4487 struct TCP_Server_Info *server; 4488 unsigned int xid, nr_pages, cache_nr_pages = 0; 4489 unsigned int ra_pages; 4490 pgoff_t next_cached = ULONG_MAX, ra_index; 4491 bool caching = fscache_cookie_enabled(cifs_inode_cookie(ractl->mapping->host)) && 4492 cifs_inode_cookie(ractl->mapping->host)->cache_priv; 4493 bool check_cache = caching; 4494 pid_t pid; 4495 int rc = 0; 4496 4497 /* Note that readahead_count() lags behind our dequeuing of pages from 4498 * the ractl, wo we have to keep track for ourselves. 4499 */ 4500 ra_pages = readahead_count(ractl); 4501 ra_index = readahead_index(ractl); 4502 4503 xid = get_xid(); 4504 4505 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) 4506 pid = open_file->pid; 4507 else 4508 pid = current->tgid; 4509 4510 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses); 4511 4512 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n", 4513 __func__, ractl->file, ractl->mapping, ra_pages); 4514 4515 /* 4516 * Chop the readahead request up into rsize-sized read requests. 4517 */ 4518 while ((nr_pages = ra_pages)) { 4519 unsigned int i, rsize; 4520 struct cifs_readdata *rdata; 4521 struct cifs_credits credits_on_stack; 4522 struct cifs_credits *credits = &credits_on_stack; 4523 struct folio *folio; 4524 pgoff_t fsize; 4525 4526 /* 4527 * Find out if we have anything cached in the range of 4528 * interest, and if so, where the next chunk of cached data is. 4529 */ 4530 if (caching) { 4531 if (check_cache) { 4532 rc = cifs_fscache_query_occupancy( 4533 ractl->mapping->host, ra_index, nr_pages, 4534 &next_cached, &cache_nr_pages); 4535 if (rc < 0) 4536 caching = false; 4537 check_cache = false; 4538 } 4539 4540 if (ra_index == next_cached) { 4541 /* 4542 * TODO: Send a whole batch of pages to be read 4543 * by the cache. 4544 */ 4545 folio = readahead_folio(ractl); 4546 fsize = folio_nr_pages(folio); 4547 ra_pages -= fsize; 4548 ra_index += fsize; 4549 if (cifs_readpage_from_fscache(ractl->mapping->host, 4550 &folio->page) < 0) { 4551 /* 4552 * TODO: Deal with cache read failure 4553 * here, but for the moment, delegate 4554 * that to readpage. 4555 */ 4556 caching = false; 4557 } 4558 folio_unlock(folio); 4559 next_cached += fsize; 4560 cache_nr_pages -= fsize; 4561 if (cache_nr_pages == 0) 4562 check_cache = true; 4563 continue; 4564 } 4565 } 4566 4567 if (open_file->invalidHandle) { 4568 rc = cifs_reopen_file(open_file, true); 4569 if (rc) { 4570 if (rc == -EAGAIN) 4571 continue; 4572 break; 4573 } 4574 } 4575 4576 if (cifs_sb->ctx->rsize == 0) 4577 cifs_sb->ctx->rsize = 4578 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink), 4579 cifs_sb->ctx); 4580 4581 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize, 4582 &rsize, credits); 4583 if (rc) 4584 break; 4585 nr_pages = min_t(size_t, rsize / PAGE_SIZE, ra_pages); 4586 if (next_cached != ULONG_MAX) 4587 nr_pages = min_t(size_t, nr_pages, next_cached - ra_index); 4588 4589 /* 4590 * Give up immediately if rsize is too small to read an entire 4591 * page. The VFS will fall back to readpage. We should never 4592 * reach this point however since we set ra_pages to 0 when the 4593 * rsize is smaller than a cache page. 4594 */ 4595 if (unlikely(!nr_pages)) { 4596 add_credits_and_wake_if(server, credits, 0); 4597 break; 4598 } 4599 4600 rdata = cifs_readdata_alloc(cifs_readahead_complete); 4601 if (!rdata) { 4602 /* best to give up if we're out of mem */ 4603 add_credits_and_wake_if(server, credits, 0); 4604 break; 4605 } 4606 4607 rdata->offset = ra_index * PAGE_SIZE; 4608 rdata->bytes = nr_pages * PAGE_SIZE; 4609 rdata->cfile = cifsFileInfo_get(open_file); 4610 rdata->server = server; 4611 rdata->mapping = ractl->mapping; 4612 rdata->pid = pid; 4613 rdata->credits = credits_on_stack; 4614 4615 for (i = 0; i < nr_pages; i++) { 4616 if (!readahead_folio(ractl)) 4617 WARN_ON(1); 4618 } 4619 ra_pages -= nr_pages; 4620 ra_index += nr_pages; 4621 4622 iov_iter_xarray(&rdata->iter, ITER_DEST, &rdata->mapping->i_pages, 4623 rdata->offset, rdata->bytes); 4624 4625 rc = adjust_credits(server, &rdata->credits, rdata->bytes); 4626 if (!rc) { 4627 if (rdata->cfile->invalidHandle) 4628 rc = -EAGAIN; 4629 else 4630 rc = server->ops->async_readv(rdata); 4631 } 4632 4633 if (rc) { 4634 add_credits_and_wake_if(server, &rdata->credits, 0); 4635 cifs_unlock_folios(rdata->mapping, 4636 rdata->offset / PAGE_SIZE, 4637 (rdata->offset + rdata->bytes - 1) / PAGE_SIZE); 4638 /* Fallback to the readpage in error/reconnect cases */ 4639 kref_put(&rdata->refcount, cifs_readdata_release); 4640 break; 4641 } 4642 4643 kref_put(&rdata->refcount, cifs_readdata_release); 4644 } 4645 4646 free_xid(xid); 4647 } 4648 4649 /* 4650 * cifs_readpage_worker must be called with the page pinned 4651 */ 4652 static int cifs_readpage_worker(struct file *file, struct page *page, 4653 loff_t *poffset) 4654 { 4655 struct inode *inode = file_inode(file); 4656 struct timespec64 atime, mtime; 4657 char *read_data; 4658 int rc; 4659 4660 /* Is the page cached? */ 4661 rc = cifs_readpage_from_fscache(inode, page); 4662 if (rc == 0) 4663 goto read_complete; 4664 4665 read_data = kmap(page); 4666 /* for reads over a certain size could initiate async read ahead */ 4667 4668 rc = cifs_read(file, read_data, PAGE_SIZE, poffset); 4669 4670 if (rc < 0) 4671 goto io_error; 4672 else 4673 cifs_dbg(FYI, "Bytes read %d\n", rc); 4674 4675 /* we do not want atime to be less than mtime, it broke some apps */ 4676 atime = inode_set_atime_to_ts(inode, current_time(inode)); 4677 mtime = inode_get_mtime(inode); 4678 if (timespec64_compare(&atime, &mtime) < 0) 4679 inode_set_atime_to_ts(inode, inode_get_mtime(inode)); 4680 4681 if (PAGE_SIZE > rc) 4682 memset(read_data + rc, 0, PAGE_SIZE - rc); 4683 4684 flush_dcache_page(page); 4685 SetPageUptodate(page); 4686 rc = 0; 4687 4688 io_error: 4689 kunmap(page); 4690 4691 read_complete: 4692 unlock_page(page); 4693 return rc; 4694 } 4695 4696 static int cifs_read_folio(struct file *file, struct folio *folio) 4697 { 4698 struct page *page = &folio->page; 4699 loff_t offset = page_file_offset(page); 4700 int rc = -EACCES; 4701 unsigned int xid; 4702 4703 xid = get_xid(); 4704 4705 if (file->private_data == NULL) { 4706 rc = -EBADF; 4707 free_xid(xid); 4708 return rc; 4709 } 4710 4711 cifs_dbg(FYI, "read_folio %p at offset %d 0x%x\n", 4712 page, (int)offset, (int)offset); 4713 4714 rc = cifs_readpage_worker(file, page, &offset); 4715 4716 free_xid(xid); 4717 return rc; 4718 } 4719 4720 static int is_inode_writable(struct cifsInodeInfo *cifs_inode) 4721 { 4722 struct cifsFileInfo *open_file; 4723 4724 spin_lock(&cifs_inode->open_file_lock); 4725 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) { 4726 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) { 4727 spin_unlock(&cifs_inode->open_file_lock); 4728 return 1; 4729 } 4730 } 4731 spin_unlock(&cifs_inode->open_file_lock); 4732 return 0; 4733 } 4734 4735 /* We do not want to update the file size from server for inodes 4736 open for write - to avoid races with writepage extending 4737 the file - in the future we could consider allowing 4738 refreshing the inode only on increases in the file size 4739 but this is tricky to do without racing with writebehind 4740 page caching in the current Linux kernel design */ 4741 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file) 4742 { 4743 if (!cifsInode) 4744 return true; 4745 4746 if (is_inode_writable(cifsInode)) { 4747 /* This inode is open for write at least once */ 4748 struct cifs_sb_info *cifs_sb; 4749 4750 cifs_sb = CIFS_SB(cifsInode->netfs.inode.i_sb); 4751 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) { 4752 /* since no page cache to corrupt on directio 4753 we can change size safely */ 4754 return true; 4755 } 4756 4757 if (i_size_read(&cifsInode->netfs.inode) < end_of_file) 4758 return true; 4759 4760 return false; 4761 } else 4762 return true; 4763 } 4764 4765 static int cifs_write_begin(struct file *file, struct address_space *mapping, 4766 loff_t pos, unsigned len, 4767 struct page **pagep, void **fsdata) 4768 { 4769 int oncethru = 0; 4770 pgoff_t index = pos >> PAGE_SHIFT; 4771 loff_t offset = pos & (PAGE_SIZE - 1); 4772 loff_t page_start = pos & PAGE_MASK; 4773 loff_t i_size; 4774 struct page *page; 4775 int rc = 0; 4776 4777 cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len); 4778 4779 start: 4780 page = grab_cache_page_write_begin(mapping, index); 4781 if (!page) { 4782 rc = -ENOMEM; 4783 goto out; 4784 } 4785 4786 if (PageUptodate(page)) 4787 goto out; 4788 4789 /* 4790 * If we write a full page it will be up to date, no need to read from 4791 * the server. If the write is short, we'll end up doing a sync write 4792 * instead. 4793 */ 4794 if (len == PAGE_SIZE) 4795 goto out; 4796 4797 /* 4798 * optimize away the read when we have an oplock, and we're not 4799 * expecting to use any of the data we'd be reading in. That 4800 * is, when the page lies beyond the EOF, or straddles the EOF 4801 * and the write will cover all of the existing data. 4802 */ 4803 if (CIFS_CACHE_READ(CIFS_I(mapping->host))) { 4804 i_size = i_size_read(mapping->host); 4805 if (page_start >= i_size || 4806 (offset == 0 && (pos + len) >= i_size)) { 4807 zero_user_segments(page, 0, offset, 4808 offset + len, 4809 PAGE_SIZE); 4810 /* 4811 * PageChecked means that the parts of the page 4812 * to which we're not writing are considered up 4813 * to date. Once the data is copied to the 4814 * page, it can be set uptodate. 4815 */ 4816 SetPageChecked(page); 4817 goto out; 4818 } 4819 } 4820 4821 if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) { 4822 /* 4823 * might as well read a page, it is fast enough. If we get 4824 * an error, we don't need to return it. cifs_write_end will 4825 * do a sync write instead since PG_uptodate isn't set. 4826 */ 4827 cifs_readpage_worker(file, page, &page_start); 4828 put_page(page); 4829 oncethru = 1; 4830 goto start; 4831 } else { 4832 /* we could try using another file handle if there is one - 4833 but how would we lock it to prevent close of that handle 4834 racing with this read? In any case 4835 this will be written out by write_end so is fine */ 4836 } 4837 out: 4838 *pagep = page; 4839 return rc; 4840 } 4841 4842 static bool cifs_release_folio(struct folio *folio, gfp_t gfp) 4843 { 4844 if (folio_test_private(folio)) 4845 return 0; 4846 if (folio_test_fscache(folio)) { 4847 if (current_is_kswapd() || !(gfp & __GFP_FS)) 4848 return false; 4849 folio_wait_fscache(folio); 4850 } 4851 fscache_note_page_release(cifs_inode_cookie(folio->mapping->host)); 4852 return true; 4853 } 4854 4855 static void cifs_invalidate_folio(struct folio *folio, size_t offset, 4856 size_t length) 4857 { 4858 folio_wait_fscache(folio); 4859 } 4860 4861 static int cifs_launder_folio(struct folio *folio) 4862 { 4863 int rc = 0; 4864 loff_t range_start = folio_pos(folio); 4865 loff_t range_end = range_start + folio_size(folio); 4866 struct writeback_control wbc = { 4867 .sync_mode = WB_SYNC_ALL, 4868 .nr_to_write = 0, 4869 .range_start = range_start, 4870 .range_end = range_end, 4871 }; 4872 4873 cifs_dbg(FYI, "Launder page: %lu\n", folio->index); 4874 4875 if (folio_clear_dirty_for_io(folio)) 4876 rc = cifs_writepage_locked(&folio->page, &wbc); 4877 4878 folio_wait_fscache(folio); 4879 return rc; 4880 } 4881 4882 void cifs_oplock_break(struct work_struct *work) 4883 { 4884 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo, 4885 oplock_break); 4886 struct inode *inode = d_inode(cfile->dentry); 4887 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); 4888 struct cifsInodeInfo *cinode = CIFS_I(inode); 4889 struct cifs_tcon *tcon; 4890 struct TCP_Server_Info *server; 4891 struct tcon_link *tlink; 4892 int rc = 0; 4893 bool purge_cache = false, oplock_break_cancelled; 4894 __u64 persistent_fid, volatile_fid; 4895 __u16 net_fid; 4896 4897 wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS, 4898 TASK_UNINTERRUPTIBLE); 4899 4900 tlink = cifs_sb_tlink(cifs_sb); 4901 if (IS_ERR(tlink)) 4902 goto out; 4903 tcon = tlink_tcon(tlink); 4904 server = tcon->ses->server; 4905 4906 server->ops->downgrade_oplock(server, cinode, cfile->oplock_level, 4907 cfile->oplock_epoch, &purge_cache); 4908 4909 if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) && 4910 cifs_has_mand_locks(cinode)) { 4911 cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n", 4912 inode); 4913 cinode->oplock = 0; 4914 } 4915 4916 if (inode && S_ISREG(inode->i_mode)) { 4917 if (CIFS_CACHE_READ(cinode)) 4918 break_lease(inode, O_RDONLY); 4919 else 4920 break_lease(inode, O_WRONLY); 4921 rc = filemap_fdatawrite(inode->i_mapping); 4922 if (!CIFS_CACHE_READ(cinode) || purge_cache) { 4923 rc = filemap_fdatawait(inode->i_mapping); 4924 mapping_set_error(inode->i_mapping, rc); 4925 cifs_zap_mapping(inode); 4926 } 4927 cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc); 4928 if (CIFS_CACHE_WRITE(cinode)) 4929 goto oplock_break_ack; 4930 } 4931 4932 rc = cifs_push_locks(cfile); 4933 if (rc) 4934 cifs_dbg(VFS, "Push locks rc = %d\n", rc); 4935 4936 oplock_break_ack: 4937 /* 4938 * When oplock break is received and there are no active 4939 * file handles but cached, then schedule deferred close immediately. 4940 * So, new open will not use cached handle. 4941 */ 4942 4943 if (!CIFS_CACHE_HANDLE(cinode) && !list_empty(&cinode->deferred_closes)) 4944 cifs_close_deferred_file(cinode); 4945 4946 persistent_fid = cfile->fid.persistent_fid; 4947 volatile_fid = cfile->fid.volatile_fid; 4948 net_fid = cfile->fid.netfid; 4949 oplock_break_cancelled = cfile->oplock_break_cancelled; 4950 4951 _cifsFileInfo_put(cfile, false /* do not wait for ourself */, false); 4952 /* 4953 * MS-SMB2 3.2.5.19.1 and 3.2.5.19.2 (and MS-CIFS 3.2.5.42) do not require 4954 * an acknowledgment to be sent when the file has already been closed. 4955 */ 4956 spin_lock(&cinode->open_file_lock); 4957 /* check list empty since can race with kill_sb calling tree disconnect */ 4958 if (!oplock_break_cancelled && !list_empty(&cinode->openFileList)) { 4959 spin_unlock(&cinode->open_file_lock); 4960 rc = server->ops->oplock_response(tcon, persistent_fid, 4961 volatile_fid, net_fid, cinode); 4962 cifs_dbg(FYI, "Oplock release rc = %d\n", rc); 4963 } else 4964 spin_unlock(&cinode->open_file_lock); 4965 4966 cifs_put_tlink(tlink); 4967 out: 4968 cifs_done_oplock_break(cinode); 4969 } 4970 4971 /* 4972 * The presence of cifs_direct_io() in the address space ops vector 4973 * allowes open() O_DIRECT flags which would have failed otherwise. 4974 * 4975 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests 4976 * so this method should never be called. 4977 * 4978 * Direct IO is not yet supported in the cached mode. 4979 */ 4980 static ssize_t 4981 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter) 4982 { 4983 /* 4984 * FIXME 4985 * Eventually need to support direct IO for non forcedirectio mounts 4986 */ 4987 return -EINVAL; 4988 } 4989 4990 static int cifs_swap_activate(struct swap_info_struct *sis, 4991 struct file *swap_file, sector_t *span) 4992 { 4993 struct cifsFileInfo *cfile = swap_file->private_data; 4994 struct inode *inode = swap_file->f_mapping->host; 4995 unsigned long blocks; 4996 long long isize; 4997 4998 cifs_dbg(FYI, "swap activate\n"); 4999 5000 if (!swap_file->f_mapping->a_ops->swap_rw) 5001 /* Cannot support swap */ 5002 return -EINVAL; 5003 5004 spin_lock(&inode->i_lock); 5005 blocks = inode->i_blocks; 5006 isize = inode->i_size; 5007 spin_unlock(&inode->i_lock); 5008 if (blocks*512 < isize) { 5009 pr_warn("swap activate: swapfile has holes\n"); 5010 return -EINVAL; 5011 } 5012 *span = sis->pages; 5013 5014 pr_warn_once("Swap support over SMB3 is experimental\n"); 5015 5016 /* 5017 * TODO: consider adding ACL (or documenting how) to prevent other 5018 * users (on this or other systems) from reading it 5019 */ 5020 5021 5022 /* TODO: add sk_set_memalloc(inet) or similar */ 5023 5024 if (cfile) 5025 cfile->swapfile = true; 5026 /* 5027 * TODO: Since file already open, we can't open with DENY_ALL here 5028 * but we could add call to grab a byte range lock to prevent others 5029 * from reading or writing the file 5030 */ 5031 5032 sis->flags |= SWP_FS_OPS; 5033 return add_swap_extent(sis, 0, sis->max, 0); 5034 } 5035 5036 static void cifs_swap_deactivate(struct file *file) 5037 { 5038 struct cifsFileInfo *cfile = file->private_data; 5039 5040 cifs_dbg(FYI, "swap deactivate\n"); 5041 5042 /* TODO: undo sk_set_memalloc(inet) will eventually be needed */ 5043 5044 if (cfile) 5045 cfile->swapfile = false; 5046 5047 /* do we need to unpin (or unlock) the file */ 5048 } 5049 5050 const struct address_space_operations cifs_addr_ops = { 5051 .read_folio = cifs_read_folio, 5052 .readahead = cifs_readahead, 5053 .writepages = cifs_writepages, 5054 .write_begin = cifs_write_begin, 5055 .write_end = cifs_write_end, 5056 .dirty_folio = netfs_dirty_folio, 5057 .release_folio = cifs_release_folio, 5058 .direct_IO = cifs_direct_io, 5059 .invalidate_folio = cifs_invalidate_folio, 5060 .launder_folio = cifs_launder_folio, 5061 .migrate_folio = filemap_migrate_folio, 5062 /* 5063 * TODO: investigate and if useful we could add an is_dirty_writeback 5064 * helper if needed 5065 */ 5066 .swap_activate = cifs_swap_activate, 5067 .swap_deactivate = cifs_swap_deactivate, 5068 }; 5069 5070 /* 5071 * cifs_readahead requires the server to support a buffer large enough to 5072 * contain the header plus one complete page of data. Otherwise, we need 5073 * to leave cifs_readahead out of the address space operations. 5074 */ 5075 const struct address_space_operations cifs_addr_ops_smallbuf = { 5076 .read_folio = cifs_read_folio, 5077 .writepages = cifs_writepages, 5078 .write_begin = cifs_write_begin, 5079 .write_end = cifs_write_end, 5080 .dirty_folio = netfs_dirty_folio, 5081 .release_folio = cifs_release_folio, 5082 .invalidate_folio = cifs_invalidate_folio, 5083 .launder_folio = cifs_launder_folio, 5084 .migrate_folio = filemap_migrate_folio, 5085 }; 5086