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