Whamcloud - gitweb
LU-6215 llite: handle new_sync_[read|write] removal
[fs/lustre-release.git] / lustre / llite / file.c
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; If not, see
18  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
19  *
20  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21  * CA 95054 USA or visit www.sun.com if you need additional information or
22  * have any questions.
23  *
24  * GPL HEADER END
25  */
26 /*
27  * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
28  * Use is subject to license terms.
29  *
30  * Copyright (c) 2011, 2014, Intel Corporation.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  *
36  * lustre/llite/file.c
37  *
38  * Author: Peter Braam <braam@clusterfs.com>
39  * Author: Phil Schwan <phil@clusterfs.com>
40  * Author: Andreas Dilger <adilger@clusterfs.com>
41  */
42
43 #define DEBUG_SUBSYSTEM S_LLITE
44 #include <lustre_dlm.h>
45 #include <linux/pagemap.h>
46 #include <linux/file.h>
47 #include <linux/sched.h>
48 #include <linux/user_namespace.h>
49 #ifdef HAVE_UIDGID_HEADER
50 # include <linux/uidgid.h>
51 #endif
52 #include <lustre/ll_fiemap.h>
53 #include <lustre_ioctl.h>
54
55 #include "cl_object.h"
56
57 #include "llite_internal.h"
58 #include "vvp_internal.h"
59
60 static int
61 ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg);
62
63 static int ll_lease_close(struct obd_client_handle *och, struct inode *inode,
64                           bool *lease_broken);
65
66 static enum llioc_iter
67 ll_iocontrol_call(struct inode *inode, struct file *file,
68                   unsigned int cmd, unsigned long arg, int *rcp);
69
70 static struct ll_file_data *ll_file_data_get(void)
71 {
72         struct ll_file_data *fd;
73
74         OBD_SLAB_ALLOC_PTR_GFP(fd, ll_file_data_slab, GFP_NOFS);
75         if (fd == NULL)
76                 return NULL;
77
78         fd->fd_write_failed = false;
79
80         return fd;
81 }
82
83 static void ll_file_data_put(struct ll_file_data *fd)
84 {
85         if (fd != NULL)
86                 OBD_SLAB_FREE_PTR(fd, ll_file_data_slab);
87 }
88
89 /**
90  * Packs all the attributes into @op_data for the CLOSE rpc.
91  */
92 static void ll_prepare_close(struct inode *inode, struct md_op_data *op_data,
93                              struct obd_client_handle *och)
94 {
95         ENTRY;
96
97         ll_prep_md_op_data(op_data, inode, NULL, NULL,
98                            0, 0, LUSTRE_OPC_ANY, NULL);
99
100         op_data->op_attr.ia_mode = inode->i_mode;
101         op_data->op_attr.ia_atime = inode->i_atime;
102         op_data->op_attr.ia_mtime = inode->i_mtime;
103         op_data->op_attr.ia_ctime = inode->i_ctime;
104         op_data->op_attr.ia_size = i_size_read(inode);
105         op_data->op_attr.ia_valid |= ATTR_MODE | ATTR_ATIME | ATTR_ATIME_SET |
106                                      ATTR_MTIME | ATTR_MTIME_SET |
107                                      ATTR_CTIME | ATTR_CTIME_SET;
108         op_data->op_attr_blocks = inode->i_blocks;
109         op_data->op_attr_flags = ll_inode_to_ext_flags(inode->i_flags);
110         op_data->op_handle = och->och_fh;
111
112         if (och->och_flags & FMODE_WRITE &&
113             ll_file_test_and_clear_flag(ll_i2info(inode), LLIF_DATA_MODIFIED))
114                 /* For HSM: if inode data has been modified, pack it so that
115                  * MDT can set data dirty flag in the archive. */
116                 op_data->op_bias |= MDS_DATA_MODIFIED;
117
118         EXIT;
119 }
120
121 /**
122  * Perform a close, possibly with a bias.
123  * The meaning of "data" depends on the value of "bias".
124  *
125  * If \a bias is MDS_HSM_RELEASE then \a data is a pointer to the data version.
126  * If \a bias is MDS_CLOSE_LAYOUT_SWAP then \a data is a pointer to the inode to
127  * swap layouts with.
128  */
129 static int ll_close_inode_openhandle(struct obd_export *md_exp,
130                                      struct obd_client_handle *och,
131                                      struct inode *inode,
132                                      enum mds_op_bias bias,
133                                      void *data)
134 {
135         struct obd_export       *exp = ll_i2mdexp(inode);
136         struct md_op_data       *op_data;
137         struct ptlrpc_request   *req = NULL;
138         struct obd_device       *obd = class_exp2obd(exp);
139         int                      rc;
140         ENTRY;
141
142         if (obd == NULL) {
143                 /*
144                  * XXX: in case of LMV, is this correct to access
145                  * ->exp_handle?
146                  */
147                 CERROR("Invalid MDC connection handle "LPX64"\n",
148                        ll_i2mdexp(inode)->exp_handle.h_cookie);
149                 GOTO(out, rc = 0);
150         }
151
152         OBD_ALLOC_PTR(op_data);
153         if (op_data == NULL)
154                 /* XXX We leak openhandle and request here. */
155                 GOTO(out, rc = -ENOMEM);
156
157         ll_prepare_close(inode, op_data, och);
158         switch (bias) {
159         case MDS_CLOSE_LAYOUT_SWAP:
160                 LASSERT(data != NULL);
161                 op_data->op_bias |= MDS_CLOSE_LAYOUT_SWAP;
162                 op_data->op_data_version = 0;
163                 op_data->op_lease_handle = och->och_lease_handle;
164                 op_data->op_fid2 = *ll_inode2fid(data);
165                 break;
166
167         case MDS_HSM_RELEASE:
168                 LASSERT(data != NULL);
169                 op_data->op_bias |= MDS_HSM_RELEASE;
170                 op_data->op_data_version = *(__u64 *)data;
171                 op_data->op_lease_handle = och->och_lease_handle;
172                 op_data->op_attr.ia_valid |= ATTR_SIZE | ATTR_BLOCKS;
173                 break;
174
175         default:
176                 LASSERT(data == NULL);
177                 break;
178         }
179
180         rc = md_close(md_exp, op_data, och->och_mod, &req);
181         if (rc) {
182                 CERROR("%s: inode "DFID" mdc close failed: rc = %d\n",
183                        ll_i2mdexp(inode)->exp_obd->obd_name,
184                        PFID(ll_inode2fid(inode)), rc);
185         }
186
187         if (rc == 0 &&
188             op_data->op_bias & (MDS_HSM_RELEASE | MDS_CLOSE_LAYOUT_SWAP)) {
189                 struct mdt_body *body;
190
191                 body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
192                 if (!(body->mbo_valid & OBD_MD_CLOSE_INTENT_EXECED))
193                         rc = -EBUSY;
194         }
195
196         ll_finish_md_op_data(op_data);
197         EXIT;
198 out:
199
200         md_clear_open_replay_data(md_exp, och);
201         och->och_fh.cookie = DEAD_HANDLE_MAGIC;
202         OBD_FREE_PTR(och);
203
204         if (req) /* This is close request */
205                 ptlrpc_req_finished(req);
206         return rc;
207 }
208
209 int ll_md_real_close(struct inode *inode, fmode_t fmode)
210 {
211         struct ll_inode_info *lli = ll_i2info(inode);
212         struct obd_client_handle **och_p;
213         struct obd_client_handle *och;
214         __u64 *och_usecount;
215         int rc = 0;
216         ENTRY;
217
218         if (fmode & FMODE_WRITE) {
219                 och_p = &lli->lli_mds_write_och;
220                 och_usecount = &lli->lli_open_fd_write_count;
221         } else if (fmode & FMODE_EXEC) {
222                 och_p = &lli->lli_mds_exec_och;
223                 och_usecount = &lli->lli_open_fd_exec_count;
224         } else {
225                 LASSERT(fmode & FMODE_READ);
226                 och_p = &lli->lli_mds_read_och;
227                 och_usecount = &lli->lli_open_fd_read_count;
228         }
229
230         mutex_lock(&lli->lli_och_mutex);
231         if (*och_usecount > 0) {
232                 /* There are still users of this handle, so skip
233                  * freeing it. */
234                 mutex_unlock(&lli->lli_och_mutex);
235                 RETURN(0);
236         }
237
238         och = *och_p;
239         *och_p = NULL;
240         mutex_unlock(&lli->lli_och_mutex);
241
242         if (och != NULL) {
243                 /* There might be a race and this handle may already
244                  * be closed. */
245                 rc = ll_close_inode_openhandle(ll_i2sbi(inode)->ll_md_exp,
246                                                och, inode, 0, NULL);
247         }
248
249         RETURN(rc);
250 }
251
252 static int ll_md_close(struct obd_export *md_exp, struct inode *inode,
253                        struct file *file)
254 {
255         ldlm_policy_data_t policy = {
256                 .l_inodebits    = { MDS_INODELOCK_OPEN },
257         };
258         __u64 flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_TEST_LOCK;
259         struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
260         struct ll_inode_info *lli = ll_i2info(inode);
261         struct lustre_handle lockh;
262         int lockmode;
263         int rc = 0;
264         ENTRY;
265
266         /* clear group lock, if present */
267         if (unlikely(fd->fd_flags & LL_FILE_GROUP_LOCKED))
268                 ll_put_grouplock(inode, file, fd->fd_grouplock.lg_gid);
269
270         if (fd->fd_lease_och != NULL) {
271                 bool lease_broken;
272
273                 /* Usually the lease is not released when the
274                  * application crashed, we need to release here. */
275                 rc = ll_lease_close(fd->fd_lease_och, inode, &lease_broken);
276                 CDEBUG(rc ? D_ERROR : D_INODE, "Clean up lease "DFID" %d/%d\n",
277                         PFID(&lli->lli_fid), rc, lease_broken);
278
279                 fd->fd_lease_och = NULL;
280         }
281
282         if (fd->fd_och != NULL) {
283                 rc = ll_close_inode_openhandle(md_exp, fd->fd_och, inode, 0,
284                                                NULL);
285                 fd->fd_och = NULL;
286                 GOTO(out, rc);
287         }
288
289         /* Let's see if we have good enough OPEN lock on the file and if
290            we can skip talking to MDS */
291         mutex_lock(&lli->lli_och_mutex);
292         if (fd->fd_omode & FMODE_WRITE) {
293                 lockmode = LCK_CW;
294                 LASSERT(lli->lli_open_fd_write_count);
295                 lli->lli_open_fd_write_count--;
296         } else if (fd->fd_omode & FMODE_EXEC) {
297                 lockmode = LCK_PR;
298                 LASSERT(lli->lli_open_fd_exec_count);
299                 lli->lli_open_fd_exec_count--;
300         } else {
301                 lockmode = LCK_CR;
302                 LASSERT(lli->lli_open_fd_read_count);
303                 lli->lli_open_fd_read_count--;
304         }
305         mutex_unlock(&lli->lli_och_mutex);
306
307         if (!md_lock_match(md_exp, flags, ll_inode2fid(inode),
308                            LDLM_IBITS, &policy, lockmode, &lockh))
309                 rc = ll_md_real_close(inode, fd->fd_omode);
310
311 out:
312         LUSTRE_FPRIVATE(file) = NULL;
313         ll_file_data_put(fd);
314
315         RETURN(rc);
316 }
317
318 /* While this returns an error code, fput() the caller does not, so we need
319  * to make every effort to clean up all of our state here.  Also, applications
320  * rarely check close errors and even if an error is returned they will not
321  * re-try the close call.
322  */
323 int ll_file_release(struct inode *inode, struct file *file)
324 {
325         struct ll_file_data *fd;
326         struct ll_sb_info *sbi = ll_i2sbi(inode);
327         struct ll_inode_info *lli = ll_i2info(inode);
328         int rc;
329         ENTRY;
330
331         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
332                PFID(ll_inode2fid(inode)), inode);
333
334 #ifdef CONFIG_FS_POSIX_ACL
335         if (sbi->ll_flags & LL_SBI_RMT_CLIENT &&
336             inode == inode->i_sb->s_root->d_inode) {
337                 struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
338
339                 LASSERT(fd != NULL);
340                 if (unlikely(fd->fd_flags & LL_FILE_RMTACL)) {
341                         fd->fd_flags &= ~LL_FILE_RMTACL;
342                         rct_del(&sbi->ll_rct, current_pid());
343                         et_search_free(&sbi->ll_et, current_pid());
344                 }
345         }
346 #endif
347
348         if (inode->i_sb->s_root != file->f_path.dentry)
349                 ll_stats_ops_tally(sbi, LPROC_LL_RELEASE, 1);
350         fd = LUSTRE_FPRIVATE(file);
351         LASSERT(fd != NULL);
352
353         /* The last ref on @file, maybe not the the owner pid of statahead,
354          * because parent and child process can share the same file handle. */
355         if (S_ISDIR(inode->i_mode) && lli->lli_opendir_key == fd)
356                 ll_deauthorize_statahead(inode, fd);
357
358         if (inode->i_sb->s_root == file->f_path.dentry) {
359                 LUSTRE_FPRIVATE(file) = NULL;
360                 ll_file_data_put(fd);
361                 RETURN(0);
362         }
363
364         if (!S_ISDIR(inode->i_mode)) {
365                 if (lli->lli_clob != NULL)
366                         lov_read_and_clear_async_rc(lli->lli_clob);
367                 lli->lli_async_rc = 0;
368         }
369
370         rc = ll_md_close(sbi->ll_md_exp, inode, file);
371
372         if (CFS_FAIL_TIMEOUT_MS(OBD_FAIL_PTLRPC_DUMP_LOG, cfs_fail_val))
373                 libcfs_debug_dumplog();
374
375         RETURN(rc);
376 }
377
378 static int ll_intent_file_open(struct file *file, void *lmm, int lmmsize,
379                                 struct lookup_intent *itp)
380 {
381         struct dentry *de = file->f_path.dentry;
382         struct ll_sb_info *sbi = ll_i2sbi(de->d_inode);
383         struct dentry *parent = de->d_parent;
384         const char *name = NULL;
385         int len = 0;
386         struct md_op_data *op_data;
387         struct ptlrpc_request *req = NULL;
388         int rc;
389         ENTRY;
390
391         LASSERT(parent != NULL);
392         LASSERT(itp->it_flags & MDS_OPEN_BY_FID);
393
394         /* if server supports open-by-fid, or file name is invalid, don't pack
395          * name in open request */
396         if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_OPEN_BY_FID) &&
397             lu_name_is_valid_2(de->d_name.name, de->d_name.len)) {
398                 name = de->d_name.name;
399                 len = de->d_name.len;
400         }
401
402         op_data = ll_prep_md_op_data(NULL, parent->d_inode, de->d_inode,
403                                      name, len, 0, LUSTRE_OPC_ANY, NULL);
404         if (IS_ERR(op_data))
405                 RETURN(PTR_ERR(op_data));
406         op_data->op_data = lmm;
407         op_data->op_data_size = lmmsize;
408
409         rc = md_intent_lock(sbi->ll_md_exp, op_data, itp, &req,
410                             &ll_md_blocking_ast, 0);
411         ll_finish_md_op_data(op_data);
412         if (rc == -ESTALE) {
413                 /* reason for keep own exit path - don`t flood log
414                  * with messages with -ESTALE errors.
415                  */
416                 if (!it_disposition(itp, DISP_OPEN_OPEN) ||
417                      it_open_error(DISP_OPEN_OPEN, itp))
418                         GOTO(out, rc);
419                 ll_release_openhandle(de, itp);
420                 GOTO(out, rc);
421         }
422
423         if (it_disposition(itp, DISP_LOOKUP_NEG))
424                 GOTO(out, rc = -ENOENT);
425
426         if (rc != 0 || it_open_error(DISP_OPEN_OPEN, itp)) {
427                 rc = rc ? rc : it_open_error(DISP_OPEN_OPEN, itp);
428                 CDEBUG(D_VFSTRACE, "lock enqueue: err: %d\n", rc);
429                 GOTO(out, rc);
430         }
431
432         rc = ll_prep_inode(&de->d_inode, req, NULL, itp);
433         if (!rc && itp->d.lustre.it_lock_mode)
434                 ll_set_lock_data(sbi->ll_md_exp, de->d_inode, itp, NULL);
435
436 out:
437         ptlrpc_req_finished(req);
438         ll_intent_drop_lock(itp);
439
440         RETURN(rc);
441 }
442
443 static int ll_och_fill(struct obd_export *md_exp, struct lookup_intent *it,
444                        struct obd_client_handle *och)
445 {
446         struct ptlrpc_request *req = it->d.lustre.it_data;
447         struct mdt_body *body;
448
449         body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
450         och->och_fh = body->mbo_handle;
451         och->och_fid = body->mbo_fid1;
452         och->och_lease_handle.cookie = it->d.lustre.it_lock_handle;
453         och->och_magic = OBD_CLIENT_HANDLE_MAGIC;
454         och->och_flags = it->it_flags;
455
456         return md_set_open_replay_data(md_exp, och, it);
457 }
458
459 static int ll_local_open(struct file *file, struct lookup_intent *it,
460                          struct ll_file_data *fd, struct obd_client_handle *och)
461 {
462         struct inode *inode = file->f_path.dentry->d_inode;
463         ENTRY;
464
465         LASSERT(!LUSTRE_FPRIVATE(file));
466
467         LASSERT(fd != NULL);
468
469         if (och) {
470                 int rc;
471
472                 rc = ll_och_fill(ll_i2sbi(inode)->ll_md_exp, it, och);
473                 if (rc != 0)
474                         RETURN(rc);
475         }
476
477         LUSTRE_FPRIVATE(file) = fd;
478         ll_readahead_init(inode, &fd->fd_ras);
479         fd->fd_omode = it->it_flags & (FMODE_READ | FMODE_WRITE | FMODE_EXEC);
480
481         /* ll_cl_context initialize */
482         rwlock_init(&fd->fd_lock);
483         INIT_LIST_HEAD(&fd->fd_lccs);
484
485         RETURN(0);
486 }
487
488 /* Open a file, and (for the very first open) create objects on the OSTs at
489  * this time.  If opened with O_LOV_DELAY_CREATE, then we don't do the object
490  * creation or open until ll_lov_setstripe() ioctl is called.
491  *
492  * If we already have the stripe MD locally then we don't request it in
493  * md_open(), by passing a lmm_size = 0.
494  *
495  * It is up to the application to ensure no other processes open this file
496  * in the O_LOV_DELAY_CREATE case, or the default striping pattern will be
497  * used.  We might be able to avoid races of that sort by getting lli_open_sem
498  * before returning in the O_LOV_DELAY_CREATE case and dropping it here
499  * or in ll_file_release(), but I'm not sure that is desirable/necessary.
500  */
501 int ll_file_open(struct inode *inode, struct file *file)
502 {
503         struct ll_inode_info *lli = ll_i2info(inode);
504         struct lookup_intent *it, oit = { .it_op = IT_OPEN,
505                                           .it_flags = file->f_flags };
506         struct obd_client_handle **och_p = NULL;
507         __u64 *och_usecount = NULL;
508         struct ll_file_data *fd;
509         int rc = 0;
510         ENTRY;
511
512         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), flags %o\n",
513                PFID(ll_inode2fid(inode)), inode, file->f_flags);
514
515         it = file->private_data; /* XXX: compat macro */
516         file->private_data = NULL; /* prevent ll_local_open assertion */
517
518         fd = ll_file_data_get();
519         if (fd == NULL)
520                 GOTO(out_openerr, rc = -ENOMEM);
521
522         fd->fd_file = file;
523         if (S_ISDIR(inode->i_mode))
524                 ll_authorize_statahead(inode, fd);
525
526         if (inode->i_sb->s_root == file->f_path.dentry) {
527                 LUSTRE_FPRIVATE(file) = fd;
528                 RETURN(0);
529         }
530
531         if (!it || !it->d.lustre.it_disposition) {
532                 /* Convert f_flags into access mode. We cannot use file->f_mode,
533                  * because everything but O_ACCMODE mask was stripped from
534                  * there */
535                 if ((oit.it_flags + 1) & O_ACCMODE)
536                         oit.it_flags++;
537                 if (file->f_flags & O_TRUNC)
538                         oit.it_flags |= FMODE_WRITE;
539
540                 /* kernel only call f_op->open in dentry_open.  filp_open calls
541                  * dentry_open after call to open_namei that checks permissions.
542                  * Only nfsd_open call dentry_open directly without checking
543                  * permissions and because of that this code below is safe. */
544                 if (oit.it_flags & (FMODE_WRITE | FMODE_READ))
545                         oit.it_flags |= MDS_OPEN_OWNEROVERRIDE;
546
547                 /* We do not want O_EXCL here, presumably we opened the file
548                  * already? XXX - NFS implications? */
549                 oit.it_flags &= ~O_EXCL;
550
551                 /* bug20584, if "it_flags" contains O_CREAT, the file will be
552                  * created if necessary, then "IT_CREAT" should be set to keep
553                  * consistent with it */
554                 if (oit.it_flags & O_CREAT)
555                         oit.it_op |= IT_CREAT;
556
557                 it = &oit;
558         }
559
560 restart:
561         /* Let's see if we have file open on MDS already. */
562         if (it->it_flags & FMODE_WRITE) {
563                 och_p = &lli->lli_mds_write_och;
564                 och_usecount = &lli->lli_open_fd_write_count;
565         } else if (it->it_flags & FMODE_EXEC) {
566                 och_p = &lli->lli_mds_exec_och;
567                 och_usecount = &lli->lli_open_fd_exec_count;
568          } else {
569                 och_p = &lli->lli_mds_read_och;
570                 och_usecount = &lli->lli_open_fd_read_count;
571         }
572
573         mutex_lock(&lli->lli_och_mutex);
574         if (*och_p) { /* Open handle is present */
575                 if (it_disposition(it, DISP_OPEN_OPEN)) {
576                         /* Well, there's extra open request that we do not need,
577                            let's close it somehow. This will decref request. */
578                         rc = it_open_error(DISP_OPEN_OPEN, it);
579                         if (rc) {
580                                 mutex_unlock(&lli->lli_och_mutex);
581                                 GOTO(out_openerr, rc);
582                         }
583
584                         ll_release_openhandle(file->f_path.dentry, it);
585                 }
586                 (*och_usecount)++;
587
588                 rc = ll_local_open(file, it, fd, NULL);
589                 if (rc) {
590                         (*och_usecount)--;
591                         mutex_unlock(&lli->lli_och_mutex);
592                         GOTO(out_openerr, rc);
593                 }
594         } else {
595                 LASSERT(*och_usecount == 0);
596                 if (!it->d.lustre.it_disposition) {
597                         /* We cannot just request lock handle now, new ELC code
598                            means that one of other OPEN locks for this file
599                            could be cancelled, and since blocking ast handler
600                            would attempt to grab och_mutex as well, that would
601                            result in a deadlock */
602                         mutex_unlock(&lli->lli_och_mutex);
603                         /*
604                          * Normally called under two situations:
605                          * 1. NFS export.
606                          * 2. A race/condition on MDS resulting in no open
607                          *    handle to be returned from LOOKUP|OPEN request,
608                          *    for example if the target entry was a symlink.
609                          *
610                          * Always fetch MDS_OPEN_LOCK if this is not setstripe.
611                          *
612                          * Always specify MDS_OPEN_BY_FID because we don't want
613                          * to get file with different fid.
614                          */
615                         it->it_flags |= MDS_OPEN_LOCK | MDS_OPEN_BY_FID;
616                         rc = ll_intent_file_open(file, NULL, 0, it);
617                         if (rc)
618                                 GOTO(out_openerr, rc);
619
620                         goto restart;
621                 }
622                 OBD_ALLOC(*och_p, sizeof (struct obd_client_handle));
623                 if (!*och_p)
624                         GOTO(out_och_free, rc = -ENOMEM);
625
626                 (*och_usecount)++;
627
628                 /* md_intent_lock() didn't get a request ref if there was an
629                  * open error, so don't do cleanup on the request here
630                  * (bug 3430) */
631                 /* XXX (green): Should not we bail out on any error here, not
632                  * just open error? */
633                 rc = it_open_error(DISP_OPEN_OPEN, it);
634                 if (rc != 0)
635                         GOTO(out_och_free, rc);
636
637                 LASSERTF(it_disposition(it, DISP_ENQ_OPEN_REF),
638                          "inode %p: disposition %x, status %d\n", inode,
639                          it_disposition(it, ~0), it->d.lustre.it_status);
640
641                 rc = ll_local_open(file, it, fd, *och_p);
642                 if (rc)
643                         GOTO(out_och_free, rc);
644         }
645         mutex_unlock(&lli->lli_och_mutex);
646         fd = NULL;
647
648         /* Must do this outside lli_och_mutex lock to prevent deadlock where
649            different kind of OPEN lock for this same inode gets cancelled
650            by ldlm_cancel_lru */
651         if (!S_ISREG(inode->i_mode))
652                 GOTO(out_och_free, rc);
653
654         cl_lov_delay_create_clear(&file->f_flags);
655         GOTO(out_och_free, rc);
656
657 out_och_free:
658         if (rc) {
659                 if (och_p && *och_p) {
660                         OBD_FREE(*och_p, sizeof (struct obd_client_handle));
661                         *och_p = NULL; /* OBD_FREE writes some magic there */
662                         (*och_usecount)--;
663                 }
664                 mutex_unlock(&lli->lli_och_mutex);
665
666 out_openerr:
667                 if (lli->lli_opendir_key == fd)
668                         ll_deauthorize_statahead(inode, fd);
669                 if (fd != NULL)
670                         ll_file_data_put(fd);
671         } else {
672                 ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_OPEN, 1);
673         }
674
675         if (it && it_disposition(it, DISP_ENQ_OPEN_REF)) {
676                 ptlrpc_req_finished(it->d.lustre.it_data);
677                 it_clear_disposition(it, DISP_ENQ_OPEN_REF);
678         }
679
680         return rc;
681 }
682
683 static int ll_md_blocking_lease_ast(struct ldlm_lock *lock,
684                         struct ldlm_lock_desc *desc, void *data, int flag)
685 {
686         int rc;
687         struct lustre_handle lockh;
688         ENTRY;
689
690         switch (flag) {
691         case LDLM_CB_BLOCKING:
692                 ldlm_lock2handle(lock, &lockh);
693                 rc = ldlm_cli_cancel(&lockh, LCF_ASYNC);
694                 if (rc < 0) {
695                         CDEBUG(D_INODE, "ldlm_cli_cancel: %d\n", rc);
696                         RETURN(rc);
697                 }
698                 break;
699         case LDLM_CB_CANCELING:
700                 /* do nothing */
701                 break;
702         }
703         RETURN(0);
704 }
705
706 /**
707  * Acquire a lease and open the file.
708  */
709 static struct obd_client_handle *
710 ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
711               __u64 open_flags)
712 {
713         struct lookup_intent it = { .it_op = IT_OPEN };
714         struct ll_sb_info *sbi = ll_i2sbi(inode);
715         struct md_op_data *op_data;
716         struct ptlrpc_request *req = NULL;
717         struct lustre_handle old_handle = { 0 };
718         struct obd_client_handle *och = NULL;
719         int rc;
720         int rc2;
721         ENTRY;
722
723         if (fmode != FMODE_WRITE && fmode != FMODE_READ)
724                 RETURN(ERR_PTR(-EINVAL));
725
726         if (file != NULL) {
727                 struct ll_inode_info *lli = ll_i2info(inode);
728                 struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
729                 struct obd_client_handle **och_p;
730                 __u64 *och_usecount;
731
732                 if (!(fmode & file->f_mode) || (file->f_mode & FMODE_EXEC))
733                         RETURN(ERR_PTR(-EPERM));
734
735                 /* Get the openhandle of the file */
736                 rc = -EBUSY;
737                 mutex_lock(&lli->lli_och_mutex);
738                 if (fd->fd_lease_och != NULL) {
739                         mutex_unlock(&lli->lli_och_mutex);
740                         RETURN(ERR_PTR(rc));
741                 }
742
743                 if (fd->fd_och == NULL) {
744                         if (file->f_mode & FMODE_WRITE) {
745                                 LASSERT(lli->lli_mds_write_och != NULL);
746                                 och_p = &lli->lli_mds_write_och;
747                                 och_usecount = &lli->lli_open_fd_write_count;
748                         } else {
749                                 LASSERT(lli->lli_mds_read_och != NULL);
750                                 och_p = &lli->lli_mds_read_och;
751                                 och_usecount = &lli->lli_open_fd_read_count;
752                         }
753                         if (*och_usecount == 1) {
754                                 fd->fd_och = *och_p;
755                                 *och_p = NULL;
756                                 *och_usecount = 0;
757                                 rc = 0;
758                         }
759                 }
760                 mutex_unlock(&lli->lli_och_mutex);
761                 if (rc < 0) /* more than 1 opener */
762                         RETURN(ERR_PTR(rc));
763
764                 LASSERT(fd->fd_och != NULL);
765                 old_handle = fd->fd_och->och_fh;
766         }
767
768         OBD_ALLOC_PTR(och);
769         if (och == NULL)
770                 RETURN(ERR_PTR(-ENOMEM));
771
772         op_data = ll_prep_md_op_data(NULL, inode, inode, NULL, 0, 0,
773                                         LUSTRE_OPC_ANY, NULL);
774         if (IS_ERR(op_data))
775                 GOTO(out, rc = PTR_ERR(op_data));
776
777         /* To tell the MDT this openhandle is from the same owner */
778         op_data->op_handle = old_handle;
779
780         it.it_flags = fmode | open_flags;
781         it.it_flags |= MDS_OPEN_LOCK | MDS_OPEN_BY_FID | MDS_OPEN_LEASE;
782         rc = md_intent_lock(sbi->ll_md_exp, op_data, &it, &req,
783                             &ll_md_blocking_lease_ast,
784         /* LDLM_FL_NO_LRU: To not put the lease lock into LRU list, otherwise
785          * it can be cancelled which may mislead applications that the lease is
786          * broken;
787          * LDLM_FL_EXCL: Set this flag so that it won't be matched by normal
788          * open in ll_md_blocking_ast(). Otherwise as ll_md_blocking_lease_ast
789          * doesn't deal with openhandle, so normal openhandle will be leaked. */
790                             LDLM_FL_NO_LRU | LDLM_FL_EXCL);
791         ll_finish_md_op_data(op_data);
792         ptlrpc_req_finished(req);
793         if (rc < 0)
794                 GOTO(out_release_it, rc);
795
796         if (it_disposition(&it, DISP_LOOKUP_NEG))
797                 GOTO(out_release_it, rc = -ENOENT);
798
799         rc = it_open_error(DISP_OPEN_OPEN, &it);
800         if (rc)
801                 GOTO(out_release_it, rc);
802
803         LASSERT(it_disposition(&it, DISP_ENQ_OPEN_REF));
804         ll_och_fill(sbi->ll_md_exp, &it, och);
805
806         if (!it_disposition(&it, DISP_OPEN_LEASE)) /* old server? */
807                 GOTO(out_close, rc = -EOPNOTSUPP);
808
809         /* already get lease, handle lease lock */
810         ll_set_lock_data(sbi->ll_md_exp, inode, &it, NULL);
811         if (it.d.lustre.it_lock_mode == 0 ||
812             it.d.lustre.it_lock_bits != MDS_INODELOCK_OPEN) {
813                 /* open lock must return for lease */
814                 CERROR(DFID "lease granted but no open lock, %d/"LPU64".\n",
815                         PFID(ll_inode2fid(inode)), it.d.lustre.it_lock_mode,
816                         it.d.lustre.it_lock_bits);
817                 GOTO(out_close, rc = -EPROTO);
818         }
819
820         ll_intent_release(&it);
821         RETURN(och);
822
823 out_close:
824         /* Cancel open lock */
825         if (it.d.lustre.it_lock_mode != 0) {
826                 ldlm_lock_decref_and_cancel(&och->och_lease_handle,
827                                             it.d.lustre.it_lock_mode);
828                 it.d.lustre.it_lock_mode = 0;
829                 och->och_lease_handle.cookie = 0ULL;
830         }
831         rc2 = ll_close_inode_openhandle(sbi->ll_md_exp, och, inode, 0, NULL);
832         if (rc2 < 0)
833                 CERROR("%s: error closing file "DFID": %d\n",
834                        ll_get_fsname(inode->i_sb, NULL, 0),
835                        PFID(&ll_i2info(inode)->lli_fid), rc2);
836         och = NULL; /* och has been freed in ll_close_inode_openhandle() */
837 out_release_it:
838         ll_intent_release(&it);
839 out:
840         if (och != NULL)
841                 OBD_FREE_PTR(och);
842         RETURN(ERR_PTR(rc));
843 }
844
845 /**
846  * Check whether a layout swap can be done between two inodes.
847  *
848  * \param[in] inode1  First inode to check
849  * \param[in] inode2  Second inode to check
850  *
851  * \retval 0 on success, layout swap can be performed between both inodes
852  * \retval negative error code if requirements are not met
853  */
854 static int ll_check_swap_layouts_validity(struct inode *inode1,
855                                           struct inode *inode2)
856 {
857         if (!S_ISREG(inode1->i_mode) || !S_ISREG(inode2->i_mode))
858                 return -EINVAL;
859
860         if (inode_permission(inode1, MAY_WRITE) ||
861             inode_permission(inode2, MAY_WRITE))
862                 return -EPERM;
863
864         if (inode1->i_sb != inode2->i_sb)
865                 return -EXDEV;
866
867         return 0;
868 }
869
870 static int ll_swap_layouts_close(struct obd_client_handle *och,
871                                  struct inode *inode, struct inode *inode2)
872 {
873         const struct lu_fid     *fid1 = ll_inode2fid(inode);
874         const struct lu_fid     *fid2;
875         int                      rc;
876         ENTRY;
877
878         CDEBUG(D_INODE, "%s: biased close of file "DFID"\n",
879                ll_get_fsname(inode->i_sb, NULL, 0), PFID(fid1));
880
881         rc = ll_check_swap_layouts_validity(inode, inode2);
882         if (rc < 0)
883                 GOTO(out_free_och, rc);
884
885         /* We now know that inode2 is a lustre inode */
886         fid2 = ll_inode2fid(inode2);
887
888         rc = lu_fid_cmp(fid1, fid2);
889         if (rc == 0)
890                 GOTO(out_free_och, rc = -EINVAL);
891
892         /* Close the file and swap layouts between inode & inode2.
893          * NB: lease lock handle is released in mdc_close_layout_swap_pack()
894          * because we still need it to pack l_remote_handle to MDT. */
895         rc = ll_close_inode_openhandle(ll_i2sbi(inode)->ll_md_exp, och, inode,
896                                        MDS_CLOSE_LAYOUT_SWAP, inode2);
897
898         och = NULL; /* freed in ll_close_inode_openhandle() */
899
900 out_free_och:
901         if (och != NULL)
902                 OBD_FREE_PTR(och);
903
904         RETURN(rc);
905 }
906
907 /**
908  * Release lease and close the file.
909  * It will check if the lease has ever broken.
910  */
911 static int ll_lease_close(struct obd_client_handle *och, struct inode *inode,
912                           bool *lease_broken)
913 {
914         struct ldlm_lock *lock;
915         bool cancelled = true;
916         int rc;
917         ENTRY;
918
919         lock = ldlm_handle2lock(&och->och_lease_handle);
920         if (lock != NULL) {
921                 lock_res_and_lock(lock);
922                 cancelled = ldlm_is_cancel(lock);
923                 unlock_res_and_lock(lock);
924                 LDLM_LOCK_PUT(lock);
925         }
926
927         CDEBUG(D_INODE, "lease for "DFID" broken? %d\n",
928                 PFID(&ll_i2info(inode)->lli_fid), cancelled);
929
930         if (!cancelled)
931                 ldlm_cli_cancel(&och->och_lease_handle, 0);
932         if (lease_broken != NULL)
933                 *lease_broken = cancelled;
934
935         rc = ll_close_inode_openhandle(ll_i2sbi(inode)->ll_md_exp, och, inode,
936                                        0, NULL);
937
938         RETURN(rc);
939 }
940
941 int ll_merge_attr(const struct lu_env *env, struct inode *inode)
942 {
943         struct ll_inode_info *lli = ll_i2info(inode);
944         struct cl_object *obj = lli->lli_clob;
945         struct cl_attr *attr = vvp_env_thread_attr(env);
946         s64 atime;
947         s64 mtime;
948         s64 ctime;
949         int rc = 0;
950
951         ENTRY;
952
953         ll_inode_size_lock(inode);
954
955         /* merge timestamps the most recently obtained from mds with
956            timestamps obtained from osts */
957         LTIME_S(inode->i_atime) = lli->lli_atime;
958         LTIME_S(inode->i_mtime) = lli->lli_mtime;
959         LTIME_S(inode->i_ctime) = lli->lli_ctime;
960
961         atime = LTIME_S(inode->i_atime);
962         mtime = LTIME_S(inode->i_mtime);
963         ctime = LTIME_S(inode->i_ctime);
964
965         cl_object_attr_lock(obj);
966         rc = cl_object_attr_get(env, obj, attr);
967         cl_object_attr_unlock(obj);
968
969         if (rc != 0)
970                 GOTO(out_size_unlock, rc);
971
972         if (atime < attr->cat_atime)
973                 atime = attr->cat_atime;
974
975         if (ctime < attr->cat_ctime)
976                 ctime = attr->cat_ctime;
977
978         if (mtime < attr->cat_mtime)
979                 mtime = attr->cat_mtime;
980
981         CDEBUG(D_VFSTRACE, DFID" updating i_size "LPU64"\n",
982                PFID(&lli->lli_fid), attr->cat_size);
983
984         i_size_write(inode, attr->cat_size);
985         inode->i_blocks = attr->cat_blocks;
986
987         LTIME_S(inode->i_atime) = atime;
988         LTIME_S(inode->i_mtime) = mtime;
989         LTIME_S(inode->i_ctime) = ctime;
990
991 out_size_unlock:
992         ll_inode_size_unlock(inode);
993
994         RETURN(rc);
995 }
996
997 static bool file_is_noatime(const struct file *file)
998 {
999         const struct vfsmount *mnt = file->f_path.mnt;
1000         const struct inode *inode = file->f_path.dentry->d_inode;
1001
1002         /* Adapted from file_accessed() and touch_atime().*/
1003         if (file->f_flags & O_NOATIME)
1004                 return true;
1005
1006         if (inode->i_flags & S_NOATIME)
1007                 return true;
1008
1009         if (IS_NOATIME(inode))
1010                 return true;
1011
1012         if (mnt->mnt_flags & (MNT_NOATIME | MNT_READONLY))
1013                 return true;
1014
1015         if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
1016                 return true;
1017
1018         if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
1019                 return true;
1020
1021         return false;
1022 }
1023
1024 static void ll_io_init(struct cl_io *io, const struct file *file, int write)
1025 {
1026         struct inode *inode = file->f_path.dentry->d_inode;
1027
1028         io->u.ci_rw.crw_nonblock = file->f_flags & O_NONBLOCK;
1029         if (write) {
1030                 io->u.ci_wr.wr_append = !!(file->f_flags & O_APPEND);
1031                 io->u.ci_wr.wr_sync = file->f_flags & O_SYNC ||
1032                                       file->f_flags & O_DIRECT ||
1033                                       IS_SYNC(inode);
1034         }
1035         io->ci_obj     = ll_i2info(inode)->lli_clob;
1036         io->ci_lockreq = CILR_MAYBE;
1037         if (ll_file_nolock(file)) {
1038                 io->ci_lockreq = CILR_NEVER;
1039                 io->ci_no_srvlock = 1;
1040         } else if (file->f_flags & O_APPEND) {
1041                 io->ci_lockreq = CILR_MANDATORY;
1042         }
1043
1044         io->ci_noatime = file_is_noatime(file);
1045 }
1046
1047 static ssize_t
1048 ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args,
1049                    struct file *file, enum cl_io_type iot,
1050                    loff_t *ppos, size_t count)
1051 {
1052         struct vvp_io           *vio = vvp_env_io(env);
1053         struct inode            *inode = file->f_path.dentry->d_inode;
1054         struct ll_inode_info    *lli = ll_i2info(inode);
1055         struct ll_file_data     *fd  = LUSTRE_FPRIVATE(file);
1056         struct cl_io            *io;
1057         ssize_t                 result = 0;
1058         int                     rc = 0;
1059         struct range_lock       range;
1060
1061         ENTRY;
1062
1063         CDEBUG(D_VFSTRACE, "file: %s, type: %d ppos: "LPU64", count: %zu\n",
1064                 file->f_path.dentry->d_name.name, iot, *ppos, count);
1065
1066 restart:
1067         io = vvp_env_thread_io(env);
1068         ll_io_init(io, file, iot == CIT_WRITE);
1069
1070         if (cl_io_rw_init(env, io, iot, *ppos, count) == 0) {
1071                 bool range_locked = false;
1072
1073                 if (file->f_flags & O_APPEND)
1074                         range_lock_init(&range, 0, LUSTRE_EOF);
1075                 else
1076                         range_lock_init(&range, *ppos, *ppos + count - 1);
1077
1078                 vio->vui_fd  = LUSTRE_FPRIVATE(file);
1079                 vio->vui_io_subtype = args->via_io_subtype;
1080
1081                 switch (vio->vui_io_subtype) {
1082                 case IO_NORMAL:
1083                         vio->vui_iter = args->u.normal.via_iter;
1084 #ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
1085                         vio->vui_tot_nrsegs = vio->vui_iter->nr_segs;
1086 #endif /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
1087                         vio->vui_iocb = args->u.normal.via_iocb;
1088                         /* Direct IO reads must also take range lock,
1089                          * or multiple reads will try to work on the same pages
1090                          * See LU-6227 for details. */
1091                         if (((iot == CIT_WRITE) ||
1092                             (iot == CIT_READ && (file->f_flags & O_DIRECT))) &&
1093                             !(vio->vui_fd->fd_flags & LL_FILE_GROUP_LOCKED)) {
1094                                 CDEBUG(D_VFSTRACE, "Range lock "RL_FMT"\n",
1095                                        RL_PARA(&range));
1096                                 rc = range_lock(&lli->lli_write_tree, &range);
1097                                 if (rc < 0)
1098                                         GOTO(out, rc);
1099
1100                                 range_locked = true;
1101                         }
1102                         break;
1103                 case IO_SPLICE:
1104                         vio->u.splice.vui_pipe = args->u.splice.via_pipe;
1105                         vio->u.splice.vui_flags = args->u.splice.via_flags;
1106                         break;
1107                 default:
1108                         CERROR("unknown IO subtype %u\n", vio->vui_io_subtype);
1109                         LBUG();
1110                 }
1111
1112                 ll_cl_add(file, env, io);
1113                 rc = cl_io_loop(env, io);
1114                 ll_cl_remove(file, env);
1115
1116                 if (range_locked) {
1117                         CDEBUG(D_VFSTRACE, "Range unlock "RL_FMT"\n",
1118                                RL_PARA(&range));
1119                         range_unlock(&lli->lli_write_tree, &range);
1120                 }
1121         } else {
1122                 /* cl_io_rw_init() handled IO */
1123                 rc = io->ci_result;
1124         }
1125
1126         if (io->ci_nob > 0) {
1127                 result += io->ci_nob;
1128                 count -= io->ci_nob;
1129                 *ppos = io->u.ci_wr.wr.crw_pos; /* for splice */
1130
1131                 /* prepare IO restart */
1132                 if (count > 0 && args->via_io_subtype == IO_NORMAL) {
1133                         args->u.normal.via_iter = vio->vui_iter;
1134 #ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
1135                         args->u.normal.via_iter->nr_segs = vio->vui_tot_nrsegs;
1136 #endif /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
1137                 }
1138         }
1139         GOTO(out, rc);
1140 out:
1141         cl_io_fini(env, io);
1142
1143         if ((rc == 0 || rc == -ENODATA) && count > 0 && io->ci_need_restart) {
1144                 CDEBUG(D_VFSTRACE,
1145                        "%s: restart %s from %lld, count:%zu, result: %zd\n",
1146                        file->f_path.dentry->d_name.name,
1147                        iot == CIT_READ ? "read" : "write",
1148                        *ppos, count, result);
1149                 goto restart;
1150         }
1151
1152         if (iot == CIT_READ) {
1153                 if (result > 0)
1154                         ll_stats_ops_tally(ll_i2sbi(inode),
1155                                            LPROC_LL_READ_BYTES, result);
1156         } else if (iot == CIT_WRITE) {
1157                 if (result > 0) {
1158                         ll_stats_ops_tally(ll_i2sbi(inode),
1159                                            LPROC_LL_WRITE_BYTES, result);
1160                         fd->fd_write_failed = false;
1161                 } else if (rc != -ERESTARTSYS) {
1162                         fd->fd_write_failed = true;
1163                 }
1164         }
1165
1166         CDEBUG(D_VFSTRACE, "iot: %d, result: %zd\n", iot, result);
1167
1168         return result > 0 ? result : rc;
1169 }
1170
1171 /*
1172  * Read from a file (through the page cache).
1173  */
1174 static ssize_t ll_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
1175 {
1176         struct vvp_io_args *args;
1177         struct lu_env *env;
1178         ssize_t result;
1179         int refcheck;
1180
1181         env = cl_env_get(&refcheck);
1182         if (IS_ERR(env))
1183                 return PTR_ERR(env);
1184
1185         args = ll_env_args(env, IO_NORMAL);
1186         args->u.normal.via_iter = to;
1187         args->u.normal.via_iocb = iocb;
1188
1189         result = ll_file_io_generic(env, args, iocb->ki_filp, CIT_READ,
1190                                     &iocb->ki_pos, iov_iter_count(to));
1191         cl_env_put(env, &refcheck);
1192         return result;
1193 }
1194
1195 /*
1196  * Write to a file (through the page cache).
1197  */
1198 static ssize_t ll_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1199 {
1200         struct vvp_io_args *args;
1201         struct lu_env *env;
1202         ssize_t result;
1203         int refcheck;
1204
1205         env = cl_env_get(&refcheck);
1206         if (IS_ERR(env))
1207                 return PTR_ERR(env);
1208
1209         args = ll_env_args(env, IO_NORMAL);
1210         args->u.normal.via_iter = from;
1211         args->u.normal.via_iocb = iocb;
1212
1213         result = ll_file_io_generic(env, args, iocb->ki_filp, CIT_WRITE,
1214                                     &iocb->ki_pos, iov_iter_count(from));
1215         cl_env_put(env, &refcheck);
1216         return result;
1217 }
1218
1219 #ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
1220 /*
1221  * XXX: exact copy from kernel code (__generic_file_aio_write_nolock)
1222  */
1223 static int ll_file_get_iov_count(const struct iovec *iov,
1224                                  unsigned long *nr_segs, size_t *count)
1225 {
1226         size_t cnt = 0;
1227         unsigned long seg;
1228
1229         for (seg = 0; seg < *nr_segs; seg++) {
1230                 const struct iovec *iv = &iov[seg];
1231
1232                 /*
1233                  * If any segment has a negative length, or the cumulative
1234                  * length ever wraps negative then return -EINVAL.
1235                  */
1236                 cnt += iv->iov_len;
1237                 if (unlikely((ssize_t)(cnt|iv->iov_len) < 0))
1238                         return -EINVAL;
1239                 if (access_ok(VERIFY_READ, iv->iov_base, iv->iov_len))
1240                         continue;
1241                 if (seg == 0)
1242                         return -EFAULT;
1243                 *nr_segs = seg;
1244                 cnt -= iv->iov_len;     /* This segment is no good */
1245                 break;
1246         }
1247         *count = cnt;
1248         return 0;
1249 }
1250
1251 static ssize_t ll_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
1252                                 unsigned long nr_segs, loff_t pos)
1253 {
1254         struct iovec *local_iov;
1255         struct iov_iter *to;
1256         size_t iov_count;
1257         ssize_t result;
1258         ENTRY;
1259
1260         result = ll_file_get_iov_count(iov, &nr_segs, &iov_count);
1261         if (result)
1262                 RETURN(result);
1263
1264         if (nr_segs == 1) {
1265                 struct lu_env *env;
1266                 int refcheck;
1267
1268                 env = cl_env_get(&refcheck);
1269                 if (IS_ERR(env))
1270                         RETURN(PTR_ERR(env));
1271
1272                 local_iov = &ll_env_info(env)->lti_local_iov;
1273                 *local_iov = *iov;
1274
1275                 cl_env_put(env, &refcheck);
1276         } else {
1277                 OBD_ALLOC(local_iov, sizeof(*iov) * nr_segs);
1278                 if (local_iov == NULL)
1279                         RETURN(-ENOMEM);
1280
1281                 memcpy(local_iov, iov, sizeof(*iov) * nr_segs);
1282         }
1283
1284         OBD_ALLOC_PTR(to);
1285         if (to == NULL) {
1286                 result = -ENOMEM;
1287                 goto out;
1288         }
1289 # ifdef HAVE_IOV_ITER_INIT_DIRECTION
1290         iov_iter_init(to, READ, local_iov, nr_segs, iov_count);
1291 # else /* !HAVE_IOV_ITER_INIT_DIRECTION */
1292         iov_iter_init(to, local_iov, nr_segs, iov_count, 0);
1293 # endif /* HAVE_IOV_ITER_INIT_DIRECTION */
1294
1295         result = ll_file_read_iter(iocb, to);
1296
1297         OBD_FREE_PTR(to);
1298 out:
1299         if (nr_segs > 1)
1300                 OBD_FREE(local_iov, sizeof(*iov) * nr_segs);
1301
1302         RETURN(result);
1303 }
1304
1305 static ssize_t ll_file_read(struct file *file, char __user *buf, size_t count,
1306                             loff_t *ppos)
1307 {
1308         struct lu_env *env;
1309         struct iovec   iov = { .iov_base = buf, .iov_len = count };
1310         struct kiocb  *kiocb;
1311         ssize_t        result;
1312         int            refcheck;
1313         ENTRY;
1314
1315         env = cl_env_get(&refcheck);
1316         if (IS_ERR(env))
1317                 RETURN(PTR_ERR(env));
1318
1319         kiocb = &ll_env_info(env)->lti_kiocb;
1320         init_sync_kiocb(kiocb, file);
1321         kiocb->ki_pos = *ppos;
1322 #ifdef HAVE_KIOCB_KI_LEFT
1323         kiocb->ki_left = count;
1324 #elif defined(HAVE_KI_NBYTES)
1325         kiocb->ki_nbytes = count;
1326 #endif
1327
1328         result = ll_file_aio_read(kiocb, &iov, 1, kiocb->ki_pos);
1329         *ppos = kiocb->ki_pos;
1330
1331         cl_env_put(env, &refcheck);
1332         RETURN(result);
1333 }
1334
1335 /*
1336  * Write to a file (through the page cache).
1337  * AIO stuff
1338  */
1339 static ssize_t ll_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
1340                                  unsigned long nr_segs, loff_t pos)
1341 {
1342         struct iovec *local_iov;
1343         struct iov_iter *from;
1344         size_t iov_count;
1345         ssize_t result;
1346         ENTRY;
1347
1348         result = ll_file_get_iov_count(iov, &nr_segs, &iov_count);
1349         if (result)
1350                 RETURN(result);
1351
1352         if (nr_segs == 1) {
1353                 struct lu_env *env;
1354                 int refcheck;
1355
1356                 env = cl_env_get(&refcheck);
1357                 if (IS_ERR(env))
1358                         RETURN(PTR_ERR(env));
1359
1360                 local_iov = &ll_env_info(env)->lti_local_iov;
1361                 *local_iov = *iov;
1362
1363                 cl_env_put(env, &refcheck);
1364         } else {
1365                 OBD_ALLOC(local_iov, sizeof(*iov) * nr_segs);
1366                 if (local_iov == NULL)
1367                         RETURN(-ENOMEM);
1368
1369                 memcpy(local_iov, iov, sizeof(*iov) * nr_segs);
1370         }
1371
1372         OBD_ALLOC_PTR(from);
1373         if (from == NULL) {
1374                 result = -ENOMEM;
1375                 goto out;
1376         }
1377 # ifdef HAVE_IOV_ITER_INIT_DIRECTION
1378         iov_iter_init(from, WRITE, local_iov, nr_segs, iov_count);
1379 # else /* !HAVE_IOV_ITER_INIT_DIRECTION */
1380         iov_iter_init(from, local_iov, nr_segs, iov_count, 0);
1381 # endif /* HAVE_IOV_ITER_INIT_DIRECTION */
1382
1383         result = ll_file_write_iter(iocb, from);
1384
1385         OBD_FREE_PTR(from);
1386 out:
1387         if (nr_segs > 1)
1388                 OBD_FREE(local_iov, sizeof(*iov) * nr_segs);
1389
1390         RETURN(result);
1391 }
1392
1393 static ssize_t ll_file_write(struct file *file, const char __user *buf,
1394                              size_t count, loff_t *ppos)
1395 {
1396         struct lu_env *env;
1397         struct iovec   iov = { .iov_base = (void __user *)buf,
1398                                .iov_len = count };
1399         struct kiocb  *kiocb;
1400         ssize_t        result;
1401         int            refcheck;
1402         ENTRY;
1403
1404         env = cl_env_get(&refcheck);
1405         if (IS_ERR(env))
1406                 RETURN(PTR_ERR(env));
1407
1408         kiocb = &ll_env_info(env)->lti_kiocb;
1409         init_sync_kiocb(kiocb, file);
1410         kiocb->ki_pos = *ppos;
1411 #ifdef HAVE_KIOCB_KI_LEFT
1412         kiocb->ki_left = count;
1413 #elif defined(HAVE_KI_NBYTES)
1414         kiocb->ki_nbytes = count;
1415 #endif
1416
1417         result = ll_file_aio_write(kiocb, &iov, 1, kiocb->ki_pos);
1418         *ppos = kiocb->ki_pos;
1419
1420         cl_env_put(env, &refcheck);
1421         RETURN(result);
1422 }
1423 #endif /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
1424
1425 /*
1426  * Send file content (through pagecache) somewhere with helper
1427  */
1428 static ssize_t ll_file_splice_read(struct file *in_file, loff_t *ppos,
1429                                    struct pipe_inode_info *pipe, size_t count,
1430                                    unsigned int flags)
1431 {
1432         struct lu_env      *env;
1433         struct vvp_io_args *args;
1434         ssize_t             result;
1435         int                 refcheck;
1436         ENTRY;
1437
1438         env = cl_env_get(&refcheck);
1439         if (IS_ERR(env))
1440                 RETURN(PTR_ERR(env));
1441
1442         args = ll_env_args(env, IO_SPLICE);
1443         args->u.splice.via_pipe = pipe;
1444         args->u.splice.via_flags = flags;
1445
1446         result = ll_file_io_generic(env, args, in_file, CIT_READ, ppos, count);
1447         cl_env_put(env, &refcheck);
1448         RETURN(result);
1449 }
1450
1451 int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
1452                              __u64  flags, struct lov_user_md *lum,
1453                              int lum_size)
1454 {
1455         struct lookup_intent oit = {
1456                 .it_op = IT_OPEN,
1457                 .it_flags = flags | MDS_OPEN_BY_FID,
1458         };
1459         int rc;
1460         ENTRY;
1461
1462         ll_inode_size_lock(inode);
1463         rc = ll_intent_file_open(file, lum, lum_size, &oit);
1464         if (rc < 0)
1465                 GOTO(out_unlock, rc);
1466
1467         ll_release_openhandle(file->f_path.dentry, &oit);
1468
1469 out_unlock:
1470         ll_inode_size_unlock(inode);
1471         ll_intent_release(&oit);
1472         cl_lov_delay_create_clear(&file->f_flags);
1473
1474         RETURN(rc);
1475 }
1476
1477 int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
1478                              struct lov_mds_md **lmmp, int *lmm_size,
1479                              struct ptlrpc_request **request)
1480 {
1481         struct ll_sb_info *sbi = ll_i2sbi(inode);
1482         struct mdt_body  *body;
1483         struct lov_mds_md *lmm = NULL;
1484         struct ptlrpc_request *req = NULL;
1485         struct md_op_data *op_data;
1486         int rc, lmmsize;
1487
1488         rc = ll_get_default_mdsize(sbi, &lmmsize);
1489         if (rc)
1490                 RETURN(rc);
1491
1492         op_data = ll_prep_md_op_data(NULL, inode, NULL, filename,
1493                                      strlen(filename), lmmsize,
1494                                      LUSTRE_OPC_ANY, NULL);
1495         if (IS_ERR(op_data))
1496                 RETURN(PTR_ERR(op_data));
1497
1498         op_data->op_valid = OBD_MD_FLEASIZE | OBD_MD_FLDIREA;
1499         rc = md_getattr_name(sbi->ll_md_exp, op_data, &req);
1500         ll_finish_md_op_data(op_data);
1501         if (rc < 0) {
1502                 CDEBUG(D_INFO, "md_getattr_name failed "
1503                        "on %s: rc %d\n", filename, rc);
1504                 GOTO(out, rc);
1505         }
1506
1507         body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
1508         LASSERT(body != NULL); /* checked by mdc_getattr_name */
1509
1510         lmmsize = body->mbo_eadatasize;
1511
1512         if (!(body->mbo_valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) ||
1513                         lmmsize == 0) {
1514                 GOTO(out, rc = -ENODATA);
1515         }
1516
1517         lmm = req_capsule_server_sized_get(&req->rq_pill, &RMF_MDT_MD, lmmsize);
1518         LASSERT(lmm != NULL);
1519
1520         if ((lmm->lmm_magic != cpu_to_le32(LOV_MAGIC_V1)) &&
1521             (lmm->lmm_magic != cpu_to_le32(LOV_MAGIC_V3))) {
1522                 GOTO(out, rc = -EPROTO);
1523         }
1524
1525         /*
1526          * This is coming from the MDS, so is probably in
1527          * little endian.  We convert it to host endian before
1528          * passing it to userspace.
1529          */
1530         if (LOV_MAGIC != cpu_to_le32(LOV_MAGIC)) {
1531                 int stripe_count;
1532
1533                 stripe_count = le16_to_cpu(lmm->lmm_stripe_count);
1534                 if (le32_to_cpu(lmm->lmm_pattern) & LOV_PATTERN_F_RELEASED)
1535                         stripe_count = 0;
1536
1537                 /* if function called for directory - we should
1538                  * avoid swab not existent lsm objects */
1539                 if (lmm->lmm_magic == cpu_to_le32(LOV_MAGIC_V1)) {
1540                         lustre_swab_lov_user_md_v1((struct lov_user_md_v1 *)lmm);
1541                         if (S_ISREG(body->mbo_mode))
1542                                 lustre_swab_lov_user_md_objects(
1543                                     ((struct lov_user_md_v1 *)lmm)->lmm_objects,
1544                                     stripe_count);
1545                 } else if (lmm->lmm_magic == cpu_to_le32(LOV_MAGIC_V3)) {
1546                         lustre_swab_lov_user_md_v3(
1547                                 (struct lov_user_md_v3 *)lmm);
1548                         if (S_ISREG(body->mbo_mode))
1549                                 lustre_swab_lov_user_md_objects(
1550                                  ((struct lov_user_md_v3 *)lmm)->lmm_objects,
1551                                  stripe_count);
1552                 }
1553         }
1554
1555 out:
1556         *lmmp = lmm;
1557         *lmm_size = lmmsize;
1558         *request = req;
1559         return rc;
1560 }
1561
1562 static int ll_lov_setea(struct inode *inode, struct file *file,
1563                             unsigned long arg)
1564 {
1565         __u64                    flags = MDS_OPEN_HAS_OBJS | FMODE_WRITE;
1566         struct lov_user_md      *lump;
1567         int                      lum_size = sizeof(struct lov_user_md) +
1568                                             sizeof(struct lov_user_ost_data);
1569         int                      rc;
1570         ENTRY;
1571
1572         if (!cfs_capable(CFS_CAP_SYS_ADMIN))
1573                 RETURN(-EPERM);
1574
1575         OBD_ALLOC_LARGE(lump, lum_size);
1576         if (lump == NULL)
1577                 RETURN(-ENOMEM);
1578
1579         if (copy_from_user(lump, (struct lov_user_md __user *)arg, lum_size)) {
1580                 OBD_FREE_LARGE(lump, lum_size);
1581                 RETURN(-EFAULT);
1582         }
1583
1584         rc = ll_lov_setstripe_ea_info(inode, file, flags, lump, lum_size);
1585
1586         OBD_FREE_LARGE(lump, lum_size);
1587         RETURN(rc);
1588 }
1589
1590 static int ll_file_getstripe(struct inode *inode,
1591                              struct lov_user_md __user *lum)
1592 {
1593         struct lu_env   *env;
1594         int             refcheck;
1595         int             rc;
1596         ENTRY;
1597
1598         env = cl_env_get(&refcheck);
1599         if (IS_ERR(env))
1600                 RETURN(PTR_ERR(env));
1601
1602         rc = cl_object_getstripe(env, ll_i2info(inode)->lli_clob, lum);
1603         cl_env_put(env, &refcheck);
1604         RETURN(rc);
1605 }
1606
1607 static int ll_lov_setstripe(struct inode *inode, struct file *file,
1608                             unsigned long arg)
1609 {
1610         struct lov_user_md __user *lum = (struct lov_user_md __user *)arg;
1611         struct lov_user_md        *klum;
1612         int                        lum_size, rc;
1613         __u64                      flags = FMODE_WRITE;
1614         ENTRY;
1615
1616         rc = ll_copy_user_md(lum, &klum);
1617         if (rc < 0)
1618                 RETURN(rc);
1619
1620         lum_size = rc;
1621         rc = ll_lov_setstripe_ea_info(inode, file, flags, klum, lum_size);
1622         if (rc == 0) {
1623                 __u32 gen;
1624
1625                 put_user(0, &lum->lmm_stripe_count);
1626
1627                 ll_layout_refresh(inode, &gen);
1628                 rc = ll_file_getstripe(inode, (struct lov_user_md __user *)arg);
1629         }
1630
1631         OBD_FREE(klum, lum_size);
1632         RETURN(rc);
1633 }
1634
1635 static int
1636 ll_get_grouplock(struct inode *inode, struct file *file, unsigned long arg)
1637 {
1638         struct ll_inode_info   *lli = ll_i2info(inode);
1639         struct ll_file_data    *fd = LUSTRE_FPRIVATE(file);
1640         struct ll_grouplock     grouplock;
1641         int                     rc;
1642         ENTRY;
1643
1644         if (arg == 0) {
1645                 CWARN("group id for group lock must not be 0\n");
1646                 RETURN(-EINVAL);
1647         }
1648
1649         if (ll_file_nolock(file))
1650                 RETURN(-EOPNOTSUPP);
1651
1652         spin_lock(&lli->lli_lock);
1653         if (fd->fd_flags & LL_FILE_GROUP_LOCKED) {
1654                 CWARN("group lock already existed with gid %lu\n",
1655                       fd->fd_grouplock.lg_gid);
1656                 spin_unlock(&lli->lli_lock);
1657                 RETURN(-EINVAL);
1658         }
1659         LASSERT(fd->fd_grouplock.lg_lock == NULL);
1660         spin_unlock(&lli->lli_lock);
1661
1662         rc = cl_get_grouplock(ll_i2info(inode)->lli_clob,
1663                               arg, (file->f_flags & O_NONBLOCK), &grouplock);
1664         if (rc)
1665                 RETURN(rc);
1666
1667         spin_lock(&lli->lli_lock);
1668         if (fd->fd_flags & LL_FILE_GROUP_LOCKED) {
1669                 spin_unlock(&lli->lli_lock);
1670                 CERROR("another thread just won the race\n");
1671                 cl_put_grouplock(&grouplock);
1672                 RETURN(-EINVAL);
1673         }
1674
1675         fd->fd_flags |= LL_FILE_GROUP_LOCKED;
1676         fd->fd_grouplock = grouplock;
1677         spin_unlock(&lli->lli_lock);
1678
1679         CDEBUG(D_INFO, "group lock %lu obtained\n", arg);
1680         RETURN(0);
1681 }
1682
1683 static int ll_put_grouplock(struct inode *inode, struct file *file,
1684                             unsigned long arg)
1685 {
1686         struct ll_inode_info   *lli = ll_i2info(inode);
1687         struct ll_file_data    *fd = LUSTRE_FPRIVATE(file);
1688         struct ll_grouplock     grouplock;
1689         ENTRY;
1690
1691         spin_lock(&lli->lli_lock);
1692         if (!(fd->fd_flags & LL_FILE_GROUP_LOCKED)) {
1693                 spin_unlock(&lli->lli_lock);
1694                 CWARN("no group lock held\n");
1695                 RETURN(-EINVAL);
1696         }
1697
1698         LASSERT(fd->fd_grouplock.lg_lock != NULL);
1699
1700         if (fd->fd_grouplock.lg_gid != arg) {
1701                 CWARN("group lock %lu doesn't match current id %lu\n",
1702                       arg, fd->fd_grouplock.lg_gid);
1703                 spin_unlock(&lli->lli_lock);
1704                 RETURN(-EINVAL);
1705         }
1706
1707         grouplock = fd->fd_grouplock;
1708         memset(&fd->fd_grouplock, 0, sizeof(fd->fd_grouplock));
1709         fd->fd_flags &= ~LL_FILE_GROUP_LOCKED;
1710         spin_unlock(&lli->lli_lock);
1711
1712         cl_put_grouplock(&grouplock);
1713         CDEBUG(D_INFO, "group lock %lu released\n", arg);
1714         RETURN(0);
1715 }
1716
1717 /**
1718  * Close inode open handle
1719  *
1720  * \param dentry [in]     dentry which contains the inode
1721  * \param it     [in,out] intent which contains open info and result
1722  *
1723  * \retval 0     success
1724  * \retval <0    failure
1725  */
1726 int ll_release_openhandle(struct dentry *dentry, struct lookup_intent *it)
1727 {
1728         struct inode *inode = dentry->d_inode;
1729         struct obd_client_handle *och;
1730         int rc;
1731         ENTRY;
1732
1733         LASSERT(inode);
1734
1735         /* Root ? Do nothing. */
1736         if (dentry->d_inode->i_sb->s_root == dentry)
1737                 RETURN(0);
1738
1739         /* No open handle to close? Move away */
1740         if (!it_disposition(it, DISP_OPEN_OPEN))
1741                 RETURN(0);
1742
1743         LASSERT(it_open_error(DISP_OPEN_OPEN, it) == 0);
1744
1745         OBD_ALLOC(och, sizeof(*och));
1746         if (!och)
1747                 GOTO(out, rc = -ENOMEM);
1748
1749         ll_och_fill(ll_i2sbi(inode)->ll_md_exp, it, och);
1750
1751         rc = ll_close_inode_openhandle(ll_i2sbi(inode)->ll_md_exp,
1752                                        och, inode, 0, NULL);
1753 out:
1754         /* this one is in place of ll_file_open */
1755         if (it_disposition(it, DISP_ENQ_OPEN_REF)) {
1756                 ptlrpc_req_finished(it->d.lustre.it_data);
1757                 it_clear_disposition(it, DISP_ENQ_OPEN_REF);
1758         }
1759         RETURN(rc);
1760 }
1761
1762 /**
1763  * Get size for inode for which FIEMAP mapping is requested.
1764  * Make the FIEMAP get_info call and returns the result.
1765  * \param fiemap        kernel buffer to hold extens
1766  * \param num_bytes     kernel buffer size
1767  */
1768 static int ll_do_fiemap(struct inode *inode, struct fiemap *fiemap,
1769                         size_t num_bytes)
1770 {
1771         struct lu_env                   *env;
1772         int                             refcheck;
1773         int                             rc = 0;
1774         struct ll_fiemap_info_key       fmkey = { .lfik_name = KEY_FIEMAP, };
1775         ENTRY;
1776
1777         /* Checks for fiemap flags */
1778         if (fiemap->fm_flags & ~LUSTRE_FIEMAP_FLAGS_COMPAT) {
1779                 fiemap->fm_flags &= ~LUSTRE_FIEMAP_FLAGS_COMPAT;
1780                 return -EBADR;
1781         }
1782
1783         /* Check for FIEMAP_FLAG_SYNC */
1784         if (fiemap->fm_flags & FIEMAP_FLAG_SYNC) {
1785                 rc = filemap_fdatawrite(inode->i_mapping);
1786                 if (rc)
1787                         return rc;
1788         }
1789
1790         env = cl_env_get(&refcheck);
1791         if (IS_ERR(env))
1792                 RETURN(PTR_ERR(env));
1793
1794         if (i_size_read(inode) == 0) {
1795                 rc = ll_glimpse_size(inode);
1796                 if (rc)
1797                         GOTO(out, rc);
1798         }
1799
1800         fmkey.lfik_oa.o_valid = OBD_MD_FLID | OBD_MD_FLGROUP;
1801         obdo_from_inode(&fmkey.lfik_oa, inode, OBD_MD_FLSIZE);
1802         obdo_set_parent_fid(&fmkey.lfik_oa, &ll_i2info(inode)->lli_fid);
1803
1804         /* If filesize is 0, then there would be no objects for mapping */
1805         if (fmkey.lfik_oa.o_size == 0) {
1806                 fiemap->fm_mapped_extents = 0;
1807                 GOTO(out, rc = 0);
1808         }
1809
1810         fmkey.lfik_fiemap = *fiemap;
1811
1812         rc = cl_object_fiemap(env, ll_i2info(inode)->lli_clob,
1813                               &fmkey, fiemap, &num_bytes);
1814 out:
1815         cl_env_put(env, &refcheck);
1816         RETURN(rc);
1817 }
1818
1819 int ll_fid2path(struct inode *inode, void __user *arg)
1820 {
1821         struct obd_export       *exp = ll_i2mdexp(inode);
1822         const struct getinfo_fid2path __user *gfin = arg;
1823         __u32                    pathlen;
1824         struct getinfo_fid2path *gfout;
1825         size_t                   outsize;
1826         int                      rc;
1827
1828         ENTRY;
1829
1830         if (!cfs_capable(CFS_CAP_DAC_READ_SEARCH) &&
1831             !(ll_i2sbi(inode)->ll_flags & LL_SBI_USER_FID2PATH))
1832                 RETURN(-EPERM);
1833
1834         /* Only need to get the buflen */
1835         if (get_user(pathlen, &gfin->gf_pathlen))
1836                 RETURN(-EFAULT);
1837
1838         if (pathlen > PATH_MAX)
1839                 RETURN(-EINVAL);
1840
1841         outsize = sizeof(*gfout) + pathlen;
1842         OBD_ALLOC(gfout, outsize);
1843         if (gfout == NULL)
1844                 RETURN(-ENOMEM);
1845
1846         if (copy_from_user(gfout, arg, sizeof(*gfout)))
1847                 GOTO(gf_free, rc = -EFAULT);
1848
1849         /* Call mdc_iocontrol */
1850         rc = obd_iocontrol(OBD_IOC_FID2PATH, exp, outsize, gfout, NULL);
1851         if (rc != 0)
1852                 GOTO(gf_free, rc);
1853
1854         if (copy_to_user(arg, gfout, outsize))
1855                 rc = -EFAULT;
1856
1857 gf_free:
1858         OBD_FREE(gfout, outsize);
1859         RETURN(rc);
1860 }
1861
1862 /*
1863  * Read the data_version for inode.
1864  *
1865  * This value is computed using stripe object version on OST.
1866  * Version is computed using server side locking.
1867  *
1868  * @param flags if do sync on the OST side;
1869  *              0: no sync
1870  *              LL_DV_RD_FLUSH: flush dirty pages, LCK_PR on OSTs
1871  *              LL_DV_WR_FLUSH: drop all caching pages, LCK_PW on OSTs
1872  */
1873 int ll_data_version(struct inode *inode, __u64 *data_version, int flags)
1874 {
1875         struct cl_object *obj = ll_i2info(inode)->lli_clob;
1876         struct lu_env *env;
1877         struct cl_io *io;
1878         int refcheck;
1879         int result;
1880
1881         ENTRY;
1882
1883         /* If no file object initialized, we consider its version is 0. */
1884         if (obj == NULL) {
1885                 *data_version = 0;
1886                 RETURN(0);
1887         }
1888
1889         env = cl_env_get(&refcheck);
1890         if (IS_ERR(env))
1891                 RETURN(PTR_ERR(env));
1892
1893         io = vvp_env_thread_io(env);
1894         io->ci_obj = obj;
1895         io->u.ci_data_version.dv_data_version = 0;
1896         io->u.ci_data_version.dv_flags = flags;
1897
1898 restart:
1899         if (cl_io_init(env, io, CIT_DATA_VERSION, io->ci_obj) == 0)
1900                 result = cl_io_loop(env, io);
1901         else
1902                 result = io->ci_result;
1903
1904         *data_version = io->u.ci_data_version.dv_data_version;
1905
1906         cl_io_fini(env, io);
1907
1908         if (unlikely(io->ci_need_restart))
1909                 goto restart;
1910
1911         cl_env_put(env, &refcheck);
1912
1913         RETURN(result);
1914 }
1915
1916 /*
1917  * Trigger a HSM release request for the provided inode.
1918  */
1919 int ll_hsm_release(struct inode *inode)
1920 {
1921         struct cl_env_nest nest;
1922         struct lu_env *env;
1923         struct obd_client_handle *och = NULL;
1924         __u64 data_version = 0;
1925         int rc;
1926         ENTRY;
1927
1928         CDEBUG(D_INODE, "%s: Releasing file "DFID".\n",
1929                ll_get_fsname(inode->i_sb, NULL, 0),
1930                PFID(&ll_i2info(inode)->lli_fid));
1931
1932         och = ll_lease_open(inode, NULL, FMODE_WRITE, MDS_OPEN_RELEASE);
1933         if (IS_ERR(och))
1934                 GOTO(out, rc = PTR_ERR(och));
1935
1936         /* Grab latest data_version and [am]time values */
1937         rc = ll_data_version(inode, &data_version, LL_DV_WR_FLUSH);
1938         if (rc != 0)
1939                 GOTO(out, rc);
1940
1941         env = cl_env_nested_get(&nest);
1942         if (IS_ERR(env))
1943                 GOTO(out, rc = PTR_ERR(env));
1944
1945         ll_merge_attr(env, inode);
1946         cl_env_nested_put(&nest, env);
1947
1948         /* Release the file.
1949          * NB: lease lock handle is released in mdc_hsm_release_pack() because
1950          * we still need it to pack l_remote_handle to MDT. */
1951         rc = ll_close_inode_openhandle(ll_i2sbi(inode)->ll_md_exp, och, inode,
1952                                        MDS_HSM_RELEASE, &data_version);
1953         och = NULL;
1954
1955         EXIT;
1956 out:
1957         if (och != NULL && !IS_ERR(och)) /* close the file */
1958                 ll_lease_close(och, inode, NULL);
1959
1960         return rc;
1961 }
1962
1963 struct ll_swap_stack {
1964         __u64                    dv1;
1965         __u64                    dv2;
1966         struct inode            *inode1;
1967         struct inode            *inode2;
1968         bool                     check_dv1;
1969         bool                     check_dv2;
1970 };
1971
1972 static int ll_swap_layouts(struct file *file1, struct file *file2,
1973                            struct lustre_swap_layouts *lsl)
1974 {
1975         struct mdc_swap_layouts  msl;
1976         struct md_op_data       *op_data;
1977         __u32                    gid;
1978         __u64                    dv;
1979         struct ll_swap_stack    *llss = NULL;
1980         int                      rc;
1981
1982         OBD_ALLOC_PTR(llss);
1983         if (llss == NULL)
1984                 RETURN(-ENOMEM);
1985
1986         llss->inode1 = file1->f_path.dentry->d_inode;
1987         llss->inode2 = file2->f_path.dentry->d_inode;
1988
1989         rc = ll_check_swap_layouts_validity(llss->inode1, llss->inode2);
1990         if (rc < 0)
1991                 GOTO(free, rc);
1992
1993         /* we use 2 bool because it is easier to swap than 2 bits */
1994         if (lsl->sl_flags & SWAP_LAYOUTS_CHECK_DV1)
1995                 llss->check_dv1 = true;
1996
1997         if (lsl->sl_flags & SWAP_LAYOUTS_CHECK_DV2)
1998                 llss->check_dv2 = true;
1999
2000         /* we cannot use lsl->sl_dvX directly because we may swap them */
2001         llss->dv1 = lsl->sl_dv1;
2002         llss->dv2 = lsl->sl_dv2;
2003
2004         rc = lu_fid_cmp(ll_inode2fid(llss->inode1), ll_inode2fid(llss->inode2));
2005         if (rc == 0) /* same file, done! */
2006                 GOTO(free, rc);
2007
2008         if (rc < 0) { /* sequentialize it */
2009                 swap(llss->inode1, llss->inode2);
2010                 swap(file1, file2);
2011                 swap(llss->dv1, llss->dv2);
2012                 swap(llss->check_dv1, llss->check_dv2);
2013         }
2014
2015         gid = lsl->sl_gid;
2016         if (gid != 0) { /* application asks to flush dirty cache */
2017                 rc = ll_get_grouplock(llss->inode1, file1, gid);
2018                 if (rc < 0)
2019                         GOTO(free, rc);
2020
2021                 rc = ll_get_grouplock(llss->inode2, file2, gid);
2022                 if (rc < 0) {
2023                         ll_put_grouplock(llss->inode1, file1, gid);
2024                         GOTO(free, rc);
2025                 }
2026         }
2027
2028         /* ultimate check, before swaping the layouts we check if
2029          * dataversion has changed (if requested) */
2030         if (llss->check_dv1) {
2031                 rc = ll_data_version(llss->inode1, &dv, 0);
2032                 if (rc)
2033                         GOTO(putgl, rc);
2034                 if (dv != llss->dv1)
2035                         GOTO(putgl, rc = -EAGAIN);
2036         }
2037
2038         if (llss->check_dv2) {
2039                 rc = ll_data_version(llss->inode2, &dv, 0);
2040                 if (rc)
2041                         GOTO(putgl, rc);
2042                 if (dv != llss->dv2)
2043                         GOTO(putgl, rc = -EAGAIN);
2044         }
2045
2046         /* struct md_op_data is used to send the swap args to the mdt
2047          * only flags is missing, so we use struct mdc_swap_layouts
2048          * through the md_op_data->op_data */
2049         /* flags from user space have to be converted before they are send to
2050          * server, no flag is sent today, they are only used on the client */
2051         msl.msl_flags = 0;
2052         rc = -ENOMEM;
2053         op_data = ll_prep_md_op_data(NULL, llss->inode1, llss->inode2, NULL, 0,
2054                                      0, LUSTRE_OPC_ANY, &msl);
2055         if (IS_ERR(op_data))
2056                 GOTO(free, rc = PTR_ERR(op_data));
2057
2058         rc = obd_iocontrol(LL_IOC_LOV_SWAP_LAYOUTS, ll_i2mdexp(llss->inode1),
2059                            sizeof(*op_data), op_data, NULL);
2060         ll_finish_md_op_data(op_data);
2061
2062         if (rc < 0)
2063                 GOTO(putgl, rc);
2064
2065 putgl:
2066         if (gid != 0) {
2067                 ll_put_grouplock(llss->inode2, file2, gid);
2068                 ll_put_grouplock(llss->inode1, file1, gid);
2069         }
2070
2071 free:
2072         if (llss != NULL)
2073                 OBD_FREE_PTR(llss);
2074
2075         RETURN(rc);
2076 }
2077
2078 int ll_hsm_state_set(struct inode *inode, struct hsm_state_set *hss)
2079 {
2080         struct md_op_data       *op_data;
2081         int                      rc;
2082         ENTRY;
2083
2084         /* Detect out-of range masks */
2085         if ((hss->hss_setmask | hss->hss_clearmask) & ~HSM_FLAGS_MASK)
2086                 RETURN(-EINVAL);
2087
2088         /* Non-root users are forbidden to set or clear flags which are
2089          * NOT defined in HSM_USER_MASK. */
2090         if (((hss->hss_setmask | hss->hss_clearmask) & ~HSM_USER_MASK) &&
2091             !cfs_capable(CFS_CAP_SYS_ADMIN))
2092                 RETURN(-EPERM);
2093
2094         /* Detect out-of range archive id */
2095         if ((hss->hss_valid & HSS_ARCHIVE_ID) &&
2096             (hss->hss_archive_id > LL_HSM_MAX_ARCHIVE))
2097                 RETURN(-EINVAL);
2098
2099         op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
2100                                      LUSTRE_OPC_ANY, hss);
2101         if (IS_ERR(op_data))
2102                 RETURN(PTR_ERR(op_data));
2103
2104         rc = obd_iocontrol(LL_IOC_HSM_STATE_SET, ll_i2mdexp(inode),
2105                            sizeof(*op_data), op_data, NULL);
2106
2107         ll_finish_md_op_data(op_data);
2108
2109         RETURN(rc);
2110 }
2111
2112 static int ll_hsm_import(struct inode *inode, struct file *file,
2113                          struct hsm_user_import *hui)
2114 {
2115         struct hsm_state_set    *hss = NULL;
2116         struct iattr            *attr = NULL;
2117         int                      rc;
2118         ENTRY;
2119
2120         if (!S_ISREG(inode->i_mode))
2121                 RETURN(-EINVAL);
2122
2123         /* set HSM flags */
2124         OBD_ALLOC_PTR(hss);
2125         if (hss == NULL)
2126                 GOTO(out, rc = -ENOMEM);
2127
2128         hss->hss_valid = HSS_SETMASK | HSS_ARCHIVE_ID;
2129         hss->hss_archive_id = hui->hui_archive_id;
2130         hss->hss_setmask = HS_ARCHIVED | HS_EXISTS | HS_RELEASED;
2131         rc = ll_hsm_state_set(inode, hss);
2132         if (rc != 0)
2133                 GOTO(out, rc);
2134
2135         OBD_ALLOC_PTR(attr);
2136         if (attr == NULL)
2137                 GOTO(out, rc = -ENOMEM);
2138
2139         attr->ia_mode = hui->hui_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
2140         attr->ia_mode |= S_IFREG;
2141         attr->ia_uid = make_kuid(&init_user_ns, hui->hui_uid);
2142         attr->ia_gid = make_kgid(&init_user_ns, hui->hui_gid);
2143         attr->ia_size = hui->hui_size;
2144         attr->ia_mtime.tv_sec = hui->hui_mtime;
2145         attr->ia_mtime.tv_nsec = hui->hui_mtime_ns;
2146         attr->ia_atime.tv_sec = hui->hui_atime;
2147         attr->ia_atime.tv_nsec = hui->hui_atime_ns;
2148
2149         attr->ia_valid = ATTR_SIZE | ATTR_MODE | ATTR_FORCE |
2150                          ATTR_UID | ATTR_GID |
2151                          ATTR_MTIME | ATTR_MTIME_SET |
2152                          ATTR_ATIME | ATTR_ATIME_SET;
2153
2154         mutex_lock(&inode->i_mutex);
2155
2156         rc = ll_setattr_raw(file->f_path.dentry, attr, true);
2157         if (rc == -ENODATA)
2158                 rc = 0;
2159
2160         mutex_unlock(&inode->i_mutex);
2161
2162 out:
2163         if (hss != NULL)
2164                 OBD_FREE_PTR(hss);
2165
2166         if (attr != NULL)
2167                 OBD_FREE_PTR(attr);
2168
2169         RETURN(rc);
2170 }
2171
2172 static inline long ll_lease_type_from_fmode(fmode_t fmode)
2173 {
2174         return ((fmode & FMODE_READ) ? LL_LEASE_RDLCK : 0) |
2175                ((fmode & FMODE_WRITE) ? LL_LEASE_WRLCK : 0);
2176 }
2177
2178 static long
2179 ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2180 {
2181         struct inode            *inode = file->f_path.dentry->d_inode;
2182         struct ll_file_data     *fd = LUSTRE_FPRIVATE(file);
2183         int                      flags, rc;
2184         ENTRY;
2185
2186         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), cmd=%x\n",
2187                PFID(ll_inode2fid(inode)), inode, cmd);
2188         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_IOCTL, 1);
2189
2190         /* asm-ppc{,64} declares TCGETS, et. al. as type 't' not 'T' */
2191         if (_IOC_TYPE(cmd) == 'T' || _IOC_TYPE(cmd) == 't') /* tty ioctls */
2192                 RETURN(-ENOTTY);
2193
2194         switch(cmd) {
2195         case LL_IOC_GETFLAGS:
2196                 /* Get the current value of the file flags */
2197                 return put_user(fd->fd_flags, (int __user *)arg);
2198         case LL_IOC_SETFLAGS:
2199         case LL_IOC_CLRFLAGS:
2200                 /* Set or clear specific file flags */
2201                 /* XXX This probably needs checks to ensure the flags are
2202                  *     not abused, and to handle any flag side effects.
2203                  */
2204                 if (get_user(flags, (int __user *) arg))
2205                         RETURN(-EFAULT);
2206
2207                 if (cmd == LL_IOC_SETFLAGS) {
2208                         if ((flags & LL_FILE_IGNORE_LOCK) &&
2209                             !(file->f_flags & O_DIRECT)) {
2210                                 CERROR("%s: unable to disable locking on "
2211                                        "non-O_DIRECT file\n", current->comm);
2212                                 RETURN(-EINVAL);
2213                         }
2214
2215                         fd->fd_flags |= flags;
2216                 } else {
2217                         fd->fd_flags &= ~flags;
2218                 }
2219                 RETURN(0);
2220         case LL_IOC_LOV_SETSTRIPE:
2221                 RETURN(ll_lov_setstripe(inode, file, arg));
2222         case LL_IOC_LOV_SETEA:
2223                 RETURN(ll_lov_setea(inode, file, arg));
2224         case LL_IOC_LOV_SWAP_LAYOUTS: {
2225                 struct file *file2;
2226                 struct lustre_swap_layouts lsl;
2227
2228                 if (copy_from_user(&lsl, (char __user *)arg,
2229                                        sizeof(struct lustre_swap_layouts)))
2230                         RETURN(-EFAULT);
2231
2232                 if ((file->f_flags & O_ACCMODE) == O_RDONLY)
2233                         RETURN(-EPERM);
2234
2235                 file2 = fget(lsl.sl_fd);
2236                 if (file2 == NULL)
2237                         RETURN(-EBADF);
2238
2239                 /* O_WRONLY or O_RDWR */
2240                 if ((file2->f_flags & O_ACCMODE) == O_RDONLY)
2241                         GOTO(out, rc = -EPERM);
2242
2243                 if (lsl.sl_flags & SWAP_LAYOUTS_CLOSE) {
2244                         struct inode                    *inode2;
2245                         struct ll_inode_info            *lli;
2246                         struct obd_client_handle        *och = NULL;
2247
2248                         if (lsl.sl_flags != SWAP_LAYOUTS_CLOSE)
2249                                 GOTO(out, rc = -EINVAL);
2250
2251                         lli = ll_i2info(inode);
2252                         mutex_lock(&lli->lli_och_mutex);
2253                         if (fd->fd_lease_och != NULL) {
2254                                 och = fd->fd_lease_och;
2255                                 fd->fd_lease_och = NULL;
2256                         }
2257                         mutex_unlock(&lli->lli_och_mutex);
2258                         if (och == NULL)
2259                                 GOTO(out, rc = -ENOLCK);
2260                         inode2 = file2->f_path.dentry->d_inode;
2261                         rc = ll_swap_layouts_close(och, inode, inode2);
2262                 } else {
2263                         rc = ll_swap_layouts(file, file2, &lsl);
2264                 }
2265 out:
2266                 fput(file2);
2267                 RETURN(rc);
2268         }
2269         case LL_IOC_LOV_GETSTRIPE:
2270                 RETURN(ll_file_getstripe(inode,
2271                                          (struct lov_user_md __user *)arg));
2272         case FSFILT_IOC_GETFLAGS:
2273         case FSFILT_IOC_SETFLAGS:
2274                 RETURN(ll_iocontrol(inode, file, cmd, arg));
2275         case FSFILT_IOC_GETVERSION_OLD:
2276         case FSFILT_IOC_GETVERSION:
2277                 RETURN(put_user(inode->i_generation, (int __user *)arg));
2278         case LL_IOC_GROUP_LOCK:
2279                 RETURN(ll_get_grouplock(inode, file, arg));
2280         case LL_IOC_GROUP_UNLOCK:
2281                 RETURN(ll_put_grouplock(inode, file, arg));
2282         case IOC_OBD_STATFS:
2283                 RETURN(ll_obd_statfs(inode, (void __user *)arg));
2284
2285         /* We need to special case any other ioctls we want to handle,
2286          * to send them to the MDS/OST as appropriate and to properly
2287          * network encode the arg field.
2288         case FSFILT_IOC_SETVERSION_OLD:
2289         case FSFILT_IOC_SETVERSION:
2290         */
2291         case LL_IOC_FLUSHCTX:
2292                 RETURN(ll_flush_ctx(inode));
2293         case LL_IOC_PATH2FID: {
2294                 if (copy_to_user((void __user *)arg, ll_inode2fid(inode),
2295                                  sizeof(struct lu_fid)))
2296                         RETURN(-EFAULT);
2297
2298                 RETURN(0);
2299         }
2300         case LL_IOC_GETPARENT:
2301                 RETURN(ll_getparent(file, (struct getparent __user *)arg));
2302
2303         case OBD_IOC_FID2PATH:
2304                 RETURN(ll_fid2path(inode, (void __user *)arg));
2305         case LL_IOC_DATA_VERSION: {
2306                 struct ioc_data_version idv;
2307                 int rc;
2308
2309                 if (copy_from_user(&idv, (char __user *)arg, sizeof(idv)))
2310                         RETURN(-EFAULT);
2311
2312                 idv.idv_flags &= LL_DV_RD_FLUSH | LL_DV_WR_FLUSH;
2313                 rc = ll_data_version(inode, &idv.idv_version, idv.idv_flags);
2314
2315                 if (rc == 0 &&
2316                     copy_to_user((char __user *)arg, &idv, sizeof(idv)))
2317                         RETURN(-EFAULT);
2318
2319                 RETURN(rc);
2320         }
2321
2322         case LL_IOC_GET_MDTIDX: {
2323                 int mdtidx;
2324
2325                 mdtidx = ll_get_mdt_idx(inode);
2326                 if (mdtidx < 0)
2327                         RETURN(mdtidx);
2328
2329                 if (put_user((int)mdtidx, (int __user *)arg))
2330                         RETURN(-EFAULT);
2331
2332                 RETURN(0);
2333         }
2334         case OBD_IOC_GETDTNAME:
2335         case OBD_IOC_GETMDNAME:
2336                 RETURN(ll_get_obd_name(inode, cmd, arg));
2337         case LL_IOC_HSM_STATE_GET: {
2338                 struct md_op_data       *op_data;
2339                 struct hsm_user_state   *hus;
2340                 int                      rc;
2341
2342                 OBD_ALLOC_PTR(hus);
2343                 if (hus == NULL)
2344                         RETURN(-ENOMEM);
2345
2346                 op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
2347                                              LUSTRE_OPC_ANY, hus);
2348                 if (IS_ERR(op_data)) {
2349                         OBD_FREE_PTR(hus);
2350                         RETURN(PTR_ERR(op_data));
2351                 }
2352
2353                 rc = obd_iocontrol(cmd, ll_i2mdexp(inode), sizeof(*op_data),
2354                                    op_data, NULL);
2355
2356                 if (copy_to_user((void __user *)arg, hus, sizeof(*hus)))
2357                         rc = -EFAULT;
2358
2359                 ll_finish_md_op_data(op_data);
2360                 OBD_FREE_PTR(hus);
2361                 RETURN(rc);
2362         }
2363         case LL_IOC_HSM_STATE_SET: {
2364                 struct hsm_state_set    *hss;
2365                 int                      rc;
2366
2367                 OBD_ALLOC_PTR(hss);
2368                 if (hss == NULL)
2369                         RETURN(-ENOMEM);
2370
2371                 if (copy_from_user(hss, (char __user *)arg, sizeof(*hss))) {
2372                         OBD_FREE_PTR(hss);
2373                         RETURN(-EFAULT);
2374                 }
2375
2376                 rc = ll_hsm_state_set(inode, hss);
2377
2378                 OBD_FREE_PTR(hss);
2379                 RETURN(rc);
2380         }
2381         case LL_IOC_HSM_ACTION: {
2382                 struct md_op_data               *op_data;
2383                 struct hsm_current_action       *hca;
2384                 int                              rc;
2385
2386                 OBD_ALLOC_PTR(hca);
2387                 if (hca == NULL)
2388                         RETURN(-ENOMEM);
2389
2390                 op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
2391                                              LUSTRE_OPC_ANY, hca);
2392                 if (IS_ERR(op_data)) {
2393                         OBD_FREE_PTR(hca);
2394                         RETURN(PTR_ERR(op_data));
2395                 }
2396
2397                 rc = obd_iocontrol(cmd, ll_i2mdexp(inode), sizeof(*op_data),
2398                                    op_data, NULL);
2399
2400                 if (copy_to_user((char __user *)arg, hca, sizeof(*hca)))
2401                         rc = -EFAULT;
2402
2403                 ll_finish_md_op_data(op_data);
2404                 OBD_FREE_PTR(hca);
2405                 RETURN(rc);
2406         }
2407         case LL_IOC_SET_LEASE: {
2408                 struct ll_inode_info *lli = ll_i2info(inode);
2409                 struct obd_client_handle *och = NULL;
2410                 bool lease_broken;
2411                 fmode_t fmode;
2412
2413                 switch (arg) {
2414                 case LL_LEASE_WRLCK:
2415                         if (!(file->f_mode & FMODE_WRITE))
2416                                 RETURN(-EPERM);
2417                         fmode = FMODE_WRITE;
2418                         break;
2419                 case LL_LEASE_RDLCK:
2420                         if (!(file->f_mode & FMODE_READ))
2421                                 RETURN(-EPERM);
2422                         fmode = FMODE_READ;
2423                         break;
2424                 case LL_LEASE_UNLCK:
2425                         mutex_lock(&lli->lli_och_mutex);
2426                         if (fd->fd_lease_och != NULL) {
2427                                 och = fd->fd_lease_och;
2428                                 fd->fd_lease_och = NULL;
2429                         }
2430                         mutex_unlock(&lli->lli_och_mutex);
2431
2432                         if (och == NULL)
2433                                 RETURN(-ENOLCK);
2434
2435                         fmode = och->och_flags;
2436                         rc = ll_lease_close(och, inode, &lease_broken);
2437                         if (rc < 0)
2438                                 RETURN(rc);
2439
2440                         if (lease_broken)
2441                                 fmode = 0;
2442
2443                         RETURN(ll_lease_type_from_fmode(fmode));
2444                 default:
2445                         RETURN(-EINVAL);
2446                 }
2447
2448                 CDEBUG(D_INODE, "Set lease with mode %u\n", fmode);
2449
2450                 /* apply for lease */
2451                 och = ll_lease_open(inode, file, fmode, 0);
2452                 if (IS_ERR(och))
2453                         RETURN(PTR_ERR(och));
2454
2455                 rc = 0;
2456                 mutex_lock(&lli->lli_och_mutex);
2457                 if (fd->fd_lease_och == NULL) {
2458                         fd->fd_lease_och = och;
2459                         och = NULL;
2460                 }
2461                 mutex_unlock(&lli->lli_och_mutex);
2462                 if (och != NULL) {
2463                         /* impossible now that only excl is supported for now */
2464                         ll_lease_close(och, inode, &lease_broken);
2465                         rc = -EBUSY;
2466                 }
2467                 RETURN(rc);
2468         }
2469         case LL_IOC_GET_LEASE: {
2470                 struct ll_inode_info *lli = ll_i2info(inode);
2471                 struct ldlm_lock *lock = NULL;
2472                 fmode_t fmode = 0;
2473
2474                 mutex_lock(&lli->lli_och_mutex);
2475                 if (fd->fd_lease_och != NULL) {
2476                         struct obd_client_handle *och = fd->fd_lease_och;
2477
2478                         lock = ldlm_handle2lock(&och->och_lease_handle);
2479                         if (lock != NULL) {
2480                                 lock_res_and_lock(lock);
2481                                 if (!ldlm_is_cancel(lock))
2482                                         fmode = och->och_flags;
2483
2484                                 unlock_res_and_lock(lock);
2485                                 LDLM_LOCK_PUT(lock);
2486                         }
2487                 }
2488                 mutex_unlock(&lli->lli_och_mutex);
2489
2490                 RETURN(ll_lease_type_from_fmode(fmode));
2491         }
2492         case LL_IOC_HSM_IMPORT: {
2493                 struct hsm_user_import *hui;
2494
2495                 OBD_ALLOC_PTR(hui);
2496                 if (hui == NULL)
2497                         RETURN(-ENOMEM);
2498
2499                 if (copy_from_user(hui, (void __user *)arg, sizeof(*hui))) {
2500                         OBD_FREE_PTR(hui);
2501                         RETURN(-EFAULT);
2502                 }
2503
2504                 rc = ll_hsm_import(inode, file, hui);
2505
2506                 OBD_FREE_PTR(hui);
2507                 RETURN(rc);
2508         }
2509
2510         default: {
2511                 int err;
2512
2513                 if (LLIOC_STOP ==
2514                      ll_iocontrol_call(inode, file, cmd, arg, &err))
2515                         RETURN(err);
2516
2517                 RETURN(obd_iocontrol(cmd, ll_i2dtexp(inode), 0, NULL,
2518                                      (void __user *)arg));
2519         }
2520         }
2521 }
2522
2523 #ifndef HAVE_FILE_LLSEEK_SIZE
2524 static inline loff_t
2525 llseek_execute(struct file *file, loff_t offset, loff_t maxsize)
2526 {
2527         if (offset < 0 && !(file->f_mode & FMODE_UNSIGNED_OFFSET))
2528                 return -EINVAL;
2529         if (offset > maxsize)
2530                 return -EINVAL;
2531
2532         if (offset != file->f_pos) {
2533                 file->f_pos = offset;
2534                 file->f_version = 0;
2535         }
2536         return offset;
2537 }
2538
2539 static loff_t
2540 generic_file_llseek_size(struct file *file, loff_t offset, int origin,
2541                 loff_t maxsize, loff_t eof)
2542 {
2543         struct inode *inode = file->f_path.dentry->d_inode;
2544
2545         switch (origin) {
2546         case SEEK_END:
2547                 offset += eof;
2548                 break;
2549         case SEEK_CUR:
2550                 /*
2551                  * Here we special-case the lseek(fd, 0, SEEK_CUR)
2552                  * position-querying operation.  Avoid rewriting the "same"
2553                  * f_pos value back to the file because a concurrent read(),
2554                  * write() or lseek() might have altered it
2555                  */
2556                 if (offset == 0)
2557                         return file->f_pos;
2558                 /*
2559                  * f_lock protects against read/modify/write race with other
2560                  * SEEK_CURs. Note that parallel writes and reads behave
2561                  * like SEEK_SET.
2562                  */
2563                 mutex_lock(&inode->i_mutex);
2564                 offset = llseek_execute(file, file->f_pos + offset, maxsize);
2565                 mutex_unlock(&inode->i_mutex);
2566                 return offset;
2567         case SEEK_DATA:
2568                 /*
2569                  * In the generic case the entire file is data, so as long as
2570                  * offset isn't at the end of the file then the offset is data.
2571                  */
2572                 if (offset >= eof)
2573                         return -ENXIO;
2574                 break;
2575         case SEEK_HOLE:
2576                 /*
2577                  * There is a virtual hole at the end of the file, so as long as
2578                  * offset isn't i_size or larger, return i_size.
2579                  */
2580                 if (offset >= eof)
2581                         return -ENXIO;
2582                 offset = eof;
2583                 break;
2584         }
2585
2586         return llseek_execute(file, offset, maxsize);
2587 }
2588 #endif
2589
2590 static loff_t ll_file_seek(struct file *file, loff_t offset, int origin)
2591 {
2592         struct inode *inode = file->f_path.dentry->d_inode;
2593         loff_t retval, eof = 0;
2594
2595         ENTRY;
2596         retval = offset + ((origin == SEEK_END) ? i_size_read(inode) :
2597                            (origin == SEEK_CUR) ? file->f_pos : 0);
2598         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), to=%llu=%#llx(%d)\n",
2599                PFID(ll_inode2fid(inode)), inode, retval, retval,
2600                origin);
2601         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_LLSEEK, 1);
2602
2603         if (origin == SEEK_END || origin == SEEK_HOLE || origin == SEEK_DATA) {
2604                 retval = ll_glimpse_size(inode);
2605                 if (retval != 0)
2606                         RETURN(retval);
2607                 eof = i_size_read(inode);
2608         }
2609
2610         retval = ll_generic_file_llseek_size(file, offset, origin,
2611                                           ll_file_maxbytes(inode), eof);
2612         RETURN(retval);
2613 }
2614
2615 static int ll_flush(struct file *file, fl_owner_t id)
2616 {
2617         struct inode *inode = file->f_path.dentry->d_inode;
2618         struct ll_inode_info *lli = ll_i2info(inode);
2619         struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
2620         int rc, err;
2621
2622         LASSERT(!S_ISDIR(inode->i_mode));
2623
2624         /* catch async errors that were recorded back when async writeback
2625          * failed for pages in this mapping. */
2626         rc = lli->lli_async_rc;
2627         lli->lli_async_rc = 0;
2628         if (lli->lli_clob != NULL) {
2629                 err = lov_read_and_clear_async_rc(lli->lli_clob);
2630                 if (rc == 0)
2631                         rc = err;
2632         }
2633
2634         /* The application has been told write failure already.
2635          * Do not report failure again. */
2636         if (fd->fd_write_failed)
2637                 return 0;
2638         return rc ? -EIO : 0;
2639 }
2640
2641 /**
2642  * Called to make sure a portion of file has been written out.
2643  * if @mode is not CL_FSYNC_LOCAL, it will send OST_SYNC RPCs to OST.
2644  *
2645  * Return how many pages have been written.
2646  */
2647 int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
2648                        enum cl_fsync_mode mode, int ignore_layout)
2649 {
2650         struct cl_env_nest nest;
2651         struct lu_env *env;
2652         struct cl_io *io;
2653         struct cl_fsync_io *fio;
2654         int result;
2655         ENTRY;
2656
2657         if (mode != CL_FSYNC_NONE && mode != CL_FSYNC_LOCAL &&
2658             mode != CL_FSYNC_DISCARD && mode != CL_FSYNC_ALL)
2659                 RETURN(-EINVAL);
2660
2661         env = cl_env_nested_get(&nest);
2662         if (IS_ERR(env))
2663                 RETURN(PTR_ERR(env));
2664
2665         io = vvp_env_thread_io(env);
2666         io->ci_obj = ll_i2info(inode)->lli_clob;
2667         io->ci_ignore_layout = ignore_layout;
2668
2669         /* initialize parameters for sync */
2670         fio = &io->u.ci_fsync;
2671         fio->fi_start = start;
2672         fio->fi_end = end;
2673         fio->fi_fid = ll_inode2fid(inode);
2674         fio->fi_mode = mode;
2675         fio->fi_nr_written = 0;
2676
2677         if (cl_io_init(env, io, CIT_FSYNC, io->ci_obj) == 0)
2678                 result = cl_io_loop(env, io);
2679         else
2680                 result = io->ci_result;
2681         if (result == 0)
2682                 result = fio->fi_nr_written;
2683         cl_io_fini(env, io);
2684         cl_env_nested_put(&nest, env);
2685
2686         RETURN(result);
2687 }
2688
2689 /*
2690  * When dentry is provided (the 'else' case), *file->f_path.dentry may be
2691  * null and dentry must be used directly rather than pulled from
2692  * *file->f_path.dentry as is done otherwise.
2693  */
2694
2695 #ifdef HAVE_FILE_FSYNC_4ARGS
2696 int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2697 {
2698         struct dentry *dentry = file->f_path.dentry;
2699 #elif defined(HAVE_FILE_FSYNC_2ARGS)
2700 int ll_fsync(struct file *file, int datasync)
2701 {
2702         struct dentry *dentry = file->f_path.dentry;
2703         loff_t start = 0;
2704         loff_t end = LLONG_MAX;
2705 #else
2706 int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
2707 {
2708         loff_t start = 0;
2709         loff_t end = LLONG_MAX;
2710 #endif
2711         struct inode *inode = dentry->d_inode;
2712         struct ll_inode_info *lli = ll_i2info(inode);
2713         struct ptlrpc_request *req;
2714         int rc, err;
2715         ENTRY;
2716
2717         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
2718                PFID(ll_inode2fid(inode)), inode);
2719         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_FSYNC, 1);
2720
2721 #ifdef HAVE_FILE_FSYNC_4ARGS
2722         rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2723         mutex_lock(&inode->i_mutex);
2724 #else
2725         /* fsync's caller has already called _fdata{sync,write}, we want
2726          * that IO to finish before calling the osc and mdc sync methods */
2727         rc = filemap_fdatawait(inode->i_mapping);
2728 #endif
2729
2730         /* catch async errors that were recorded back when async writeback
2731          * failed for pages in this mapping. */
2732         if (!S_ISDIR(inode->i_mode)) {
2733                 err = lli->lli_async_rc;
2734                 lli->lli_async_rc = 0;
2735                 if (rc == 0)
2736                         rc = err;
2737                 err = lov_read_and_clear_async_rc(lli->lli_clob);
2738                 if (rc == 0)
2739                         rc = err;
2740         }
2741
2742         err = md_fsync(ll_i2sbi(inode)->ll_md_exp, ll_inode2fid(inode), &req);
2743         if (!rc)
2744                 rc = err;
2745         if (!err)
2746                 ptlrpc_req_finished(req);
2747
2748         if (S_ISREG(inode->i_mode)) {
2749                 struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
2750
2751                 err = cl_sync_file_range(inode, start, end, CL_FSYNC_ALL, 0);
2752                 if (rc == 0 && err < 0)
2753                         rc = err;
2754                 if (rc < 0)
2755                         fd->fd_write_failed = true;
2756                 else
2757                         fd->fd_write_failed = false;
2758         }
2759
2760 #ifdef HAVE_FILE_FSYNC_4ARGS
2761         mutex_unlock(&inode->i_mutex);
2762 #endif
2763         RETURN(rc);
2764 }
2765
2766 static int
2767 ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
2768 {
2769         struct inode *inode = file->f_path.dentry->d_inode;
2770         struct ll_sb_info *sbi = ll_i2sbi(inode);
2771         struct ldlm_enqueue_info einfo = {
2772                 .ei_type        = LDLM_FLOCK,
2773                 .ei_cb_cp       = ldlm_flock_completion_ast,
2774                 .ei_cbdata      = file_lock,
2775         };
2776         struct md_op_data *op_data;
2777         struct lustre_handle lockh = {0};
2778         ldlm_policy_data_t flock = {{0}};
2779         int fl_type = file_lock->fl_type;
2780         __u64 flags = 0;
2781         int rc;
2782         int rc2 = 0;
2783         ENTRY;
2784
2785         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID" file_lock=%p\n",
2786                PFID(ll_inode2fid(inode)), file_lock);
2787
2788         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_FLOCK, 1);
2789
2790         if (file_lock->fl_flags & FL_FLOCK) {
2791                 LASSERT((cmd == F_SETLKW) || (cmd == F_SETLK));
2792                 /* flocks are whole-file locks */
2793                 flock.l_flock.end = OFFSET_MAX;
2794                 /* For flocks owner is determined by the local file desctiptor*/
2795                 flock.l_flock.owner = (unsigned long)file_lock->fl_file;
2796         } else if (file_lock->fl_flags & FL_POSIX) {
2797                 flock.l_flock.owner = (unsigned long)file_lock->fl_owner;
2798                 flock.l_flock.start = file_lock->fl_start;
2799                 flock.l_flock.end = file_lock->fl_end;
2800         } else {
2801                 RETURN(-EINVAL);
2802         }
2803         flock.l_flock.pid = file_lock->fl_pid;
2804
2805         /* Somewhat ugly workaround for svc lockd.
2806          * lockd installs custom fl_lmops->lm_compare_owner that checks
2807          * for the fl_owner to be the same (which it always is on local node
2808          * I guess between lockd processes) and then compares pid.
2809          * As such we assign pid to the owner field to make it all work,
2810          * conflict with normal locks is unlikely since pid space and
2811          * pointer space for current->files are not intersecting */
2812         if (file_lock->fl_lmops && file_lock->fl_lmops->lm_compare_owner)
2813                 flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
2814
2815         switch (fl_type) {
2816         case F_RDLCK:
2817                 einfo.ei_mode = LCK_PR;
2818                 break;
2819         case F_UNLCK:
2820                 /* An unlock request may or may not have any relation to
2821                  * existing locks so we may not be able to pass a lock handle
2822                  * via a normal ldlm_lock_cancel() request. The request may even
2823                  * unlock a byte range in the middle of an existing lock. In
2824                  * order to process an unlock request we need all of the same
2825                  * information that is given with a normal read or write record
2826                  * lock request. To avoid creating another ldlm unlock (cancel)
2827                  * message we'll treat a LCK_NL flock request as an unlock. */
2828                 einfo.ei_mode = LCK_NL;
2829                 break;
2830         case F_WRLCK:
2831                 einfo.ei_mode = LCK_PW;
2832                 break;
2833         default:
2834                 CDEBUG(D_INFO, "Unknown fcntl lock type: %d\n", fl_type);
2835                 RETURN (-ENOTSUPP);
2836         }
2837
2838         switch (cmd) {
2839         case F_SETLKW:
2840 #ifdef F_SETLKW64
2841         case F_SETLKW64:
2842 #endif
2843                 flags = 0;
2844                 break;
2845         case F_SETLK:
2846 #ifdef F_SETLK64
2847         case F_SETLK64:
2848 #endif
2849                 flags = LDLM_FL_BLOCK_NOWAIT;
2850                 break;
2851         case F_GETLK:
2852 #ifdef F_GETLK64
2853         case F_GETLK64:
2854 #endif
2855                 flags = LDLM_FL_TEST_LOCK;
2856                 break;
2857         default:
2858                 CERROR("unknown fcntl lock command: %d\n", cmd);
2859                 RETURN (-EINVAL);
2860         }
2861
2862         /* Save the old mode so that if the mode in the lock changes we
2863          * can decrement the appropriate reader or writer refcount. */
2864         file_lock->fl_type = einfo.ei_mode;
2865
2866         op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
2867                                      LUSTRE_OPC_ANY, NULL);
2868         if (IS_ERR(op_data))
2869                 RETURN(PTR_ERR(op_data));
2870
2871         CDEBUG(D_DLMTRACE, "inode="DFID", pid=%u, flags="LPX64", mode=%u, "
2872                "start="LPU64", end="LPU64"\n", PFID(ll_inode2fid(inode)),
2873                flock.l_flock.pid, flags, einfo.ei_mode,
2874                flock.l_flock.start, flock.l_flock.end);
2875
2876         rc = md_enqueue(sbi->ll_md_exp, &einfo, &flock, NULL, op_data, &lockh,
2877                         flags);
2878
2879         /* Restore the file lock type if not TEST lock. */
2880         if (!(flags & LDLM_FL_TEST_LOCK))
2881                 file_lock->fl_type = fl_type;
2882
2883         if ((file_lock->fl_flags & FL_FLOCK) &&
2884             (rc == 0 || file_lock->fl_type == F_UNLCK))
2885                 rc2  = flock_lock_file_wait(file, file_lock);
2886         if ((file_lock->fl_flags & FL_POSIX) &&
2887             (rc == 0 || file_lock->fl_type == F_UNLCK) &&
2888             !(flags & LDLM_FL_TEST_LOCK))
2889                 rc2  = posix_lock_file_wait(file, file_lock);
2890
2891         if (rc2 && file_lock->fl_type != F_UNLCK) {
2892                 einfo.ei_mode = LCK_NL;
2893                 md_enqueue(sbi->ll_md_exp, &einfo, &flock, NULL, op_data,
2894                            &lockh, flags);
2895                 rc = rc2;
2896         }
2897
2898         ll_finish_md_op_data(op_data);
2899
2900         RETURN(rc);
2901 }
2902
2903 int ll_get_fid_by_name(struct inode *parent, const char *name,
2904                        int namelen, struct lu_fid *fid)
2905 {
2906         struct md_op_data       *op_data = NULL;
2907         struct mdt_body         *body;
2908         struct ptlrpc_request   *req;
2909         int                     rc;
2910         ENTRY;
2911
2912         op_data = ll_prep_md_op_data(NULL, parent, NULL, name, namelen, 0,
2913                                      LUSTRE_OPC_ANY, NULL);
2914         if (IS_ERR(op_data))
2915                 RETURN(PTR_ERR(op_data));
2916
2917         op_data->op_valid = OBD_MD_FLID;
2918         rc = md_getattr_name(ll_i2sbi(parent)->ll_md_exp, op_data, &req);
2919         ll_finish_md_op_data(op_data);
2920         if (rc < 0)
2921                 RETURN(rc);
2922
2923         body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
2924         if (body == NULL)
2925                 GOTO(out_req, rc = -EFAULT);
2926         if (fid != NULL)
2927                 *fid = body->mbo_fid1;
2928 out_req:
2929         ptlrpc_req_finished(req);
2930         RETURN(rc);
2931 }
2932
2933 int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
2934                const char *name, int namelen)
2935 {
2936         struct dentry         *dchild = NULL;
2937         struct inode          *child_inode = NULL;
2938         struct md_op_data     *op_data;
2939         struct ptlrpc_request *request = NULL;
2940         struct qstr           qstr;
2941         int                    rc;
2942         ENTRY;
2943
2944         CDEBUG(D_VFSTRACE, "migrate %s under "DFID" to MDT%04x\n",
2945                name, PFID(ll_inode2fid(parent)), mdtidx);
2946
2947         op_data = ll_prep_md_op_data(NULL, parent, NULL, name, namelen,
2948                                      0, LUSTRE_OPC_ANY, NULL);
2949         if (IS_ERR(op_data))
2950                 RETURN(PTR_ERR(op_data));
2951
2952         /* Get child FID first */
2953         qstr.hash = full_name_hash(name, namelen);
2954         qstr.name = name;
2955         qstr.len = namelen;
2956         dchild = d_lookup(file->f_path.dentry, &qstr);
2957         if (dchild != NULL) {
2958                 if (dchild->d_inode != NULL) {
2959                         child_inode = igrab(dchild->d_inode);
2960                         if (child_inode != NULL) {
2961                                 mutex_lock(&child_inode->i_mutex);
2962                                 op_data->op_fid3 = *ll_inode2fid(child_inode);
2963                                 ll_invalidate_aliases(child_inode);
2964                         }
2965                 }
2966                 dput(dchild);
2967         } else {
2968                 rc = ll_get_fid_by_name(parent, name, namelen,
2969                                         &op_data->op_fid3);
2970                 if (rc != 0)
2971                         GOTO(out_free, rc);
2972         }
2973
2974         if (!fid_is_sane(&op_data->op_fid3)) {
2975                 CERROR("%s: migrate %s , but fid "DFID" is insane\n",
2976                        ll_get_fsname(parent->i_sb, NULL, 0), name,
2977                        PFID(&op_data->op_fid3));
2978                 GOTO(out_free, rc = -EINVAL);
2979         }
2980
2981         rc = ll_get_mdt_idx_by_fid(ll_i2sbi(parent), &op_data->op_fid3);
2982         if (rc < 0)
2983                 GOTO(out_free, rc);
2984
2985         if (rc == mdtidx) {
2986                 CDEBUG(D_INFO, "%s:"DFID" is already on MDT%d.\n", name,
2987                        PFID(&op_data->op_fid3), mdtidx);
2988                 GOTO(out_free, rc = 0);
2989         }
2990
2991         op_data->op_mds = mdtidx;
2992         op_data->op_cli_flags = CLI_MIGRATE;
2993         rc = md_rename(ll_i2sbi(parent)->ll_md_exp, op_data, name,
2994                        namelen, name, namelen, &request);
2995         if (rc == 0)
2996                 ll_update_times(request, parent);
2997
2998         ptlrpc_req_finished(request);
2999         if (rc != 0)
3000                 GOTO(out_free, rc);
3001
3002 out_free:
3003         if (child_inode != NULL) {
3004                 clear_nlink(child_inode);
3005                 mutex_unlock(&child_inode->i_mutex);
3006                 iput(child_inode);
3007         }
3008
3009         ll_finish_md_op_data(op_data);
3010         RETURN(rc);
3011 }
3012
3013 static int
3014 ll_file_noflock(struct file *file, int cmd, struct file_lock *file_lock)
3015 {
3016         ENTRY;
3017
3018         RETURN(-ENOSYS);
3019 }
3020
3021 /**
3022  * test if some locks matching bits and l_req_mode are acquired
3023  * - bits can be in different locks
3024  * - if found clear the common lock bits in *bits
3025  * - the bits not found, are kept in *bits
3026  * \param inode [IN]
3027  * \param bits [IN] searched lock bits [IN]
3028  * \param l_req_mode [IN] searched lock mode
3029  * \retval boolean, true iff all bits are found
3030  */
3031 int ll_have_md_lock(struct inode *inode, __u64 *bits,  ldlm_mode_t l_req_mode)
3032 {
3033         struct lustre_handle lockh;
3034         ldlm_policy_data_t policy;
3035         ldlm_mode_t mode = (l_req_mode == LCK_MINMODE) ?
3036                                 (LCK_CR|LCK_CW|LCK_PR|LCK_PW) : l_req_mode;
3037         struct lu_fid *fid;
3038         __u64 flags;
3039         int i;
3040         ENTRY;
3041
3042         if (!inode)
3043                RETURN(0);
3044
3045         fid = &ll_i2info(inode)->lli_fid;
3046         CDEBUG(D_INFO, "trying to match res "DFID" mode %s\n", PFID(fid),
3047                ldlm_lockname[mode]);
3048
3049         flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_CBPENDING | LDLM_FL_TEST_LOCK;
3050         for (i = 0; i <= MDS_INODELOCK_MAXSHIFT && *bits != 0; i++) {
3051                 policy.l_inodebits.bits = *bits & (1 << i);
3052                 if (policy.l_inodebits.bits == 0)
3053                         continue;
3054
3055                 if (md_lock_match(ll_i2mdexp(inode), flags, fid, LDLM_IBITS,
3056                                   &policy, mode, &lockh)) {
3057                         struct ldlm_lock *lock;
3058
3059                         lock = ldlm_handle2lock(&lockh);
3060                         if (lock) {
3061                                 *bits &=
3062                                       ~(lock->l_policy_data.l_inodebits.bits);
3063                                 LDLM_LOCK_PUT(lock);
3064                         } else {
3065                                 *bits &= ~policy.l_inodebits.bits;
3066                         }
3067                 }
3068         }
3069         RETURN(*bits == 0);
3070 }
3071
3072 ldlm_mode_t ll_take_md_lock(struct inode *inode, __u64 bits,
3073                             struct lustre_handle *lockh, __u64 flags,
3074                             ldlm_mode_t mode)
3075 {
3076         ldlm_policy_data_t policy = { .l_inodebits = {bits}};
3077         struct lu_fid *fid;
3078         ldlm_mode_t rc;
3079         ENTRY;
3080
3081         fid = &ll_i2info(inode)->lli_fid;
3082         CDEBUG(D_INFO, "trying to match res "DFID"\n", PFID(fid));
3083
3084         rc = md_lock_match(ll_i2mdexp(inode), LDLM_FL_BLOCK_GRANTED|flags,
3085                            fid, LDLM_IBITS, &policy, mode, lockh);
3086
3087         RETURN(rc);
3088 }
3089
3090 static int ll_inode_revalidate_fini(struct inode *inode, int rc)
3091 {
3092         /* Already unlinked. Just update nlink and return success */
3093         if (rc == -ENOENT) {
3094                 clear_nlink(inode);
3095                 /* If it is striped directory, and there is bad stripe
3096                  * Let's revalidate the dentry again, instead of returning
3097                  * error */
3098                 if (S_ISDIR(inode->i_mode) &&
3099                     ll_i2info(inode)->lli_lsm_md != NULL)
3100                         return 0;
3101
3102                 /* This path cannot be hit for regular files unless in
3103                  * case of obscure races, so no need to to validate
3104                  * size. */
3105                 if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
3106                         return 0;
3107         } else if (rc != 0) {
3108                 CDEBUG_LIMIT((rc == -EACCES || rc == -EIDRM) ? D_INFO : D_ERROR,
3109                              "%s: revalidate FID "DFID" error: rc = %d\n",
3110                              ll_get_fsname(inode->i_sb, NULL, 0),
3111                              PFID(ll_inode2fid(inode)), rc);
3112         }
3113
3114         return rc;
3115 }
3116
3117 static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
3118 {
3119         struct inode *inode = dentry->d_inode;
3120         struct ptlrpc_request *req = NULL;
3121         struct obd_export *exp;
3122         int rc = 0;
3123         ENTRY;
3124
3125         LASSERT(inode != NULL);
3126
3127         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p),name=%s\n",
3128                PFID(ll_inode2fid(inode)), inode, dentry->d_name.name);
3129
3130         exp = ll_i2mdexp(inode);
3131
3132         /* XXX: Enable OBD_CONNECT_ATTRFID to reduce unnecessary getattr RPC.
3133          *      But under CMD case, it caused some lock issues, should be fixed
3134          *      with new CMD ibits lock. See bug 12718 */
3135         if (exp_connect_flags(exp) & OBD_CONNECT_ATTRFID) {
3136                 struct lookup_intent oit = { .it_op = IT_GETATTR };
3137                 struct md_op_data *op_data;
3138
3139                 if (ibits == MDS_INODELOCK_LOOKUP)
3140                         oit.it_op = IT_LOOKUP;
3141
3142                 /* Call getattr by fid, so do not provide name at all. */
3143                 op_data = ll_prep_md_op_data(NULL, dentry->d_inode,
3144                                              dentry->d_inode, NULL, 0, 0,
3145                                              LUSTRE_OPC_ANY, NULL);
3146                 if (IS_ERR(op_data))
3147                         RETURN(PTR_ERR(op_data));
3148
3149                 rc = md_intent_lock(exp, op_data, &oit, &req,
3150                                     &ll_md_blocking_ast, 0);
3151                 ll_finish_md_op_data(op_data);
3152                 if (rc < 0) {
3153                         rc = ll_inode_revalidate_fini(inode, rc);
3154                         GOTO (out, rc);
3155                 }
3156
3157                 rc = ll_revalidate_it_finish(req, &oit, dentry);
3158                 if (rc != 0) {
3159                         ll_intent_release(&oit);
3160                         GOTO(out, rc);
3161                 }
3162
3163                 /* Unlinked? Unhash dentry, so it is not picked up later by
3164                    do_lookup() -> ll_revalidate_it(). We cannot use d_drop
3165                    here to preserve get_cwd functionality on 2.6.
3166                    Bug 10503 */
3167                 if (!dentry->d_inode->i_nlink)
3168                         d_lustre_invalidate(dentry, 0);
3169
3170                 ll_lookup_finish_locks(&oit, dentry);
3171         } else if (!ll_have_md_lock(dentry->d_inode, &ibits, LCK_MINMODE)) {
3172                 struct ll_sb_info *sbi = ll_i2sbi(dentry->d_inode);
3173                 u64 valid = OBD_MD_FLGETATTR;
3174                 struct md_op_data *op_data;
3175                 int ealen = 0;
3176
3177                 if (S_ISREG(inode->i_mode)) {
3178                         rc = ll_get_default_mdsize(sbi, &ealen);
3179                         if (rc)
3180                                 RETURN(rc);
3181                         valid |= OBD_MD_FLEASIZE | OBD_MD_FLMODEASIZE;
3182                 }
3183
3184                 op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL,
3185                                              0, ealen, LUSTRE_OPC_ANY,
3186                                              NULL);
3187                 if (IS_ERR(op_data))
3188                         RETURN(PTR_ERR(op_data));
3189
3190                 op_data->op_valid = valid;
3191                 rc = md_getattr(sbi->ll_md_exp, op_data, &req);
3192                 ll_finish_md_op_data(op_data);
3193                 if (rc) {
3194                         rc = ll_inode_revalidate_fini(inode, rc);
3195                         RETURN(rc);
3196                 }
3197
3198                 rc = ll_prep_inode(&inode, req, NULL, NULL);
3199         }
3200 out:
3201         ptlrpc_req_finished(req);
3202         return rc;
3203 }
3204
3205 static int ll_merge_md_attr(struct inode *inode)
3206 {
3207         struct cl_attr attr = { 0 };
3208         int rc;
3209
3210         LASSERT(ll_i2info(inode)->lli_lsm_md != NULL);
3211         rc = md_merge_attr(ll_i2mdexp(inode), ll_i2info(inode)->lli_lsm_md,
3212                            &attr, ll_md_blocking_ast);
3213         if (rc != 0)
3214                 RETURN(rc);
3215
3216         set_nlink(inode, attr.cat_nlink);
3217         inode->i_blocks = attr.cat_blocks;
3218         i_size_write(inode, attr.cat_size);
3219
3220         ll_i2info(inode)->lli_atime = attr.cat_atime;
3221         ll_i2info(inode)->lli_mtime = attr.cat_mtime;
3222         ll_i2info(inode)->lli_ctime = attr.cat_ctime;
3223
3224         RETURN(0);
3225 }
3226
3227 static int
3228 ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
3229 {
3230         struct inode    *inode = dentry->d_inode;
3231         int              rc;
3232         ENTRY;
3233
3234         rc = __ll_inode_revalidate(dentry, ibits);
3235         if (rc != 0)
3236                 RETURN(rc);
3237
3238         /* if object isn't regular file, don't validate size */
3239         if (!S_ISREG(inode->i_mode)) {
3240                 if (S_ISDIR(inode->i_mode) &&
3241                     ll_i2info(inode)->lli_lsm_md != NULL) {
3242                         rc = ll_merge_md_attr(inode);
3243                         if (rc != 0)
3244                                 RETURN(rc);
3245                 }
3246
3247                 LTIME_S(inode->i_atime) = ll_i2info(inode)->lli_atime;
3248                 LTIME_S(inode->i_mtime) = ll_i2info(inode)->lli_mtime;
3249                 LTIME_S(inode->i_ctime) = ll_i2info(inode)->lli_ctime;
3250         } else {
3251                 /* In case of restore, the MDT has the right size and has
3252                  * already send it back without granting the layout lock,
3253                  * inode is up-to-date so glimpse is useless.
3254                  * Also to glimpse we need the layout, in case of a running
3255                  * restore the MDT holds the layout lock so the glimpse will
3256                  * block up to the end of restore (getattr will block)
3257                  */
3258                 if (!ll_file_test_flag(ll_i2info(inode), LLIF_FILE_RESTORING))
3259                         rc = ll_glimpse_size(inode);
3260         }
3261         RETURN(rc);
3262 }
3263
3264 int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
3265 {
3266         struct inode *inode = de->d_inode;
3267         struct ll_sb_info *sbi = ll_i2sbi(inode);
3268         struct ll_inode_info *lli = ll_i2info(inode);
3269         int res = 0;
3270
3271         res = ll_inode_revalidate(de, MDS_INODELOCK_UPDATE |
3272                                       MDS_INODELOCK_LOOKUP);
3273         ll_stats_ops_tally(sbi, LPROC_LL_GETATTR, 1);
3274
3275         if (res)
3276                 return res;
3277
3278         stat->dev = inode->i_sb->s_dev;
3279         if (ll_need_32bit_api(sbi))
3280                 stat->ino = cl_fid_build_ino(&lli->lli_fid, 1);
3281         else
3282                 stat->ino = inode->i_ino;
3283         stat->mode = inode->i_mode;
3284         stat->uid = inode->i_uid;
3285         stat->gid = inode->i_gid;
3286         stat->rdev = inode->i_rdev;
3287         stat->atime = inode->i_atime;
3288         stat->mtime = inode->i_mtime;
3289         stat->ctime = inode->i_ctime;
3290         stat->blksize = 1 << inode->i_blkbits;
3291
3292         stat->nlink = inode->i_nlink;
3293         stat->size = i_size_read(inode);
3294         stat->blocks = inode->i_blocks;
3295
3296         return 0;
3297 }
3298
3299 static int ll_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3300                      __u64 start, __u64 len)
3301 {
3302         int             rc;
3303         size_t          num_bytes;
3304         struct fiemap   *fiemap;
3305         unsigned int    extent_count = fieinfo->fi_extents_max;
3306
3307         num_bytes = sizeof(*fiemap) + (extent_count *
3308                                        sizeof(struct fiemap_extent));
3309         OBD_ALLOC_LARGE(fiemap, num_bytes);
3310
3311         if (fiemap == NULL)
3312                 RETURN(-ENOMEM);
3313
3314         fiemap->fm_flags = fieinfo->fi_flags;
3315         fiemap->fm_extent_count = fieinfo->fi_extents_max;
3316         fiemap->fm_start = start;
3317         fiemap->fm_length = len;
3318         if (extent_count > 0 &&
3319             copy_from_user(&fiemap->fm_extents[0], fieinfo->fi_extents_start,
3320                            sizeof(struct fiemap_extent)) != 0)
3321                 GOTO(out, rc = -EFAULT);
3322
3323         rc = ll_do_fiemap(inode, fiemap, num_bytes);
3324
3325         fieinfo->fi_flags = fiemap->fm_flags;
3326         fieinfo->fi_extents_mapped = fiemap->fm_mapped_extents;
3327         if (extent_count > 0 &&
3328             copy_to_user(fieinfo->fi_extents_start, &fiemap->fm_extents[0],
3329                          fiemap->fm_mapped_extents *
3330                          sizeof(struct fiemap_extent)) != 0)
3331                 GOTO(out, rc = -EFAULT);
3332 out:
3333         OBD_FREE_LARGE(fiemap, num_bytes);
3334         return rc;
3335 }
3336
3337 struct posix_acl *ll_get_acl(struct inode *inode, int type)
3338 {
3339         struct ll_inode_info *lli = ll_i2info(inode);
3340         struct posix_acl *acl = NULL;
3341         ENTRY;
3342
3343         spin_lock(&lli->lli_lock);
3344         /* VFS' acl_permission_check->check_acl will release the refcount */
3345         acl = posix_acl_dup(lli->lli_posix_acl);
3346         spin_unlock(&lli->lli_lock);
3347
3348         RETURN(acl);
3349 }
3350
3351 #ifndef HAVE_GENERIC_PERMISSION_2ARGS
3352 static int
3353 # ifdef HAVE_GENERIC_PERMISSION_4ARGS
3354 ll_check_acl(struct inode *inode, int mask, unsigned int flags)
3355 # else
3356 ll_check_acl(struct inode *inode, int mask)
3357 # endif
3358 {
3359 # ifdef CONFIG_FS_POSIX_ACL
3360         struct posix_acl *acl;
3361         int rc;
3362         ENTRY;
3363
3364 #  ifdef HAVE_GENERIC_PERMISSION_4ARGS
3365         if (flags & IPERM_FLAG_RCU)
3366                 return -ECHILD;
3367 #  endif
3368         acl = ll_get_acl(inode, ACL_TYPE_ACCESS);
3369
3370         if (!acl)
3371                 RETURN(-EAGAIN);
3372
3373         rc = posix_acl_permission(inode, acl, mask);
3374         posix_acl_release(acl);
3375
3376         RETURN(rc);
3377 # else /* !CONFIG_FS_POSIX_ACL */
3378         return -EAGAIN;
3379 # endif /* CONFIG_FS_POSIX_ACL */
3380 }
3381 #endif /* HAVE_GENERIC_PERMISSION_2ARGS */
3382
3383 #ifdef HAVE_GENERIC_PERMISSION_4ARGS
3384 int ll_inode_permission(struct inode *inode, int mask, unsigned int flags)
3385 #else
3386 # ifdef HAVE_INODE_PERMISION_2ARGS
3387 int ll_inode_permission(struct inode *inode, int mask)
3388 # else
3389 int ll_inode_permission(struct inode *inode, int mask, struct nameidata *nd)
3390 # endif
3391 #endif
3392 {
3393         int rc = 0;
3394         struct ll_sb_info *sbi;
3395         struct root_squash_info *squash;
3396         struct cred *cred = NULL;
3397         const struct cred *old_cred = NULL;
3398         cfs_cap_t cap;
3399         bool squash_id = false;
3400         ENTRY;
3401
3402 #ifdef MAY_NOT_BLOCK
3403         if (mask & MAY_NOT_BLOCK)
3404                 return -ECHILD;
3405 #elif defined(HAVE_GENERIC_PERMISSION_4ARGS)
3406         if (flags & IPERM_FLAG_RCU)
3407                 return -ECHILD;
3408 #endif
3409
3410        /* as root inode are NOT getting validated in lookup operation,
3411         * need to do it before permission check. */
3412
3413         if (inode == inode->i_sb->s_root->d_inode) {
3414                 rc = __ll_inode_revalidate(inode->i_sb->s_root,
3415                                            MDS_INODELOCK_LOOKUP);
3416                 if (rc)
3417                         RETURN(rc);
3418         }
3419
3420         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), inode mode %x mask %o\n",
3421                PFID(ll_inode2fid(inode)), inode, inode->i_mode, mask);
3422
3423         /* squash fsuid/fsgid if needed */
3424         sbi = ll_i2sbi(inode);
3425         squash = &sbi->ll_squash;
3426         if (unlikely(squash->rsi_uid != 0 &&
3427                      uid_eq(current_fsuid(), GLOBAL_ROOT_UID) &&
3428                      !(sbi->ll_flags & LL_SBI_NOROOTSQUASH))) {
3429                         squash_id = true;
3430         }
3431         if (squash_id) {
3432                 CDEBUG(D_OTHER, "squash creds (%d:%d)=>(%d:%d)\n",
3433                        __kuid_val(current_fsuid()), __kgid_val(current_fsgid()),
3434                        squash->rsi_uid, squash->rsi_gid);
3435
3436                 /* update current process's credentials
3437                  * and FS capability */
3438                 cred = prepare_creds();
3439                 if (cred == NULL)
3440                         RETURN(-ENOMEM);
3441
3442                 cred->fsuid = make_kuid(&init_user_ns, squash->rsi_uid);
3443                 cred->fsgid = make_kgid(&init_user_ns, squash->rsi_gid);
3444                 for (cap = 0; cap < sizeof(cfs_cap_t) * 8; cap++) {
3445                         if ((1 << cap) & CFS_CAP_FS_MASK)
3446                                 cap_lower(cred->cap_effective, cap);
3447                 }
3448                 old_cred = override_creds(cred);
3449         }
3450
3451         ll_stats_ops_tally(sbi, LPROC_LL_INODE_PERM, 1);
3452
3453         if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
3454                 rc = lustre_check_remote_perm(inode, mask);
3455         else
3456                 rc = ll_generic_permission(inode, mask, flags, ll_check_acl);
3457
3458         /* restore current process's credentials and FS capability */
3459         if (squash_id) {
3460                 revert_creds(old_cred);
3461                 put_cred(cred);
3462         }
3463
3464         RETURN(rc);
3465 }
3466
3467 /* -o localflock - only provides locally consistent flock locks */
3468 struct file_operations ll_file_operations = {
3469 #ifdef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
3470 # ifdef HAVE_SYNC_READ_WRITE
3471         .read           = new_sync_read,
3472         .write          = new_sync_write,
3473 # endif
3474         .read_iter      = ll_file_read_iter,
3475         .write_iter     = ll_file_write_iter,
3476 #else /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3477         .read           = ll_file_read,
3478         .aio_read       = ll_file_aio_read,
3479         .write          = ll_file_write,
3480         .aio_write      = ll_file_aio_write,
3481 #endif /* HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3482         .unlocked_ioctl = ll_file_ioctl,
3483         .open           = ll_file_open,
3484         .release        = ll_file_release,
3485         .mmap           = ll_file_mmap,
3486         .llseek         = ll_file_seek,
3487         .splice_read    = ll_file_splice_read,
3488         .fsync          = ll_fsync,
3489         .flush          = ll_flush
3490 };
3491
3492 struct file_operations ll_file_operations_flock = {
3493 #ifdef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
3494 # ifdef HAVE_SYNC_READ_WRITE
3495         .read           = new_sync_read,
3496         .write          = new_sync_write,
3497 # endif /* HAVE_SYNC_READ_WRITE */
3498         .read_iter      = ll_file_read_iter,
3499         .write_iter     = ll_file_write_iter,
3500 #else /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3501         .read           = ll_file_read,
3502         .aio_read       = ll_file_aio_read,
3503         .write          = ll_file_write,
3504         .aio_write      = ll_file_aio_write,
3505 #endif /* HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3506         .unlocked_ioctl = ll_file_ioctl,
3507         .open           = ll_file_open,
3508         .release        = ll_file_release,
3509         .mmap           = ll_file_mmap,
3510         .llseek         = ll_file_seek,
3511         .splice_read    = ll_file_splice_read,
3512         .fsync          = ll_fsync,
3513         .flush          = ll_flush,
3514         .flock          = ll_file_flock,
3515         .lock           = ll_file_flock
3516 };
3517
3518 /* These are for -o noflock - to return ENOSYS on flock calls */
3519 struct file_operations ll_file_operations_noflock = {
3520 #ifdef HAVE_FILE_OPERATIONS_READ_WRITE_ITER
3521 # ifdef HAVE_SYNC_READ_WRITE
3522         .read           = new_sync_read,
3523         .write          = new_sync_write,
3524 # endif /* HAVE_SYNC_READ_WRITE */
3525         .read_iter      = ll_file_read_iter,
3526         .write_iter     = ll_file_write_iter,
3527 #else /* !HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3528         .read           = ll_file_read,
3529         .aio_read       = ll_file_aio_read,
3530         .write          = ll_file_write,
3531         .aio_write      = ll_file_aio_write,
3532 #endif /* HAVE_FILE_OPERATIONS_READ_WRITE_ITER */
3533         .unlocked_ioctl = ll_file_ioctl,
3534         .open           = ll_file_open,
3535         .release        = ll_file_release,
3536         .mmap           = ll_file_mmap,
3537         .llseek         = ll_file_seek,
3538         .splice_read    = ll_file_splice_read,
3539         .fsync          = ll_fsync,
3540         .flush          = ll_flush,
3541         .flock          = ll_file_noflock,
3542         .lock           = ll_file_noflock
3543 };
3544
3545 struct inode_operations ll_file_inode_operations = {
3546         .setattr        = ll_setattr,
3547         .getattr        = ll_getattr,
3548         .permission     = ll_inode_permission,
3549         .setxattr       = ll_setxattr,
3550         .getxattr       = ll_getxattr,
3551         .listxattr      = ll_listxattr,
3552         .removexattr    = ll_removexattr,
3553         .fiemap         = ll_fiemap,
3554 #ifdef HAVE_IOP_GET_ACL
3555         .get_acl        = ll_get_acl,
3556 #endif
3557 };
3558
3559 /* dynamic ioctl number support routins */
3560 static struct llioc_ctl_data {
3561         struct rw_semaphore     ioc_sem;
3562         struct list_head        ioc_head;
3563 } llioc = {
3564         __RWSEM_INITIALIZER(llioc.ioc_sem),
3565         LIST_HEAD_INIT(llioc.ioc_head)
3566 };
3567
3568
3569 struct llioc_data {
3570         struct list_head        iocd_list;
3571         unsigned int            iocd_size;
3572         llioc_callback_t        iocd_cb;
3573         unsigned int            iocd_count;
3574         unsigned int            iocd_cmd[0];
3575 };
3576
3577 void *ll_iocontrol_register(llioc_callback_t cb, int count, unsigned int *cmd)
3578 {
3579         unsigned int size;
3580         struct llioc_data *in_data = NULL;
3581         ENTRY;
3582
3583         if (cb == NULL || cmd == NULL ||
3584             count > LLIOC_MAX_CMD || count < 0)
3585                 RETURN(NULL);
3586
3587         size = sizeof(*in_data) + count * sizeof(unsigned int);
3588         OBD_ALLOC(in_data, size);
3589         if (in_data == NULL)
3590                 RETURN(NULL);
3591
3592         memset(in_data, 0, sizeof(*in_data));
3593         in_data->iocd_size = size;
3594         in_data->iocd_cb = cb;
3595         in_data->iocd_count = count;
3596         memcpy(in_data->iocd_cmd, cmd, sizeof(unsigned int) * count);
3597
3598         down_write(&llioc.ioc_sem);
3599         list_add_tail(&in_data->iocd_list, &llioc.ioc_head);
3600         up_write(&llioc.ioc_sem);
3601
3602         RETURN(in_data);
3603 }
3604
3605 void ll_iocontrol_unregister(void *magic)
3606 {
3607         struct llioc_data *tmp;
3608
3609         if (magic == NULL)
3610                 return;
3611
3612         down_write(&llioc.ioc_sem);
3613         list_for_each_entry(tmp, &llioc.ioc_head, iocd_list) {
3614                 if (tmp == magic) {
3615                         unsigned int size = tmp->iocd_size;
3616
3617                         list_del(&tmp->iocd_list);
3618                         up_write(&llioc.ioc_sem);
3619
3620                         OBD_FREE(tmp, size);
3621                         return;
3622                 }
3623         }
3624         up_write(&llioc.ioc_sem);
3625
3626         CWARN("didn't find iocontrol register block with magic: %p\n", magic);
3627 }
3628
3629 EXPORT_SYMBOL(ll_iocontrol_register);
3630 EXPORT_SYMBOL(ll_iocontrol_unregister);
3631
3632 static enum llioc_iter
3633 ll_iocontrol_call(struct inode *inode, struct file *file,
3634                   unsigned int cmd, unsigned long arg, int *rcp)
3635 {
3636         enum llioc_iter ret = LLIOC_CONT;
3637         struct llioc_data *data;
3638         int rc = -EINVAL, i;
3639
3640         down_read(&llioc.ioc_sem);
3641         list_for_each_entry(data, &llioc.ioc_head, iocd_list) {
3642                 for (i = 0; i < data->iocd_count; i++) {
3643                         if (cmd != data->iocd_cmd[i])
3644                                 continue;
3645
3646                         ret = data->iocd_cb(inode, file, cmd, arg, data, &rc);
3647                         break;
3648                 }
3649
3650                 if (ret == LLIOC_STOP)
3651                         break;
3652         }
3653         up_read(&llioc.ioc_sem);
3654
3655         if (rcp)
3656                 *rcp = rc;
3657         return ret;
3658 }
3659
3660 int ll_layout_conf(struct inode *inode, const struct cl_object_conf *conf)
3661 {
3662         struct ll_inode_info *lli = ll_i2info(inode);
3663         struct cl_object *obj = lli->lli_clob;
3664         struct cl_env_nest nest;
3665         struct lu_env *env;
3666         int rc;
3667         ENTRY;
3668
3669         if (obj == NULL)
3670                 RETURN(0);
3671
3672         env = cl_env_nested_get(&nest);
3673         if (IS_ERR(env))
3674                 RETURN(PTR_ERR(env));
3675
3676         rc = cl_conf_set(env, lli->lli_clob, conf);
3677         if (rc < 0)
3678                 GOTO(out, rc);
3679
3680         if (conf->coc_opc == OBJECT_CONF_SET) {
3681                 struct ldlm_lock *lock = conf->coc_lock;
3682                 struct cl_layout cl = {
3683                         .cl_layout_gen = 0,
3684                 };
3685
3686                 LASSERT(lock != NULL);
3687                 LASSERT(ldlm_has_layout(lock));
3688
3689                 /* it can only be allowed to match after layout is
3690                  * applied to inode otherwise false layout would be
3691                  * seen. Applying layout shoud happen before dropping
3692                  * the intent lock. */
3693                 ldlm_lock_allow_match(lock);
3694
3695                 rc = cl_object_layout_get(env, obj, &cl);
3696                 if (rc < 0)
3697                         GOTO(out, rc);
3698
3699                 CDEBUG(D_VFSTRACE,
3700                        DFID": layout version change: %u -> %u\n",
3701                        PFID(&lli->lli_fid), ll_layout_version_get(lli),
3702                        cl.cl_layout_gen);
3703                 ll_layout_version_set(lli, cl.cl_layout_gen);
3704         }
3705
3706 out:
3707         cl_env_nested_put(&nest, env);
3708
3709         RETURN(rc);
3710 }
3711
3712 /* Fetch layout from MDT with getxattr request, if it's not ready yet */
3713 static int ll_layout_fetch(struct inode *inode, struct ldlm_lock *lock)
3714
3715 {
3716         struct ll_sb_info *sbi = ll_i2sbi(inode);
3717         struct ptlrpc_request *req;
3718         struct mdt_body *body;
3719         void *lvbdata;
3720         void *lmm;
3721         int lmmsize;
3722         int rc;
3723         ENTRY;
3724
3725         CDEBUG(D_INODE, DFID" LVB_READY=%d l_lvb_data=%p l_lvb_len=%d\n",
3726                PFID(ll_inode2fid(inode)), ldlm_is_lvb_ready(lock),
3727                lock->l_lvb_data, lock->l_lvb_len);
3728
3729         if (lock->l_lvb_data != NULL)
3730                 RETURN(0);
3731
3732         /* if layout lock was granted right away, the layout is returned
3733          * within DLM_LVB of dlm reply; otherwise if the lock was ever
3734          * blocked and then granted via completion ast, we have to fetch
3735          * layout here. Please note that we can't use the LVB buffer in
3736          * completion AST because it doesn't have a large enough buffer */
3737         rc = ll_get_default_mdsize(sbi, &lmmsize);
3738         if (rc == 0)
3739                 rc = md_getxattr(sbi->ll_md_exp, ll_inode2fid(inode),
3740                                 OBD_MD_FLXATTR, XATTR_NAME_LOV, NULL, 0,
3741                                 lmmsize, 0, &req);
3742         if (rc < 0)
3743                 RETURN(rc);
3744
3745         body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
3746         if (body == NULL)
3747                 GOTO(out, rc = -EPROTO);
3748
3749         lmmsize = body->mbo_eadatasize;
3750         if (lmmsize == 0) /* empty layout */
3751                 GOTO(out, rc = 0);
3752
3753         lmm = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA, lmmsize);
3754         if (lmm == NULL)
3755                 GOTO(out, rc = -EFAULT);
3756
3757         OBD_ALLOC_LARGE(lvbdata, lmmsize);
3758         if (lvbdata == NULL)
3759                 GOTO(out, rc = -ENOMEM);
3760
3761         memcpy(lvbdata, lmm, lmmsize);
3762         lock_res_and_lock(lock);
3763         if (unlikely(lock->l_lvb_data == NULL)) {
3764                 lock->l_lvb_type = LVB_T_LAYOUT;
3765                 lock->l_lvb_data = lvbdata;
3766                 lock->l_lvb_len = lmmsize;
3767                 lvbdata = NULL;
3768         }
3769         unlock_res_and_lock(lock);
3770
3771         if (lvbdata != NULL)
3772                 OBD_FREE_LARGE(lvbdata, lmmsize);
3773
3774         EXIT;
3775
3776 out:
3777         ptlrpc_req_finished(req);
3778         return rc;
3779 }
3780
3781 /**
3782  * Apply the layout to the inode. Layout lock is held and will be released
3783  * in this function.
3784  */
3785 static int ll_layout_lock_set(struct lustre_handle *lockh, ldlm_mode_t mode,
3786                               struct inode *inode)
3787 {
3788         struct ll_inode_info *lli = ll_i2info(inode);
3789         struct ll_sb_info    *sbi = ll_i2sbi(inode);
3790         struct ldlm_lock *lock;
3791         struct cl_object_conf conf;
3792         int rc = 0;
3793         bool lvb_ready;
3794         bool wait_layout = false;
3795         ENTRY;
3796
3797         LASSERT(lustre_handle_is_used(lockh));
3798
3799         lock = ldlm_handle2lock(lockh);
3800         LASSERT(lock != NULL);
3801         LASSERT(ldlm_has_layout(lock));
3802
3803         LDLM_DEBUG(lock, "file "DFID"(%p) being reconfigured",
3804                    PFID(&lli->lli_fid), inode);
3805
3806         /* in case this is a caching lock and reinstate with new inode */
3807         md_set_lock_data(sbi->ll_md_exp, &lockh->cookie, inode, NULL);
3808
3809         lock_res_and_lock(lock);
3810         lvb_ready = ldlm_is_lvb_ready(lock);
3811         unlock_res_and_lock(lock);
3812         /* checking lvb_ready is racy but this is okay. The worst case is
3813          * that multi processes may configure the file on the same time. */
3814
3815         if (lvb_ready)
3816                 GOTO(out, rc = 0);
3817
3818         rc = ll_layout_fetch(inode, lock);
3819         if (rc < 0)
3820                 GOTO(out, rc);
3821
3822         /* for layout lock, lmm is stored in lock's lvb.
3823          * lvb_data is immutable if the lock is held so it's safe to access it
3824          * without res lock.
3825          *
3826          * set layout to file. Unlikely this will fail as old layout was
3827          * surely eliminated */
3828         memset(&conf, 0, sizeof conf);
3829         conf.coc_opc = OBJECT_CONF_SET;
3830         conf.coc_inode = inode;
3831         conf.coc_lock = lock;
3832         conf.u.coc_layout.lb_buf = lock->l_lvb_data;
3833         conf.u.coc_layout.lb_len = lock->l_lvb_len;
3834         rc = ll_layout_conf(inode, &conf);
3835
3836         /* refresh layout failed, need to wait */
3837         wait_layout = rc == -EBUSY;
3838         EXIT;
3839
3840 out:
3841         LDLM_LOCK_PUT(lock);
3842         ldlm_lock_decref(lockh, mode);
3843
3844         /* wait for IO to complete if it's still being used. */
3845         if (wait_layout) {
3846                 CDEBUG(D_INODE, "%s: "DFID"(%p) wait for layout reconf\n",
3847                        ll_get_fsname(inode->i_sb, NULL, 0),
3848                        PFID(&lli->lli_fid), inode);
3849
3850                 memset(&conf, 0, sizeof conf);
3851                 conf.coc_opc = OBJECT_CONF_WAIT;
3852                 conf.coc_inode = inode;
3853                 rc = ll_layout_conf(inode, &conf);
3854                 if (rc == 0)
3855                         rc = -EAGAIN;
3856
3857                 CDEBUG(D_INODE, "%s file="DFID" waiting layout return: %d\n",
3858                        ll_get_fsname(inode->i_sb, NULL, 0),
3859                        PFID(&lli->lli_fid), rc);
3860         }
3861         RETURN(rc);
3862 }
3863
3864 static int ll_layout_refresh_locked(struct inode *inode)
3865 {
3866         struct ll_inode_info  *lli = ll_i2info(inode);
3867         struct ll_sb_info     *sbi = ll_i2sbi(inode);
3868         struct md_op_data     *op_data;
3869         struct lookup_intent   it;
3870         struct lustre_handle   lockh;
3871         ldlm_mode_t            mode;
3872         struct ldlm_enqueue_info einfo = {
3873                 .ei_type = LDLM_IBITS,
3874                 .ei_mode = LCK_CR,
3875                 .ei_cb_bl = &ll_md_blocking_ast,
3876                 .ei_cb_cp = &ldlm_completion_ast,
3877         };
3878         int rc;
3879         ENTRY;
3880
3881 again:
3882         /* mostly layout lock is caching on the local side, so try to match
3883          * it before grabbing layout lock mutex. */
3884         mode = ll_take_md_lock(inode, MDS_INODELOCK_LAYOUT, &lockh, 0,
3885                                LCK_CR | LCK_CW | LCK_PR | LCK_PW);
3886         if (mode != 0) { /* hit cached lock */
3887                 rc = ll_layout_lock_set(&lockh, mode, inode);
3888                 if (rc == -EAGAIN)
3889                         goto again;
3890
3891                 RETURN(rc);
3892         }
3893
3894         op_data = ll_prep_md_op_data(NULL, inode, inode, NULL,
3895                                      0, 0, LUSTRE_OPC_ANY, NULL);
3896         if (IS_ERR(op_data))
3897                 RETURN(PTR_ERR(op_data));
3898
3899         /* have to enqueue one */
3900         memset(&it, 0, sizeof(it));
3901         it.it_op = IT_LAYOUT;
3902         lockh.cookie = 0ULL;
3903
3904         LDLM_DEBUG_NOLOCK("%s: requeue layout lock for file "DFID"(%p)",
3905                           ll_get_fsname(inode->i_sb, NULL, 0),
3906                           PFID(&lli->lli_fid), inode);
3907
3908         rc = md_enqueue(sbi->ll_md_exp, &einfo, NULL, &it, op_data, &lockh, 0);
3909         if (it.d.lustre.it_data != NULL)
3910                 ptlrpc_req_finished(it.d.lustre.it_data);
3911         it.d.lustre.it_data = NULL;
3912
3913         ll_finish_md_op_data(op_data);
3914
3915         mode = it.d.lustre.it_lock_mode;
3916         it.d.lustre.it_lock_mode = 0;
3917         ll_intent_drop_lock(&it);
3918
3919         if (rc == 0) {
3920                 /* set lock data in case this is a new lock */
3921                 ll_set_lock_data(sbi->ll_md_exp, inode, &it, NULL);
3922                 rc = ll_layout_lock_set(&lockh, mode, inode);
3923                 if (rc == -EAGAIN)
3924                         goto again;
3925         }
3926
3927         RETURN(rc);
3928 }
3929
3930 /**
3931  * This function checks if there exists a LAYOUT lock on the client side,
3932  * or enqueues it if it doesn't have one in cache.
3933  *
3934  * This function will not hold layout lock so it may be revoked any time after
3935  * this function returns. Any operations depend on layout should be redone
3936  * in that case.
3937  *
3938  * This function should be called before lov_io_init() to get an uptodate
3939  * layout version, the caller should save the version number and after IO
3940  * is finished, this function should be called again to verify that layout
3941  * is not changed during IO time.
3942  */
3943 int ll_layout_refresh(struct inode *inode, __u32 *gen)
3944 {
3945         struct ll_inode_info    *lli = ll_i2info(inode);
3946         struct ll_sb_info       *sbi = ll_i2sbi(inode);
3947         int rc;
3948         ENTRY;
3949
3950         *gen = ll_layout_version_get(lli);
3951         if (!(sbi->ll_flags & LL_SBI_LAYOUT_LOCK) || *gen != CL_LAYOUT_GEN_NONE)
3952                 RETURN(0);
3953
3954         /* sanity checks */
3955         LASSERT(fid_is_sane(ll_inode2fid(inode)));
3956         LASSERT(S_ISREG(inode->i_mode));
3957
3958         /* take layout lock mutex to enqueue layout lock exclusively. */
3959         mutex_lock(&lli->lli_layout_mutex);
3960
3961         rc = ll_layout_refresh_locked(inode);
3962         if (rc < 0)
3963                 GOTO(out, rc);
3964
3965         *gen = ll_layout_version_get(lli);
3966 out:
3967         mutex_unlock(&lli->lli_layout_mutex);
3968
3969         RETURN(rc);
3970 }
3971
3972 /**
3973  *  This function send a restore request to the MDT
3974  */
3975 int ll_layout_restore(struct inode *inode, loff_t offset, __u64 length)
3976 {
3977         struct hsm_user_request *hur;
3978         int                      len, rc;
3979         ENTRY;
3980
3981         len = sizeof(struct hsm_user_request) +
3982               sizeof(struct hsm_user_item);
3983         OBD_ALLOC(hur, len);
3984         if (hur == NULL)
3985                 RETURN(-ENOMEM);
3986
3987         hur->hur_request.hr_action = HUA_RESTORE;
3988         hur->hur_request.hr_archive_id = 0;
3989         hur->hur_request.hr_flags = 0;
3990         memcpy(&hur->hur_user_item[0].hui_fid, &ll_i2info(inode)->lli_fid,
3991                sizeof(hur->hur_user_item[0].hui_fid));
3992         hur->hur_user_item[0].hui_extent.offset = offset;
3993         hur->hur_user_item[0].hui_extent.length = length;
3994         hur->hur_request.hr_itemcount = 1;
3995         rc = obd_iocontrol(LL_IOC_HSM_REQUEST, ll_i2sbi(inode)->ll_md_exp,
3996                            len, hur, NULL);
3997         OBD_FREE(hur, len);
3998         RETURN(rc);
3999 }