Whamcloud - gitweb
LU-8371 llite: Trust creates in revalidate too.
[fs/lustre-release.git] / lustre / llite / file.c
index 328be3b..b7bd2bf 100644 (file)
@@ -322,21 +322,7 @@ int ll_file_release(struct inode *inode, struct file *file)
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
               PFID(ll_inode2fid(inode)), inode);
 
-#ifdef CONFIG_FS_POSIX_ACL
-       if (sbi->ll_flags & LL_SBI_RMT_CLIENT &&
-           inode == inode->i_sb->s_root->d_inode) {
-               struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
-
-               LASSERT(fd != NULL);
-               if (unlikely(fd->fd_flags & LL_FILE_RMTACL)) {
-                       fd->fd_flags &= ~LL_FILE_RMTACL;
-                       rct_del(&sbi->ll_rct, current_pid());
-                       et_search_free(&sbi->ll_et, current_pid());
-               }
-       }
-#endif
-
-       if (inode->i_sb->s_root != file->f_path.dentry)
+       if (inode->i_sb->s_root != file_dentry(file))
                 ll_stats_ops_tally(sbi, LPROC_LL_RELEASE, 1);
         fd = LUSTRE_FPRIVATE(file);
         LASSERT(fd != NULL);
@@ -346,7 +332,7 @@ int ll_file_release(struct inode *inode, struct file *file)
        if (S_ISDIR(inode->i_mode) && lli->lli_opendir_key == fd)
                ll_deauthorize_statahead(inode, fd);
 
-       if (inode->i_sb->s_root == file->f_path.dentry) {
+       if (inode->i_sb->s_root == file_dentry(file)) {
                LUSTRE_FPRIVATE(file) = NULL;
                ll_file_data_put(fd);
                RETURN(0);
@@ -369,7 +355,7 @@ int ll_file_release(struct inode *inode, struct file *file)
 static int ll_intent_file_open(struct file *file, void *lmm, int lmmsize,
                                struct lookup_intent *itp)
 {
-       struct dentry *de = file->f_path.dentry;
+       struct dentry *de = file_dentry(file);
        struct ll_sb_info *sbi = ll_i2sbi(de->d_inode);
        struct dentry *parent = de->d_parent;
        const char *name = NULL;
@@ -428,6 +414,16 @@ out:
        ptlrpc_req_finished(req);
        ll_intent_drop_lock(itp);
 
+       /* We did open by fid, but by the time we got to the server,
+        * the object disappeared. If this is a create, we cannot really
+        * tell the userspace that the file it was trying to create
+        * does not exist. Instead let's return -ESTALE, and the VFS will
+        * retry the create with LOOKUP_REVAL that we are going to catch
+        * in ll_revalidate_dentry() and use lookup then.
+        */
+       if (rc == -ENOENT && itp->it_op & IT_CREAT)
+               rc = -ESTALE;
+
        RETURN(rc);
 }
 
@@ -449,7 +445,7 @@ static int ll_och_fill(struct obd_export *md_exp, struct lookup_intent *it,
 static int ll_local_open(struct file *file, struct lookup_intent *it,
                         struct ll_file_data *fd, struct obd_client_handle *och)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        ENTRY;
 
        LASSERT(!LUSTRE_FPRIVATE(file));
@@ -513,7 +509,7 @@ int ll_file_open(struct inode *inode, struct file *file)
        if (S_ISDIR(inode->i_mode))
                ll_authorize_statahead(inode, fd);
 
-       if (inode->i_sb->s_root == file->f_path.dentry) {
+       if (inode->i_sb->s_root == file_dentry(file)) {
                 LUSTRE_FPRIVATE(file) = fd;
                 RETURN(0);
         }
@@ -571,7 +567,7 @@ restart:
                                 GOTO(out_openerr, rc);
                         }
 
-                       ll_release_openhandle(file->f_path.dentry, it);
+                       ll_release_openhandle(file_dentry(file), it);
                 }
                 (*och_usecount)++;
 
@@ -707,6 +703,95 @@ static int ll_md_blocking_lease_ast(struct ldlm_lock *lock,
 }
 
 /**
+ * When setting a lease on a file, we take ownership of the lli_mds_*_och
+ * and save it as fd->fd_och so as to force client to reopen the file even
+ * if it has an open lock in cache already.
+ */
+static int ll_lease_och_acquire(struct inode *inode, struct file *file,
+                               struct lustre_handle *old_handle)
+{
+       struct ll_inode_info *lli = ll_i2info(inode);
+       struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+       struct obd_client_handle **och_p;
+       __u64 *och_usecount;
+       int rc = 0;
+       ENTRY;
+
+       /* Get the openhandle of the file */
+       mutex_lock(&lli->lli_och_mutex);
+       if (fd->fd_lease_och != NULL)
+               GOTO(out_unlock, rc = -EBUSY);
+
+       if (fd->fd_och == NULL) {
+               if (file->f_mode & FMODE_WRITE) {
+                       LASSERT(lli->lli_mds_write_och != NULL);
+                       och_p = &lli->lli_mds_write_och;
+                       och_usecount = &lli->lli_open_fd_write_count;
+               } else {
+                       LASSERT(lli->lli_mds_read_och != NULL);
+                       och_p = &lli->lli_mds_read_och;
+                       och_usecount = &lli->lli_open_fd_read_count;
+               }
+
+               if (*och_usecount > 1)
+                       GOTO(out_unlock, rc = -EBUSY);
+
+               fd->fd_och = *och_p;
+               *och_usecount = 0;
+               *och_p = NULL;
+       }
+
+       *old_handle = fd->fd_och->och_fh;
+
+       EXIT;
+out_unlock:
+       mutex_unlock(&lli->lli_och_mutex);
+       return rc;
+}
+
+/**
+ * Release ownership on lli_mds_*_och when putting back a file lease.
+ */
+static int ll_lease_och_release(struct inode *inode, struct file *file)
+{
+       struct ll_inode_info *lli = ll_i2info(inode);
+       struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
+       struct obd_client_handle **och_p;
+       struct obd_client_handle *old_och = NULL;
+       __u64 *och_usecount;
+       int rc = 0;
+       ENTRY;
+
+       mutex_lock(&lli->lli_och_mutex);
+       if (file->f_mode & FMODE_WRITE) {
+               och_p = &lli->lli_mds_write_och;
+               och_usecount = &lli->lli_open_fd_write_count;
+       } else {
+               och_p = &lli->lli_mds_read_och;
+               och_usecount = &lli->lli_open_fd_read_count;
+       }
+
+       /* The file may have been open by another process (broken lease) so
+        * *och_p is not NULL. In this case we should simply increase usecount
+        * and close fd_och.
+        */
+       if (*och_p != NULL) {
+               old_och = fd->fd_och;
+               (*och_usecount)++;
+       } else {
+               *och_p = fd->fd_och;
+               *och_usecount = 1;
+       }
+       fd->fd_och = NULL;
+       mutex_unlock(&lli->lli_och_mutex);
+
+       if (old_och != NULL)
+               rc = ll_close_inode_openhandle(inode, old_och, 0, NULL);
+
+       RETURN(rc);
+}
+
+/**
  * Acquire a lease and open the file.
  */
 static struct obd_client_handle *
@@ -727,45 +812,12 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
                RETURN(ERR_PTR(-EINVAL));
 
        if (file != NULL) {
-               struct ll_inode_info *lli = ll_i2info(inode);
-               struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
-               struct obd_client_handle **och_p;
-               __u64 *och_usecount;
-
                if (!(fmode & file->f_mode) || (file->f_mode & FMODE_EXEC))
                        RETURN(ERR_PTR(-EPERM));
 
-               /* Get the openhandle of the file */
-               rc = -EBUSY;
-               mutex_lock(&lli->lli_och_mutex);
-               if (fd->fd_lease_och != NULL) {
-                       mutex_unlock(&lli->lli_och_mutex);
-                       RETURN(ERR_PTR(rc));
-               }
-
-               if (fd->fd_och == NULL) {
-                       if (file->f_mode & FMODE_WRITE) {
-                               LASSERT(lli->lli_mds_write_och != NULL);
-                               och_p = &lli->lli_mds_write_och;
-                               och_usecount = &lli->lli_open_fd_write_count;
-                       } else {
-                               LASSERT(lli->lli_mds_read_och != NULL);
-                               och_p = &lli->lli_mds_read_och;
-                               och_usecount = &lli->lli_open_fd_read_count;
-                       }
-                       if (*och_usecount == 1) {
-                               fd->fd_och = *och_p;
-                               *och_p = NULL;
-                               *och_usecount = 0;
-                               rc = 0;
-                       }
-               }
-               mutex_unlock(&lli->lli_och_mutex);
-               if (rc < 0) /* more than 1 opener */
+               rc = ll_lease_och_acquire(inode, file, &old_handle);
+               if (rc)
                        RETURN(ERR_PTR(rc));
-
-               LASSERT(fd->fd_och != NULL);
-               old_handle = fd->fd_och->och_fh;
        }
 
        OBD_ALLOC_PTR(och);
@@ -814,7 +866,7 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
        if (it.it_lock_mode == 0 ||
            it.it_lock_bits != MDS_INODELOCK_OPEN) {
                /* open lock must return for lease */
-               CERROR(DFID "lease granted but no open lock, %d/"LPU64".\n",
+               CERROR(DFID "lease granted but no open lock, %d/%llu.\n",
                        PFID(ll_inode2fid(inode)), it.it_lock_mode,
                        it.it_lock_bits);
                GOTO(out_close, rc = -EPROTO);
@@ -928,10 +980,11 @@ static int ll_lease_close(struct obd_client_handle *och, struct inode *inode,
        }
 
        CDEBUG(D_INODE, "lease for "DFID" broken? %d\n",
-               PFID(&ll_i2info(inode)->lli_fid), cancelled);
+              PFID(&ll_i2info(inode)->lli_fid), cancelled);
 
        if (!cancelled)
                ldlm_cli_cancel(&och->och_lease_handle, 0);
+
        if (lease_broken != NULL)
                *lease_broken = cancelled;
 
@@ -989,7 +1042,7 @@ int ll_merge_attr(const struct lu_env *env, struct inode *inode)
        if (mtime < attr->cat_mtime)
                mtime = attr->cat_mtime;
 
-       CDEBUG(D_VFSTRACE, DFID" updating i_size "LPU64"\n",
+       CDEBUG(D_VFSTRACE, DFID" updating i_size %llu\n",
               PFID(&lli->lli_fid), attr->cat_size);
 
        i_size_write(inode, attr->cat_size);
@@ -1008,7 +1061,7 @@ out_size_unlock:
 static bool file_is_noatime(const struct file *file)
 {
        const struct vfsmount *mnt = file->f_path.mnt;
-       const struct inode *inode = file->f_path.dentry->d_inode;
+       const struct inode *inode = file_inode((struct file *)file);
 
        /* Adapted from file_accessed() and touch_atime().*/
        if (file->f_flags & O_NOATIME)
@@ -1034,7 +1087,7 @@ static bool file_is_noatime(const struct file *file)
 
 static void ll_io_init(struct cl_io *io, const struct file *file, int write)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode((struct file *)file);
 
         io->u.ci_rw.crw_nonblock = file->f_flags & O_NONBLOCK;
        if (write) {
@@ -1061,7 +1114,7 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args,
                   loff_t *ppos, size_t count)
 {
        struct vvp_io           *vio = vvp_env_io(env);
-       struct inode            *inode = file->f_path.dentry->d_inode;
+       struct inode            *inode = file_inode(file);
        struct ll_inode_info    *lli = ll_i2info(inode);
        struct ll_file_data     *fd  = LUSTRE_FPRIVATE(file);
        struct cl_io            *io;
@@ -1071,8 +1124,8 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args,
 
        ENTRY;
 
-       CDEBUG(D_VFSTRACE, "file: %s, type: %d ppos: "LPU64", count: %zu\n",
-               file->f_path.dentry->d_name.name, iot, *ppos, count);
+       CDEBUG(D_VFSTRACE, "file: %s, type: %d ppos: %llu, count: %zu\n",
+               file_dentry(file)->d_name.name, iot, *ppos, count);
 
 restart:
        io = vvp_env_thread_io(env);
@@ -1147,7 +1200,7 @@ out:
        if ((rc == 0 || rc == -ENODATA) && count > 0 && io->ci_need_restart) {
                CDEBUG(D_VFSTRACE,
                       "%s: restart %s from %lld, count:%zu, result: %zd\n",
-                      file->f_path.dentry->d_name.name,
+                      file_dentry(file)->d_name.name,
                       iot == CIT_READ ? "read" : "write",
                       *ppos, count, result);
                goto restart;
@@ -1486,7 +1539,7 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
        if (rc < 0)
                GOTO(out_unlock, rc);
 
-       ll_release_openhandle(file->f_path.dentry, &oit);
+       ll_release_openhandle(file_dentry(file), &oit);
 
 out_unlock:
        ll_inode_size_unlock(inode);
@@ -2007,8 +2060,8 @@ static int ll_swap_layouts(struct file *file1, struct file *file2,
        if (llss == NULL)
                RETURN(-ENOMEM);
 
-       llss->inode1 = file1->f_path.dentry->d_inode;
-       llss->inode2 = file2->f_path.dentry->d_inode;
+       llss->inode1 = file_inode(file1);
+       llss->inode2 = file_inode(file2);
 
        rc = ll_check_swap_layouts_validity(llss->inode1, llss->inode2);
        if (rc < 0)
@@ -2175,13 +2228,13 @@ static int ll_hsm_import(struct inode *inode, struct file *file,
                         ATTR_MTIME | ATTR_MTIME_SET |
                         ATTR_ATIME | ATTR_ATIME_SET;
 
-       mutex_lock(&inode->i_mutex);
+       inode_lock(inode);
 
-       rc = ll_setattr_raw(file->f_path.dentry, attr, true);
+       rc = ll_setattr_raw(file_dentry(file), attr, true);
        if (rc == -ENODATA)
                rc = 0;
 
-       mutex_unlock(&inode->i_mutex);
+       inode_unlock(inode);
 
 out:
        if (hss != NULL)
@@ -2201,7 +2254,7 @@ static inline long ll_lease_type_from_fmode(fmode_t fmode)
 
 static int ll_file_futimes_3(struct file *file, const struct ll_futimes_3 *lfu)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct iattr ia = {
                .ia_valid = ATTR_ATIME | ATTR_ATIME_SET |
                            ATTR_MTIME | ATTR_MTIME_SET |
@@ -2228,9 +2281,9 @@ static int ll_file_futimes_3(struct file *file, const struct ll_futimes_3 *lfu)
        if (!S_ISREG(inode->i_mode))
                RETURN(-EINVAL);
 
-       mutex_lock(&inode->i_mutex);
-       rc = ll_setattr_raw(file->f_path.dentry, &ia, false);
-       mutex_unlock(&inode->i_mutex);
+       inode_lock(inode);
+       rc = ll_setattr_raw(file_dentry(file), &ia, false);
+       inode_unlock(inode);
 
        RETURN(rc);
 }
@@ -2250,7 +2303,7 @@ static int ll_file_futimes_3(struct file *file, const struct ll_futimes_3 *lfu)
  * much more data being sent to the client.
  */
 static int ll_ladvise(struct inode *inode, struct file *file, __u64 flags,
-                     struct lu_ladvise *ladvise)
+                     struct llapi_lu_ladvise *ladvise)
 {
        struct lu_env *env;
        struct cl_io *io;
@@ -2287,7 +2340,7 @@ static int ll_ladvise(struct inode *inode, struct file *file, __u64 flags,
 static long
 ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
-       struct inode            *inode = file->f_path.dentry->d_inode;
+       struct inode            *inode = file_inode(file);
        struct ll_file_data     *fd = LUSTRE_FPRIVATE(file);
        int                      flags, rc;
        ENTRY;
@@ -2366,7 +2419,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        mutex_unlock(&lli->lli_och_mutex);
                        if (och == NULL)
                                GOTO(out, rc = -ENOLCK);
-                       inode2 = file2->f_path.dentry->d_inode;
+                       inode2 = file_inode(file2);
                        rc = ll_swap_layouts_close(och, inode, inode2);
                } else {
                        rc = ll_swap_layouts(file, file2, &lsl);
@@ -2546,6 +2599,10 @@ out:
                        if (rc < 0)
                                RETURN(rc);
 
+                       rc = ll_lease_och_release(inode, file);
+                       if (rc < 0)
+                               RETURN(rc);
+
                        if (lease_broken)
                                fmode = 0;
 
@@ -2626,7 +2683,7 @@ out:
                RETURN(ll_file_futimes_3(file, &lfu));
        }
        case LL_IOC_LADVISE: {
-               struct ladvise_hdr *ladvise_hdr;
+               struct llapi_ladvise_hdr *ladvise_hdr;
                int i;
                int num_advise;
                int alloc_size = sizeof(*ladvise_hdr);
@@ -2637,7 +2694,7 @@ out:
                        RETURN(-ENOMEM);
 
                if (copy_from_user(ladvise_hdr,
-                                  (const struct ladvise_hdr __user *)arg,
+                                  (const struct llapi_ladvise_hdr __user *)arg,
                                   alloc_size))
                        GOTO(out_ladvise, rc = -EFAULT);
 
@@ -2660,7 +2717,7 @@ out:
                 * TODO: submit multiple advices to one server in a single RPC
                 */
                if (copy_from_user(ladvise_hdr,
-                                  (const struct ladvise_hdr __user *)arg,
+                                  (const struct llapi_ladvise_hdr __user *)arg,
                                   alloc_size))
                        GOTO(out_ladvise, rc = -EFAULT);
 
@@ -2708,7 +2765,7 @@ static loff_t
 generic_file_llseek_size(struct file *file, loff_t offset, int origin,
                 loff_t maxsize, loff_t eof)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
 
        switch (origin) {
        case SEEK_END:
@@ -2728,9 +2785,9 @@ generic_file_llseek_size(struct file *file, loff_t offset, int origin,
                 * SEEK_CURs. Note that parallel writes and reads behave
                 * like SEEK_SET.
                 */
-               mutex_lock(&inode->i_mutex);
+               inode_lock(inode);
                offset = llseek_execute(file, file->f_pos + offset, maxsize);
-               mutex_unlock(&inode->i_mutex);
+               inode_unlock(inode);
                return offset;
        case SEEK_DATA:
                /*
@@ -2757,7 +2814,7 @@ generic_file_llseek_size(struct file *file, loff_t offset, int origin,
 
 static loff_t ll_file_seek(struct file *file, loff_t offset, int origin)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        loff_t retval, eof = 0;
 
        ENTRY;
@@ -2782,7 +2839,7 @@ static loff_t ll_file_seek(struct file *file, loff_t offset, int origin)
 
 static int ll_flush(struct file *file, fl_owner_t id)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct ll_inode_info *lli = ll_i2info(inode);
        struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
        int rc, err;
@@ -2855,19 +2912,19 @@ int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
 }
 
 /*
- * When dentry is provided (the 'else' case), *file->f_path.dentry may be
+ * When dentry is provided (the 'else' case), file_dentry() may be
  * null and dentry must be used directly rather than pulled from
- * *file->f_path.dentry as is done otherwise.
+ * file_dentry() as is done otherwise.
  */
 
 #ifdef HAVE_FILE_FSYNC_4ARGS
 int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 {
-       struct dentry *dentry = file->f_path.dentry;
+       struct dentry *dentry = file_dentry(file);
 #elif defined(HAVE_FILE_FSYNC_2ARGS)
 int ll_fsync(struct file *file, int datasync)
 {
-       struct dentry *dentry = file->f_path.dentry;
+       struct dentry *dentry = file_dentry(file);
        loff_t start = 0;
        loff_t end = LLONG_MAX;
 #else
@@ -2888,7 +2945,7 @@ int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
 
 #ifdef HAVE_FILE_FSYNC_4ARGS
        rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
-       mutex_lock(&inode->i_mutex);
+       inode_lock(inode);
 #else
        /* fsync's caller has already called _fdata{sync,write}, we want
         * that IO to finish before calling the osc and mdc sync methods */
@@ -2926,7 +2983,7 @@ int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
        }
 
 #ifdef HAVE_FILE_FSYNC_4ARGS
-       mutex_unlock(&inode->i_mutex);
+       inode_unlock(inode);
 #endif
        RETURN(rc);
 }
@@ -2934,7 +2991,7 @@ int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
 static int
 ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ldlm_enqueue_info einfo = {
                .ei_type        = LDLM_FLOCK,
@@ -3036,8 +3093,8 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
         if (IS_ERR(op_data))
                 RETURN(PTR_ERR(op_data));
 
-       CDEBUG(D_DLMTRACE, "inode="DFID", pid=%u, flags="LPX64", mode=%u, "
-              "start="LPU64", end="LPU64"\n", PFID(ll_inode2fid(inode)),
+       CDEBUG(D_DLMTRACE, "inode="DFID", pid=%u, flags=%#llx, mode=%u, "
+              "start=%llu, end=%llu\n", PFID(ll_inode2fid(inode)),
               flock.l_flock.pid, flags, einfo.ei_mode,
               flock.l_flock.start, flock.l_flock.end);
 
@@ -3134,7 +3191,7 @@ int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
        qstr.hash = full_name_hash(name, namelen);
        qstr.name = name;
        qstr.len = namelen;
-       dchild = d_lookup(file->f_path.dentry, &qstr);
+       dchild = d_lookup(file_dentry(file), &qstr);
        if (dchild != NULL) {
                if (dchild->d_inode != NULL)
                        child_inode = igrab(dchild->d_inode);
@@ -3159,7 +3216,7 @@ int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
        if (child_inode == parent->i_sb->s_root->d_inode)
                GOTO(out_iput, rc = -EINVAL);
 
-       mutex_lock(&child_inode->i_mutex);
+       inode_lock(child_inode);
        op_data->op_fid3 = *ll_inode2fid(child_inode);
        if (!fid_is_sane(&op_data->op_fid3)) {
                CERROR("%s: migrate %s, but FID "DFID" is insane\n",
@@ -3237,7 +3294,7 @@ out_close:
        if (rc == 0)
                clear_nlink(child_inode);
 out_unlock:
-       mutex_unlock(&child_inode->i_mutex);
+       inode_unlock(child_inode);
 out_iput:
        iput(child_inode);
 out_free:
@@ -3689,12 +3746,7 @@ int ll_inode_permission(struct inode *inode, int mask, struct nameidata *nd)
        }
 
        ll_stats_ops_tally(sbi, LPROC_LL_INODE_PERM, 1);
-
-       if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
-               rc = lustre_check_remote_perm(inode, mask);
-       else
-               rc = ll_generic_permission(inode, mask, flags, ll_check_acl);
-
+       rc = ll_generic_permission(inode, mask, flags, ll_check_acl);
        /* restore current process's credentials and FS capability */
        if (squash_id) {
                revert_creds(old_cred);
@@ -4044,7 +4096,7 @@ static int ll_layout_lock_set(struct lustre_handle *lockh, enum ldlm_mode mode,
                   PFID(&lli->lli_fid), inode);
 
        /* in case this is a caching lock and reinstate with new inode */
-       md_set_lock_data(sbi->ll_md_exp, &lockh->cookie, inode, NULL);
+       md_set_lock_data(sbi->ll_md_exp, lockh, inode, NULL);
 
        lock_res_and_lock(lock);
        lvb_ready = ldlm_is_lvb_ready(lock);