[smfrench-smb3:ksmbd-for-next-next 67/110] fs/smb/server/smb2pdu.c:9073 smb2_lock() warn: missing error code 'err'

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild
Message-ID <[email protected]>
BCC: [email protected]
CC: [email protected]
TO: Steve French <[email protected]>

tree:   https://github.com/smfrench/smb3-kernel.git ksmbd-for-next-next
head:   0be3df1505155c5cb9a15199b14cc2974f850605
commit: 10e5f86a51f4383b51eb1cdae9c88146d05d46e8 [67/110] ksmbd: add SMB3 request replay support
:::::: branch date: 2 days ago
:::::: commit date: 3 days ago
config: x86_64-randconfig-161-20260805 (https://download.01.org/0day-ci/archive/20260806/[email protected]/config)
compiler: clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

New smatch warnings:
fs/smb/server/smb2pdu.c:9073 smb2_lock() warn: missing error code 'err'

Old smatch warnings:
fs/smb/server/smb2pdu.c:8392 smb2_read() warn: missing unwind goto?

vim +/err +9073 fs/smb/server/smb2pdu.c

e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8992  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8993  /**
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8994   * smb2_lock() - handler for smb2 file lock command
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8995   * @work:	smb work containing lock command buffer
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8996   *
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8997   * Return:	0 on success, otherwise error
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8998   */
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  8999  int smb2_lock(struct ksmbd_work *work)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9000  {
7b7d709ef7cf285 fs/smb/server/smb2pdu.c Namjae Jeon       2023-06-24  9001  	struct smb2_lock_req *req;
7b7d709ef7cf285 fs/smb/server/smb2pdu.c Namjae Jeon       2023-06-24  9002  	struct smb2_lock_rsp *rsp;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9003  	struct smb2_lock_element *lock_ele;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9004  	struct ksmbd_file *fp = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9005  	struct file_lock *flock = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9006  	struct file *filp = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9007  	int lock_count;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9008  	int flags = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9009  	int cmd = 0;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9010  	int err = -EIO, i, rc = 0;
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9011  	u64 lock_start, lock_length;
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9012  	struct ksmbd_lock *smb_lock = NULL, *cmp_lock, *tmp, *tmp2;
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9013  	struct ksmbd_conn *conn;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9014  	int nolock = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9015  	LIST_HEAD(lock_list);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9016  	LIST_HEAD(rollback_list);
0bcc831be535269 fs/smb/server/smb2pdu.c Namjae Jeon       2025-10-01  9017  	int prior_lock = 0, bkt;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9018  	unsigned int id = KSMBD_NO_FID, pid = KSMBD_NO_FID;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9019  
7b7d709ef7cf285 fs/smb/server/smb2pdu.c Namjae Jeon       2023-06-24  9020  	WORK_BUFFERS(work, req, rsp);
7b7d709ef7cf285 fs/smb/server/smb2pdu.c Namjae Jeon       2023-06-24  9021  
e333e77638b3cc8 fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  9022  	ksmbd_debug(SMB, "Received smb2 lock request\n");
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9023  
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9024  	if (smb2_compound_has_failed(work, &rsp->hdr))
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9025  		return -EACCES;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9026  
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9027  	if (work->next_smb2_rcv_hdr_off &&
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9028  	    !has_file_id(req->VolatileFileId)) {
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9029  		ksmbd_debug(SMB, "Compound request set FID = %llu\n",
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9030  			    work->compound_fid);
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9031  		id = work->compound_fid;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9032  		pid = work->compound_pfid;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9033  	}
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9034  
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9035  	if (!has_file_id(id)) {
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9036  		id = req->VolatileFileId;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9037  		pid = req->PersistentFileId;
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9038  	}
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9039  
3f67e624e591747 fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-21  9040  	fp = ksmbd_lookup_fd_slow(work, id, pid);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9041  	if (!fp) {
2d004c6cae567e3 fs/ksmbd/smb2pdu.c      Paulo Alcantara   2022-03-21  9042  		ksmbd_debug(SMB, "Invalid file id for lock : %llu\n", req->VolatileFileId);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9043  		err = -ENOENT;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9044  		goto out2;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9045  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9046  
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9047  	err = smb2_set_request_open(work, fp, &req->hdr, false, false);
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9048  	if (err)
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9049  		goto out2;
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9050  
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9051  	smb2_verify_lock_sequence(work, fp, req);
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9052  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9053  	filp = fp->filp;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9054  	lock_count = le16_to_cpu(req->LockCount);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9055  	lock_ele = req->locks;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9056  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9057  	ksmbd_debug(SMB, "lock count is %d\n", lock_count);
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9058  	/*
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9059  	 * Cap lock_count at 64. The MS-SMB2 spec defines Open.LockSequenceArray
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9060  	 * as exactly 64 entries so 64 is the intended ceiling. No real workload
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9061  	 * comes close to this in a single request.
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9062  	 */
bd0a1ca52b6da64 fs/smb/server/smb2pdu.c Akif Sait         2026-04-20  9063  	if (!lock_count || lock_count > 64) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9064  		err = -EINVAL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9065  		goto out2;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9066  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9067  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9068  	for (i = 0; i < lock_count; i++) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9069  		flags = le32_to_cpu(lock_ele[i].Flags);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9070  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9071  		flock = smb_flock_init(filp);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9072  		if (!flock)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16 @9073  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9074  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9075  		cmd = smb2_set_flock_flags(flock, flags);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9076  
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9077  		lock_start = le64_to_cpu(lock_ele[i].Offset);
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9078  		lock_length = le64_to_cpu(lock_ele[i].Length);
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9079  		if (lock_start > U64_MAX - lock_length) {
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9080  			pr_err("Invalid lock range requested\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9081  			rsp->hdr.Status = STATUS_INVALID_LOCK_RANGE;
01f6c61bae3d658 fs/ksmbd/smb2pdu.c      Marios Makassikis 2022-11-29  9082  			locks_free_lock(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9083  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9084  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9085  
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9086  		if (lock_start > OFFSET_MAX)
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9087  			flock->fl_start = OFFSET_MAX;
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9088  		else
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9089  			flock->fl_start = lock_start;
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9090  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9091  		lock_length = le64_to_cpu(lock_ele[i].Length);
50bf80a553ccb5e fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-14  9092  		if (lock_length > OFFSET_MAX - flock->fl_start)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9093  			lock_length = OFFSET_MAX - flock->fl_start;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9094  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9095  		flock->fl_end = flock->fl_start + lock_length;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9096  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9097  		if (flock->fl_end < flock->fl_start) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9098  			ksmbd_debug(SMB,
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9099  				    "the end offset(%llx) is smaller than the start offset(%llx)\n",
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9100  				    flock->fl_end, flock->fl_start);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9101  			rsp->hdr.Status = STATUS_INVALID_LOCK_RANGE;
01f6c61bae3d658 fs/ksmbd/smb2pdu.c      Marios Makassikis 2022-11-29  9102  			locks_free_lock(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9103  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9104  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9105  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9106  		/* Check conflict locks in one request */
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9107  		list_for_each_entry(cmp_lock, &lock_list, llist) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9108  			if (cmp_lock->fl->fl_start <= flock->fl_start &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9109  			    cmp_lock->fl->fl_end >= flock->fl_end) {
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9110  				if (cmp_lock->fl->c.flc_type != F_UNLCK &&
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9111  				    flock->c.flc_type != F_UNLCK) {
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9112  					pr_err("conflict two locks in one request\n");
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9113  					err = -EINVAL;
01f6c61bae3d658 fs/ksmbd/smb2pdu.c      Marios Makassikis 2022-11-29  9114  					locks_free_lock(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9115  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9116  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9117  			}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9118  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9119  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9120  		smb_lock = smb2_lock_init(flock, cmd, flags, &lock_list);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9121  		if (!smb_lock) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9122  			err = -EINVAL;
01f6c61bae3d658 fs/ksmbd/smb2pdu.c      Marios Makassikis 2022-11-29  9123  			locks_free_lock(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9124  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9125  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9126  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9127  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9128  	list_for_each_entry_safe(smb_lock, tmp, &lock_list, llist) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9129  		if (smb_lock->cmd < 0) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9130  			err = -EINVAL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9131  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9132  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9133  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9134  		if (!(smb_lock->flags & SMB2_LOCKFLAG_MASK)) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9135  			err = -EINVAL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9136  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9137  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9138  
64b39f4a2fd293c fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-30  9139  		if ((prior_lock & (SMB2_LOCKFLAG_EXCLUSIVE | SMB2_LOCKFLAG_SHARED) &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9140  		     smb_lock->flags & SMB2_LOCKFLAG_UNLOCK) ||
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9141  		    (prior_lock == SMB2_LOCKFLAG_UNLOCK &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9142  		     !(smb_lock->flags & SMB2_LOCKFLAG_UNLOCK))) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9143  			err = -EINVAL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9144  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9145  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9146  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9147  		prior_lock = smb_lock->flags;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9148  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9149  		if (!(smb_lock->flags & SMB2_LOCKFLAG_UNLOCK) &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9150  		    !(smb_lock->flags & SMB2_LOCKFLAG_FAIL_IMMEDIATELY))
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9151  			goto no_check_cl;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9152  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9153  		nolock = 1;
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9154  		/* check locks in connection list */
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9155  		down_read(&conn_list_lock);
0bcc831be535269 fs/smb/server/smb2pdu.c Namjae Jeon       2025-10-01  9156  		hash_for_each(conn_list, bkt, conn, hlist) {
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9157  			spin_lock(&conn->llist_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9158  			list_for_each_entry_safe(cmp_lock, tmp2, &conn->lock_list, clist) {
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9159  				if (file_inode(cmp_lock->fl->c.flc_file) !=
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9160  				    file_inode(smb_lock->fl->c.flc_file))
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9161  					continue;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9162  
6a277077ac5189d fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9163  				if (lock_is_unlock(smb_lock->fl)) {
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9164  					if (cmp_lock->fl->c.flc_file == smb_lock->fl->c.flc_file &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9165  					    cmp_lock->start == smb_lock->start &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9166  					    cmp_lock->end == smb_lock->end &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9167  					    !lock_defer_pending(cmp_lock->fl)) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9168  						nolock = 0;
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9169  						list_del(&cmp_lock->flist);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9170  						list_del(&cmp_lock->clist);
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9171  						cmp_lock->conn = NULL;
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9172  						spin_unlock(&conn->llist_lock);
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9173  						up_read(&conn_list_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9174  
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9175  						ksmbd_conn_put(conn);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9176  						locks_free_lock(cmp_lock->fl);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9177  						kfree(cmp_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9178  						goto out_check_cl;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9179  					}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9180  					continue;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9181  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9182  
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9183  				if (cmp_lock->fl->c.flc_file == smb_lock->fl->c.flc_file) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9184  					if (smb_lock->flags & SMB2_LOCKFLAG_SHARED)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9185  						continue;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9186  				} else {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9187  					if (cmp_lock->flags & SMB2_LOCKFLAG_SHARED)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9188  						continue;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9189  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9190  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9191  				/* check zero byte lock range */
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9192  				if (cmp_lock->zero_len && !smb_lock->zero_len &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9193  				    cmp_lock->start > smb_lock->start &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9194  				    cmp_lock->start < smb_lock->end) {
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9195  					spin_unlock(&conn->llist_lock);
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9196  					up_read(&conn_list_lock);
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9197  					pr_err("previous lock conflict with zero byte lock range\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9198  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9199  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9200  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9201  				if (smb_lock->zero_len && !cmp_lock->zero_len &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9202  				    smb_lock->start > cmp_lock->start &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9203  				    smb_lock->start < cmp_lock->end) {
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9204  					spin_unlock(&conn->llist_lock);
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9205  					up_read(&conn_list_lock);
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9206  					pr_err("current lock conflict with zero byte lock range\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9207  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9208  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9209  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9210  				if (((cmp_lock->start <= smb_lock->start &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9211  				      cmp_lock->end > smb_lock->start) ||
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9212  				     (cmp_lock->start < smb_lock->end &&
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9213  				      cmp_lock->end >= smb_lock->end)) &&
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9214  				    !cmp_lock->zero_len && !smb_lock->zero_len) {
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9215  					spin_unlock(&conn->llist_lock);
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9216  					up_read(&conn_list_lock);
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9217  					pr_err("Not allow lock operation on exclusive lock range\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9218  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9219  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9220  			}
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9221  			spin_unlock(&conn->llist_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9222  		}
abcc506a9a71976 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-05-03  9223  		up_read(&conn_list_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9224  out_check_cl:
6a277077ac5189d fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9225  		if (lock_is_unlock(smb_lock->fl) && nolock) {
bde1694aecdb535 fs/cifsd/smb2pdu.c      Namjae Jeon       2021-06-28  9226  			pr_err("Try to unlock nolocked range\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9227  			rsp->hdr.Status = STATUS_RANGE_NOT_LOCKED;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9228  			goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9229  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9230  
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9231  no_check_cl:
84d2d1641b71dec fs/smb/server/smb2pdu.c Namjae Jeon       2025-02-26  9232  		flock = smb_lock->fl;
84d2d1641b71dec fs/smb/server/smb2pdu.c Namjae Jeon       2025-02-26  9233  		list_del(&smb_lock->llist);
84d2d1641b71dec fs/smb/server/smb2pdu.c Namjae Jeon       2025-02-26  9234  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9235  		if (smb_lock->zero_len) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9236  			err = 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9237  			goto skip;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9238  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9239  retry:
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9240  		rc = vfs_lock_file(filp, smb_lock->cmd, flock, NULL);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9241  skip:
e26e2d2e15daf1a fs/smb/server/smb2pdu.c Namjae Jeon       2025-02-27  9242  		if (smb_lock->flags & SMB2_LOCKFLAG_UNLOCK) {
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9243  			locks_free_lock(flock);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9244  			kfree(smb_lock);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9245  			if (!rc) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9246  				ksmbd_debug(SMB, "File unlocked\n");
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9247  			} else if (rc == -ENOENT) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9248  				rsp->hdr.Status = STATUS_NOT_LOCKED;
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9249  				err = rc;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9250  				goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9251  			}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9252  		} else {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9253  			if (rc == FILE_LOCK_DEFERRED) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9254  				void **argv;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9255  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9256  				ksmbd_debug(SMB,
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9257  					    "would have to wait for getting lock\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9258  				list_add(&smb_lock->llist, &rollback_list);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9259  
0066f623bce8f98 fs/smb/server/smb2pdu.c Namjae Jeon       2024-11-22  9260  				argv = kmalloc(sizeof(void *), KSMBD_DEFAULT_GFP);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9261  				if (!argv) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9262  					err = -ENOMEM;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9263  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9264  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9265  				argv[0] = flock;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9266  
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9267  				rc = setup_async_work(work,
070fb21e5912b6a fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-26  9268  						      smb2_remove_blocked_lock,
070fb21e5912b6a fs/cifsd/smb2pdu.c      Namjae Jeon       2021-05-26  9269  						      argv);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9270  				if (rc) {
8f1752723019db9 fs/smb/server/smb2pdu.c Zizhi Wo          2023-12-01  9271  					kfree(argv);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9272  					err = -ENOMEM;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9273  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9274  				}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9275  				spin_lock(&fp->f_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9276  				list_add(&work->fp_entry, &fp->blocked_works);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9277  				spin_unlock(&fp->f_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9278  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9279  				smb2_send_interim_resp(work, STATUS_PENDING);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9280  
45a64e8b08493b7 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9281  				ksmbd_vfs_posix_lock_wait(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9282  
d3ca9f7aeba793d fs/ksmbd/smb2pdu.c      Hangyu Hua        2023-02-17  9283  				spin_lock(&fp->f_lock);
d3ca9f7aeba793d fs/ksmbd/smb2pdu.c      Hangyu Hua        2023-02-17  9284  				list_del(&work->fp_entry);
d3ca9f7aeba793d fs/ksmbd/smb2pdu.c      Hangyu Hua        2023-02-17  9285  				spin_unlock(&fp->f_lock);
d3ca9f7aeba793d fs/ksmbd/smb2pdu.c      Hangyu Hua        2023-02-17  9286  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9287  				list_del(&smb_lock->llist);
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9288  				release_async_work(work);
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9289  
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9290  				if (work->state == KSMBD_WORK_ACTIVE)
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9291  					goto retry;
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9292  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9293  				locks_free_lock(flock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9294  
d4075abbc6b571e fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-06-25  9295  				if (work->state == KSMBD_WORK_CANCELLED) {
d20d1c8ba5765d1 fs/smb/server/smb2pdu.c Davide Ornaghi    2026-06-06  9296  					rsp->hdr.Status = STATUS_CANCELLED;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9297  					kfree(smb_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9298  					smb2_send_interim_resp(work,
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9299  							STATUS_CANCELLED);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9300  					work->send_no_response = 1;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9301  					goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9302  				}
3a9b557f44ea8f2 fs/ksmbd/smb2pdu.c      Namjae Jeon       2023-03-31  9303  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9304  				rsp->hdr.Status =
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9305  					STATUS_RANGE_NOT_LOCKED;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9306  				kfree(smb_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9307  				goto out2;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9308  			} else if (!rc) {
75ac9a3dd65f7ea fs/smb/server/smb2pdu.c Namjae Jeon       2023-10-04  9309  				list_add(&smb_lock->llist, &rollback_list);
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9310  				smb_lock->conn = ksmbd_conn_get(work->conn);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9311  				spin_lock(&work->conn->llist_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9312  				list_add_tail(&smb_lock->clist,
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9313  					      &work->conn->lock_list);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9314  				list_add_tail(&smb_lock->flist,
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9315  					      &fp->lock_list);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9316  				spin_unlock(&work->conn->llist_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9317  				ksmbd_debug(SMB, "successful in taking lock\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9318  			} else {
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9319  				locks_free_lock(flock);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9320  				kfree(smb_lock);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9321  				err = rc;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9322  				goto out;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9323  			}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9324  		}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9325  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9326  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9327  	if (atomic_read(&fp->f_ci->op_count) > 1)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9328  		smb_break_all_oplock(work, fp);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9329  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9330  	rsp->StructureSize = cpu_to_le16(4);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9331  	ksmbd_debug(SMB, "successful in taking lock\n");
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9332  	rsp->hdr.Status = STATUS_SUCCESS;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9333  	rsp->Reserved = 0;
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  9334  	err = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_lock_rsp));
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  9335  	if (err)
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  9336  		goto out;
10e5f86a51f4383 fs/smb/server/smb2pdu.c Namjae Jeon       2026-07-19  9337  	smb2_update_lock_sequence(work, fp, req);
e2b76ab8b5c9327 fs/smb/server/smb2pdu.c Namjae Jeon       2023-08-29  9338  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9339  	ksmbd_fd_put(work, fp);
96ad4ec51c06c6f fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-13  9340  	return 0;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9341  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9342  out:
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9343  	list_for_each_entry_safe(smb_lock, tmp, &lock_list, llist) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9344  		locks_free_lock(smb_lock->fl);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9345  		list_del(&smb_lock->llist);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9346  		kfree(smb_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9347  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9348  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9349  	list_for_each_entry_safe(smb_lock, tmp, &rollback_list, llist) {
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9350  		struct file_lock *rlock = NULL;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9351  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9352  		rlock = smb_flock_init(filp);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9353  		if (rlock) {
16f9ce818901c7b fs/smb/server/smb2pdu.c Jeff Layton       2024-01-31  9354  			rlock->c.flc_type = F_UNLCK;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9355  			rlock->fl_start = smb_lock->start;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9356  			rlock->fl_end = smb_lock->end;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9357  
7ecbe92696bb7fe fs/ksmbd/smb2pdu.c      Jeff Layton       2022-11-11  9358  			rc = vfs_lock_file(filp, F_SETLK, rlock, NULL);
96ad4ec51c06c6f fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-13  9359  			if (rc)
96ad4ec51c06c6f fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-13  9360  				pr_err("rollback unlock fail : %d\n", rc);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9361  		} else {
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9362  			pr_err("rollback unlock alloc failed\n");
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9363  		}
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9364  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9365  		list_del(&smb_lock->llist);
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9366  		conn = smb_lock->conn;
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9367  		spin_lock(&conn->llist_lock);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9368  		if (!list_empty(&smb_lock->flist))
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9369  			list_del(&smb_lock->flist);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9370  		list_del(&smb_lock->clist);
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9371  		smb_lock->conn = NULL;
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9372  		spin_unlock(&conn->llist_lock);
c1016dd1d8b2bcd fs/smb/server/smb2pdu.c Namjae Jeon       2026-06-15  9373  		ksmbd_conn_put(conn);
d63528eb0d43c47 fs/ksmbd/smb2pdu.c      Hyunchul Lee      2021-07-10  9374  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9375  		locks_free_lock(smb_lock->fl);
309b44ed684496e fs/smb/server/smb2pdu.c Werner Kasselman  2026-03-17  9376  		if (rlock)
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9377  			locks_free_lock(rlock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9378  		kfree(smb_lock);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9379  	}
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9380  out2:
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9381  	ksmbd_debug(SMB, "failed in taking lock(flags : %x), err : %d\n", flags, err);
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9382  
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9383  	if (!rsp->hdr.Status) {
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9384  		if (err == -EINVAL)
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9385  			rsp->hdr.Status = STATUS_INVALID_PARAMETER;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9386  		else if (err == -ENOMEM)
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9387  			rsp->hdr.Status = STATUS_INSUFFICIENT_RESOURCES;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9388  		else if (err == -ENOENT)
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9389  			rsp->hdr.Status = STATUS_FILE_CLOSED;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9390  		else
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9391  			rsp->hdr.Status = STATUS_LOCK_NOT_GRANTED;
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9392  	}
6c99dfc4c5f6fa1 fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-27  9393  
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9394  	smb2_set_err_rsp(work);
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9395  	ksmbd_fd_put(work, fp);
96ad4ec51c06c6f fs/ksmbd/smb2pdu.c      Namjae Jeon       2021-07-13  9396  	return err;
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9397  }
e2f34481b24db2f fs/cifsd/smb2pdu.c      Namjae Jeon       2021-03-16  9398  

:::::: The code at line 9073 was first introduced by commit
:::::: e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 cifsd: add server-side procedures for SMB3

:::::: TO: Namjae Jeon <[email protected]>
:::::: CC: Steve French <[email protected]>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.