Whamcloud - gitweb
LU-6260 llite: add support for new iter functionality
[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                 /* This path cannot be hit for regular files unless in
3096                  * case of obscure races, so no need to to validate
3097                  * size. */
3098                 if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
3099                         return 0;
3100         } else if (rc != 0) {
3101                 CDEBUG_LIMIT((rc == -EACCES || rc == -EIDRM) ? D_INFO : D_ERROR,
3102                              "%s: revalidate FID "DFID" error: rc = %d\n",
3103                              ll_get_fsname(inode->i_sb, NULL, 0),
3104                              PFID(ll_inode2fid(inode)), rc);
3105         }
3106
3107         return rc;
3108 }
3109
3110 static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
3111 {
3112         struct inode *inode = dentry->d_inode;
3113         struct ptlrpc_request *req = NULL;
3114         struct obd_export *exp;
3115         int rc = 0;
3116         ENTRY;
3117
3118         LASSERT(inode != NULL);
3119
3120         CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p),name=%s\n",
3121                PFID(ll_inode2fid(inode)), inode, dentry->d_name.name);
3122
3123         exp = ll_i2mdexp(inode);
3124
3125         /* XXX: Enable OBD_CONNECT_ATTRFID to reduce unnecessary getattr RPC.
3126          *      But under CMD case, it caused some lock issues, should be fixed
3127          *      with new CMD ibits lock. See bug 12718 */
3128         if (exp_connect_flags(exp) & OBD_CONNECT_ATTRFID) {
3129                 struct lookup_intent oit = { .it_op = IT_GETATTR };
3130                 struct md_op_data *op_data;
3131
3132                 if (ibits == MDS_INODELOCK_LOOKUP)
3133                         oit.it_op = IT_LOOKUP;
3134
3135                 /* Call getattr by fid, so do not provide name at all. */
3136                 op_data = ll_prep_md_op_data(NULL, dentry->d_inode,
3137                                              dentry->d_inode, NULL, 0, 0,
3138                                              LUSTRE_OPC_ANY, NULL);
3139                 if (IS_ERR(op_data))
3140                         RETURN(PTR_ERR(op_data));
3141
3142                 rc = md_intent_lock(exp, op_data, &oit, &req,
3143                                     &ll_md_blocking_ast, 0);
3144                 ll_finish_md_op_data(op_data);
3145                 if (rc < 0) {
3146                         rc = ll_inode_revalidate_fini(inode, rc);
3147                         GOTO (out, rc);
3148                 }
3149
3150                 rc = ll_revalidate_it_finish(req, &oit, dentry);
3151                 if (rc != 0) {
3152                         ll_intent_release(&oit);
3153                         GOTO(out, rc);
3154                 }
3155
3156                 /* Unlinked? Unhash dentry, so it is not picked up later by
3157                    do_lookup() -> ll_revalidate_it(). We cannot use d_drop
3158                    here to preserve get_cwd functionality on 2.6.
3159                    Bug 10503 */
3160                 if (!dentry->d_inode->i_nlink)
3161                         d_lustre_invalidate(dentry, 0);
3162
3163                 ll_lookup_finish_locks(&oit, dentry);
3164         } else if (!ll_have_md_lock(dentry->d_inode, &ibits, LCK_MINMODE)) {
3165                 struct ll_sb_info *sbi = ll_i2sbi(dentry->d_inode);
3166                 u64 valid = OBD_MD_FLGETATTR;
3167                 struct md_op_data *op_data;
3168                 int ealen = 0;
3169
3170                 if (S_ISREG(inode->i_mode)) {
3171                         rc = ll_get_default_mdsize(sbi, &ealen);
3172                         if (rc)
3173                                 RETURN(rc);
3174                         valid |= OBD_MD_FLEASIZE | OBD_MD_FLMODEASIZE;
3175                 }
3176
3177                 op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL,
3178                                              0, ealen, LUSTRE_OPC_ANY,
3179                                              NULL);
3180                 if (IS_ERR(op_data))
3181                         RETURN(PTR_ERR(op_data));
3182
3183                 op_data->op_valid = valid;
3184                 rc = md_getattr(sbi->ll_md_exp, op_data, &req);
3185                 ll_finish_md_op_data(op_data);
3186                 if (rc) {
3187                         rc = ll_inode_revalidate_fini(inode, rc);
3188                         RETURN(rc);
3189                 }
3190
3191                 rc = ll_prep_inode(&inode, req, NULL, NULL);
3192         }
3193 out:
3194         ptlrpc_req_finished(req);
3195         return rc;
3196 }
3197
3198 static int ll_merge_md_attr(struct inode *inode)
3199 {
3200         struct cl_attr attr = { 0 };
3201         int rc;
3202
3203         LASSERT(ll_i2info(inode)->lli_lsm_md != NULL);
3204         rc = md_merge_attr(ll_i2mdexp(inode), ll_i2info(inode)->lli_lsm_md,
3205                            &attr, ll_md_blocking_ast);
3206         if (rc != 0)
3207                 RETURN(rc);
3208
3209         set_nlink(inode, attr.cat_nlink);
3210         inode->i_blocks = attr.cat_blocks;
3211         i_size_write(inode, attr.cat_size);
3212
3213         ll_i2info(inode)->lli_atime = attr.cat_atime;
3214         ll_i2info(inode)->lli_mtime = attr.cat_mtime;
3215         ll_i2info(inode)->lli_ctime = attr.cat_ctime;
3216
3217         RETURN(0);
3218 }
3219
3220 static int
3221 ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
3222 {
3223         struct inode    *inode = dentry->d_inode;
3224         int              rc;
3225         ENTRY;
3226
3227         rc = __ll_inode_revalidate(dentry, ibits);
3228         if (rc != 0)
3229                 RETURN(rc);
3230
3231         /* if object isn't regular file, don't validate size */
3232         if (!S_ISREG(inode->i_mode)) {
3233                 if (S_ISDIR(inode->i_mode) &&
3234                     ll_i2info(inode)->lli_lsm_md != NULL) {
3235                         rc = ll_merge_md_attr(inode);
3236                         if (rc != 0)
3237                                 RETURN(rc);
3238                 }
3239
3240                 LTIME_S(inode->i_atime) = ll_i2info(inode)->lli_atime;
3241                 LTIME_S(inode->i_mtime) = ll_i2info(inode)->lli_mtime;
3242                 LTIME_S(inode->i_ctime) = ll_i2info(inode)->lli_ctime;
3243         } else {
3244                 /* In case of restore, the MDT has the right size and has
3245                  * already send it back without granting the layout lock,
3246                  * inode is up-to-date so glimpse is useless.
3247                  * Also to glimpse we need the layout, in case of a running
3248                  * restore the MDT holds the layout lock so the glimpse will
3249                  * block up to the end of restore (getattr will block)
3250                  */
3251                 if (!ll_file_test_flag(ll_i2info(inode), LLIF_FILE_RESTORING))
3252                         rc = ll_glimpse_size(inode);
3253         }
3254         RETURN(rc);
3255 }
3256
3257 int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
3258 {
3259         struct inode *inode = de->d_inode;
3260         struct ll_sb_info *sbi = ll_i2sbi(inode);
3261         struct ll_inode_info *lli = ll_i2info(inode);
3262         int res = 0;
3263
3264         res = ll_inode_revalidate(de, MDS_INODELOCK_UPDATE |
3265                                       MDS_INODELOCK_LOOKUP);
3266         ll_stats_ops_tally(sbi, LPROC_LL_GETATTR, 1);
3267
3268         if (res)
3269                 return res;
3270
3271         stat->dev = inode->i_sb->s_dev;
3272         if (ll_need_32bit_api(sbi))
3273                 stat->ino = cl_fid_build_ino(&lli->lli_fid, 1);
3274         else
3275                 stat->ino = inode->i_ino;
3276         stat->mode = inode->i_mode;
3277         stat->uid = inode->i_uid;
3278         stat->gid = inode->i_gid;
3279         stat->rdev = inode->i_rdev;
3280         stat->atime = inode->i_atime;
3281         stat->mtime = inode->i_mtime;
3282         stat->ctime = inode->i_ctime;
3283         stat->blksize = 1 << inode->i_blkbits;
3284
3285         stat->nlink = inode->i_nlink;
3286         stat->size = i_size_read(inode);
3287         stat->blocks = inode->i_blocks;
3288
3289         return 0;
3290 }
3291
3292 static int ll_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3293                      __u64 start, __u64 len)
3294 {
3295         int             rc;
3296         size_t          num_bytes;
3297         struct fiemap   *fiemap;
3298         unsigned int    extent_count = fieinfo->fi_extents_max;
3299
3300         num_bytes = sizeof(*fiemap) + (extent_count *
3301                                        sizeof(struct fiemap_extent));
3302         OBD_ALLOC_LARGE(fiemap, num_bytes);
3303
3304         if (fiemap == NULL)
3305                 RETURN(-ENOMEM);
3306
3307         fiemap->fm_flags = fieinfo->fi_flags;
3308         fiemap->fm_extent_count = fieinfo->fi_extents_max;
3309         fiemap->fm_start = start;
3310         fiemap->fm_length = len;
3311         if (extent_count > 0 &&
3312             copy_from_user(&fiemap->fm_extents[0], fieinfo->fi_extents_start,
3313                            sizeof(struct fiemap_extent)) != 0)
3314                 GOTO(out, rc = -EFAULT);
3315
3316         rc = ll_do_fiemap(inode, fiemap, num_bytes);
3317
3318         fieinfo->fi_flags = fiemap->fm_flags;
3319         fieinfo->fi_extents_mapped = fiemap->fm_mapped_extents;
3320         if (extent_count > 0 &&
3321             copy_to_user(fieinfo->fi_extents_start, &fiemap->fm_extents[0],
3322                          fiemap->fm_mapped_extents *
3323                          sizeof(struct fiemap_extent)) != 0)
3324                 GOTO(out, rc = -EFAULT);
3325 out:
3326         OBD_FREE_LARGE(fiemap, num_bytes);
3327         return rc;
3328 }