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