Merge tag 'v6.9-rc-smb3-server-fixes' of git://git.samba.org/ksmbd
[sfrench/cifs-2.6.git] / fs / smb / server / smb2pdu.c
index 3f3408f086699fe9f150af0993e7069d0a743f3d..d478fa0c57abdbc7b8478624edf5133e202c85bf 100644 (file)
@@ -7047,10 +7047,10 @@ struct file_lock *smb_flock_init(struct file *f)
 
        locks_init_lock(fl);
 
-       fl->fl_owner = f;
-       fl->fl_pid = current->tgid;
-       fl->fl_file = f;
-       fl->fl_flags = FL_POSIX;
+       fl->c.flc_owner = f;
+       fl->c.flc_pid = current->tgid;
+       fl->c.flc_file = f;
+       fl->c.flc_flags = FL_POSIX;
        fl->fl_ops = NULL;
        fl->fl_lmops = NULL;
 
@@ -7067,30 +7067,30 @@ static int smb2_set_flock_flags(struct file_lock *flock, int flags)
        case SMB2_LOCKFLAG_SHARED:
                ksmbd_debug(SMB, "received shared request\n");
                cmd = F_SETLKW;
-               flock->fl_type = F_RDLCK;
-               flock->fl_flags |= FL_SLEEP;
+               flock->c.flc_type = F_RDLCK;
+               flock->c.flc_flags |= FL_SLEEP;
                break;
        case SMB2_LOCKFLAG_EXCLUSIVE:
                ksmbd_debug(SMB, "received exclusive request\n");
                cmd = F_SETLKW;
-               flock->fl_type = F_WRLCK;
-               flock->fl_flags |= FL_SLEEP;
+               flock->c.flc_type = F_WRLCK;
+               flock->c.flc_flags |= FL_SLEEP;
                break;
        case SMB2_LOCKFLAG_SHARED | SMB2_LOCKFLAG_FAIL_IMMEDIATELY:
                ksmbd_debug(SMB,
                            "received shared & fail immediately request\n");
                cmd = F_SETLK;
-               flock->fl_type = F_RDLCK;
+               flock->c.flc_type = F_RDLCK;
                break;
        case SMB2_LOCKFLAG_EXCLUSIVE | SMB2_LOCKFLAG_FAIL_IMMEDIATELY:
                ksmbd_debug(SMB,
                            "received exclusive & fail immediately request\n");
                cmd = F_SETLK;
-               flock->fl_type = F_WRLCK;
+               flock->c.flc_type = F_WRLCK;
                break;
        case SMB2_LOCKFLAG_UNLOCK:
                ksmbd_debug(SMB, "received unlock request\n");
-               flock->fl_type = F_UNLCK;
+               flock->c.flc_type = F_UNLCK;
                cmd = F_SETLK;
                break;
        }
@@ -7128,13 +7128,13 @@ static void smb2_remove_blocked_lock(void **argv)
        struct file_lock *flock = (struct file_lock *)argv[0];
 
        ksmbd_vfs_posix_lock_unblock(flock);
-       wake_up(&flock->fl_wait);
+       locks_wake_up(flock);
 }
 
 static inline bool lock_defer_pending(struct file_lock *fl)
 {
        /* check pending lock waiters */
-       return waitqueue_active(&fl->fl_wait);
+       return waitqueue_active(&fl->c.flc_wait);
 }
 
 /**
@@ -7225,8 +7225,8 @@ int smb2_lock(struct ksmbd_work *work)
                list_for_each_entry(cmp_lock, &lock_list, llist) {
                        if (cmp_lock->fl->fl_start <= flock->fl_start &&
                            cmp_lock->fl->fl_end >= flock->fl_end) {
-                               if (cmp_lock->fl->fl_type != F_UNLCK &&
-                                   flock->fl_type != F_UNLCK) {
+                               if (cmp_lock->fl->c.flc_type != F_UNLCK &&
+                                   flock->c.flc_type != F_UNLCK) {
                                        pr_err("conflict two locks in one request\n");
                                        err = -EINVAL;
                                        locks_free_lock(flock);
@@ -7274,12 +7274,12 @@ int smb2_lock(struct ksmbd_work *work)
                list_for_each_entry(conn, &conn_list, conns_list) {
                        spin_lock(&conn->llist_lock);
                        list_for_each_entry_safe(cmp_lock, tmp2, &conn->lock_list, clist) {
-                               if (file_inode(cmp_lock->fl->fl_file) !=
-                                   file_inode(smb_lock->fl->fl_file))
+                               if (file_inode(cmp_lock->fl->c.flc_file) !=
+                                   file_inode(smb_lock->fl->c.flc_file))
                                        continue;
 
-                               if (smb_lock->fl->fl_type == F_UNLCK) {
-                                       if (cmp_lock->fl->fl_file == smb_lock->fl->fl_file &&
+                               if (lock_is_unlock(smb_lock->fl)) {
+                                       if (cmp_lock->fl->c.flc_file == smb_lock->fl->c.flc_file &&
                                            cmp_lock->start == smb_lock->start &&
                                            cmp_lock->end == smb_lock->end &&
                                            !lock_defer_pending(cmp_lock->fl)) {
@@ -7296,7 +7296,7 @@ int smb2_lock(struct ksmbd_work *work)
                                        continue;
                                }
 
-                               if (cmp_lock->fl->fl_file == smb_lock->fl->fl_file) {
+                               if (cmp_lock->fl->c.flc_file == smb_lock->fl->c.flc_file) {
                                        if (smb_lock->flags & SMB2_LOCKFLAG_SHARED)
                                                continue;
                                } else {
@@ -7338,7 +7338,7 @@ int smb2_lock(struct ksmbd_work *work)
                }
                up_read(&conn_list_lock);
 out_check_cl:
-               if (smb_lock->fl->fl_type == F_UNLCK && nolock) {
+               if (lock_is_unlock(smb_lock->fl) && nolock) {
                        pr_err("Try to unlock nolocked range\n");
                        rsp->hdr.Status = STATUS_RANGE_NOT_LOCKED;
                        goto out;
@@ -7462,7 +7462,7 @@ out:
                struct file_lock *rlock = NULL;
 
                rlock = smb_flock_init(filp);
-               rlock->fl_type = F_UNLCK;
+               rlock->c.flc_type = F_UNLCK;
                rlock->fl_start = smb_lock->start;
                rlock->fl_end = smb_lock->end;