]> git.karo-electronics.de Git - karo-tx-linux.git/blob - fs/xfs/xfs_iops.c
Merge branch 'xfs-bug-fixes-for-3.15-2' into for-next
[karo-tx-linux.git] / fs / xfs / xfs_iops.c
1 /*
2  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 #include "xfs.h"
19 #include "xfs_fs.h"
20 #include "xfs_shared.h"
21 #include "xfs_format.h"
22 #include "xfs_log_format.h"
23 #include "xfs_trans_resv.h"
24 #include "xfs_sb.h"
25 #include "xfs_ag.h"
26 #include "xfs_mount.h"
27 #include "xfs_da_format.h"
28 #include "xfs_inode.h"
29 #include "xfs_bmap.h"
30 #include "xfs_bmap_util.h"
31 #include "xfs_acl.h"
32 #include "xfs_quota.h"
33 #include "xfs_error.h"
34 #include "xfs_attr.h"
35 #include "xfs_trans.h"
36 #include "xfs_trace.h"
37 #include "xfs_icache.h"
38 #include "xfs_symlink.h"
39 #include "xfs_da_btree.h"
40 #include "xfs_dir2_priv.h"
41 #include "xfs_dinode.h"
42
43 #include <linux/capability.h>
44 #include <linux/xattr.h>
45 #include <linux/namei.h>
46 #include <linux/posix_acl.h>
47 #include <linux/security.h>
48 #include <linux/fiemap.h>
49 #include <linux/slab.h>
50
51 /*
52  * Directories have different lock order w.r.t. mmap_sem compared to regular
53  * files. This is due to readdir potentially triggering page faults on a user
54  * buffer inside filldir(), and this happens with the ilock on the directory
55  * held. For regular files, the lock order is the other way around - the
56  * mmap_sem is taken during the page fault, and then we lock the ilock to do
57  * block mapping. Hence we need a different class for the directory ilock so
58  * that lockdep can tell them apart.
59  */
60 static struct lock_class_key xfs_nondir_ilock_class;
61 static struct lock_class_key xfs_dir_ilock_class;
62
63 static int
64 xfs_initxattrs(
65         struct inode            *inode,
66         const struct xattr      *xattr_array,
67         void                    *fs_info)
68 {
69         const struct xattr      *xattr;
70         struct xfs_inode        *ip = XFS_I(inode);
71         int                     error = 0;
72
73         for (xattr = xattr_array; xattr->name != NULL; xattr++) {
74                 error = xfs_attr_set(ip, xattr->name, xattr->value,
75                                      xattr->value_len, ATTR_SECURE);
76                 if (error < 0)
77                         break;
78         }
79         return error;
80 }
81
82 /*
83  * Hook in SELinux.  This is not quite correct yet, what we really need
84  * here (as we do for default ACLs) is a mechanism by which creation of
85  * these attrs can be journalled at inode creation time (along with the
86  * inode, of course, such that log replay can't cause these to be lost).
87  */
88
89 STATIC int
90 xfs_init_security(
91         struct inode    *inode,
92         struct inode    *dir,
93         const struct qstr *qstr)
94 {
95         return security_inode_init_security(inode, dir, qstr,
96                                             &xfs_initxattrs, NULL);
97 }
98
99 static void
100 xfs_dentry_to_name(
101         struct xfs_name *namep,
102         struct dentry   *dentry,
103         int             mode)
104 {
105         namep->name = dentry->d_name.name;
106         namep->len = dentry->d_name.len;
107         namep->type = xfs_mode_to_ftype[(mode & S_IFMT) >> S_SHIFT];
108 }
109
110 STATIC void
111 xfs_cleanup_inode(
112         struct inode    *dir,
113         struct inode    *inode,
114         struct dentry   *dentry)
115 {
116         struct xfs_name teardown;
117
118         /* Oh, the horror.
119          * If we can't add the ACL or we fail in
120          * xfs_init_security we must back out.
121          * ENOSPC can hit here, among other things.
122          */
123         xfs_dentry_to_name(&teardown, dentry, 0);
124
125         xfs_remove(XFS_I(dir), &teardown, XFS_I(inode));
126         iput(inode);
127 }
128
129 STATIC int
130 xfs_vn_mknod(
131         struct inode    *dir,
132         struct dentry   *dentry,
133         umode_t         mode,
134         dev_t           rdev)
135 {
136         struct inode    *inode;
137         struct xfs_inode *ip = NULL;
138         struct posix_acl *default_acl, *acl;
139         struct xfs_name name;
140         int             error;
141
142         /*
143          * Irix uses Missed'em'V split, but doesn't want to see
144          * the upper 5 bits of (14bit) major.
145          */
146         if (S_ISCHR(mode) || S_ISBLK(mode)) {
147                 if (unlikely(!sysv_valid_dev(rdev) || MAJOR(rdev) & ~0x1ff))
148                         return -EINVAL;
149                 rdev = sysv_encode_dev(rdev);
150         } else {
151                 rdev = 0;
152         }
153
154         error = posix_acl_create(dir, &mode, &default_acl, &acl);
155         if (error)
156                 return error;
157
158         xfs_dentry_to_name(&name, dentry, mode);
159         error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip);
160         if (unlikely(error))
161                 goto out_free_acl;
162
163         inode = VFS_I(ip);
164
165         error = xfs_init_security(inode, dir, &dentry->d_name);
166         if (unlikely(error))
167                 goto out_cleanup_inode;
168
169 #ifdef CONFIG_XFS_POSIX_ACL
170         if (default_acl) {
171                 error = xfs_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
172                 if (error)
173                         goto out_cleanup_inode;
174         }
175         if (acl) {
176                 error = xfs_set_acl(inode, acl, ACL_TYPE_ACCESS);
177                 if (error)
178                         goto out_cleanup_inode;
179         }
180 #endif
181
182         d_instantiate(dentry, inode);
183  out_free_acl:
184         if (default_acl)
185                 posix_acl_release(default_acl);
186         if (acl)
187                 posix_acl_release(acl);
188         return -error;
189
190  out_cleanup_inode:
191         xfs_cleanup_inode(dir, inode, dentry);
192         goto out_free_acl;
193 }
194
195 STATIC int
196 xfs_vn_create(
197         struct inode    *dir,
198         struct dentry   *dentry,
199         umode_t         mode,
200         bool            flags)
201 {
202         return xfs_vn_mknod(dir, dentry, mode, 0);
203 }
204
205 STATIC int
206 xfs_vn_mkdir(
207         struct inode    *dir,
208         struct dentry   *dentry,
209         umode_t         mode)
210 {
211         return xfs_vn_mknod(dir, dentry, mode|S_IFDIR, 0);
212 }
213
214 STATIC struct dentry *
215 xfs_vn_lookup(
216         struct inode    *dir,
217         struct dentry   *dentry,
218         unsigned int flags)
219 {
220         struct xfs_inode *cip;
221         struct xfs_name name;
222         int             error;
223
224         if (dentry->d_name.len >= MAXNAMELEN)
225                 return ERR_PTR(-ENAMETOOLONG);
226
227         xfs_dentry_to_name(&name, dentry, 0);
228         error = xfs_lookup(XFS_I(dir), &name, &cip, NULL);
229         if (unlikely(error)) {
230                 if (unlikely(error != ENOENT))
231                         return ERR_PTR(-error);
232                 d_add(dentry, NULL);
233                 return NULL;
234         }
235
236         return d_splice_alias(VFS_I(cip), dentry);
237 }
238
239 STATIC struct dentry *
240 xfs_vn_ci_lookup(
241         struct inode    *dir,
242         struct dentry   *dentry,
243         unsigned int flags)
244 {
245         struct xfs_inode *ip;
246         struct xfs_name xname;
247         struct xfs_name ci_name;
248         struct qstr     dname;
249         int             error;
250
251         if (dentry->d_name.len >= MAXNAMELEN)
252                 return ERR_PTR(-ENAMETOOLONG);
253
254         xfs_dentry_to_name(&xname, dentry, 0);
255         error = xfs_lookup(XFS_I(dir), &xname, &ip, &ci_name);
256         if (unlikely(error)) {
257                 if (unlikely(error != ENOENT))
258                         return ERR_PTR(-error);
259                 /*
260                  * call d_add(dentry, NULL) here when d_drop_negative_children
261                  * is called in xfs_vn_mknod (ie. allow negative dentries
262                  * with CI filesystems).
263                  */
264                 return NULL;
265         }
266
267         /* if exact match, just splice and exit */
268         if (!ci_name.name)
269                 return d_splice_alias(VFS_I(ip), dentry);
270
271         /* else case-insensitive match... */
272         dname.name = ci_name.name;
273         dname.len = ci_name.len;
274         dentry = d_add_ci(dentry, VFS_I(ip), &dname);
275         kmem_free(ci_name.name);
276         return dentry;
277 }
278
279 STATIC int
280 xfs_vn_link(
281         struct dentry   *old_dentry,
282         struct inode    *dir,
283         struct dentry   *dentry)
284 {
285         struct inode    *inode = old_dentry->d_inode;
286         struct xfs_name name;
287         int             error;
288
289         xfs_dentry_to_name(&name, dentry, inode->i_mode);
290
291         error = xfs_link(XFS_I(dir), XFS_I(inode), &name);
292         if (unlikely(error))
293                 return -error;
294
295         ihold(inode);
296         d_instantiate(dentry, inode);
297         return 0;
298 }
299
300 STATIC int
301 xfs_vn_unlink(
302         struct inode    *dir,
303         struct dentry   *dentry)
304 {
305         struct xfs_name name;
306         int             error;
307
308         xfs_dentry_to_name(&name, dentry, 0);
309
310         error = -xfs_remove(XFS_I(dir), &name, XFS_I(dentry->d_inode));
311         if (error)
312                 return error;
313
314         /*
315          * With unlink, the VFS makes the dentry "negative": no inode,
316          * but still hashed. This is incompatible with case-insensitive
317          * mode, so invalidate (unhash) the dentry in CI-mode.
318          */
319         if (xfs_sb_version_hasasciici(&XFS_M(dir->i_sb)->m_sb))
320                 d_invalidate(dentry);
321         return 0;
322 }
323
324 STATIC int
325 xfs_vn_symlink(
326         struct inode    *dir,
327         struct dentry   *dentry,
328         const char      *symname)
329 {
330         struct inode    *inode;
331         struct xfs_inode *cip = NULL;
332         struct xfs_name name;
333         int             error;
334         umode_t         mode;
335
336         mode = S_IFLNK |
337                 (irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO);
338         xfs_dentry_to_name(&name, dentry, mode);
339
340         error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip);
341         if (unlikely(error))
342                 goto out;
343
344         inode = VFS_I(cip);
345
346         error = xfs_init_security(inode, dir, &dentry->d_name);
347         if (unlikely(error))
348                 goto out_cleanup_inode;
349
350         d_instantiate(dentry, inode);
351         return 0;
352
353  out_cleanup_inode:
354         xfs_cleanup_inode(dir, inode, dentry);
355  out:
356         return -error;
357 }
358
359 STATIC int
360 xfs_vn_rename(
361         struct inode    *odir,
362         struct dentry   *odentry,
363         struct inode    *ndir,
364         struct dentry   *ndentry)
365 {
366         struct inode    *new_inode = ndentry->d_inode;
367         struct xfs_name oname;
368         struct xfs_name nname;
369
370         xfs_dentry_to_name(&oname, odentry, 0);
371         xfs_dentry_to_name(&nname, ndentry, odentry->d_inode->i_mode);
372
373         return -xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode),
374                            XFS_I(ndir), &nname, new_inode ?
375                                                 XFS_I(new_inode) : NULL);
376 }
377
378 /*
379  * careful here - this function can get called recursively, so
380  * we need to be very careful about how much stack we use.
381  * uio is kmalloced for this reason...
382  */
383 STATIC void *
384 xfs_vn_follow_link(
385         struct dentry           *dentry,
386         struct nameidata        *nd)
387 {
388         char                    *link;
389         int                     error = -ENOMEM;
390
391         link = kmalloc(MAXPATHLEN+1, GFP_KERNEL);
392         if (!link)
393                 goto out_err;
394
395         error = -xfs_readlink(XFS_I(dentry->d_inode), link);
396         if (unlikely(error))
397                 goto out_kfree;
398
399         nd_set_link(nd, link);
400         return NULL;
401
402  out_kfree:
403         kfree(link);
404  out_err:
405         nd_set_link(nd, ERR_PTR(error));
406         return NULL;
407 }
408
409 STATIC int
410 xfs_vn_getattr(
411         struct vfsmount         *mnt,
412         struct dentry           *dentry,
413         struct kstat            *stat)
414 {
415         struct inode            *inode = dentry->d_inode;
416         struct xfs_inode        *ip = XFS_I(inode);
417         struct xfs_mount        *mp = ip->i_mount;
418
419         trace_xfs_getattr(ip);
420
421         if (XFS_FORCED_SHUTDOWN(mp))
422                 return -XFS_ERROR(EIO);
423
424         stat->size = XFS_ISIZE(ip);
425         stat->dev = inode->i_sb->s_dev;
426         stat->mode = ip->i_d.di_mode;
427         stat->nlink = ip->i_d.di_nlink;
428         stat->uid = inode->i_uid;
429         stat->gid = inode->i_gid;
430         stat->ino = ip->i_ino;
431         stat->atime = inode->i_atime;
432         stat->mtime = inode->i_mtime;
433         stat->ctime = inode->i_ctime;
434         stat->blocks =
435                 XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks);
436
437
438         switch (inode->i_mode & S_IFMT) {
439         case S_IFBLK:
440         case S_IFCHR:
441                 stat->blksize = BLKDEV_IOSIZE;
442                 stat->rdev = MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
443                                    sysv_minor(ip->i_df.if_u2.if_rdev));
444                 break;
445         default:
446                 if (XFS_IS_REALTIME_INODE(ip)) {
447                         /*
448                          * If the file blocks are being allocated from a
449                          * realtime volume, then return the inode's realtime
450                          * extent size or the realtime volume's extent size.
451                          */
452                         stat->blksize =
453                                 xfs_get_extsz_hint(ip) << mp->m_sb.sb_blocklog;
454                 } else
455                         stat->blksize = xfs_preferred_iosize(mp);
456                 stat->rdev = 0;
457                 break;
458         }
459
460         return 0;
461 }
462
463 static void
464 xfs_setattr_mode(
465         struct xfs_inode        *ip,
466         struct iattr            *iattr)
467 {
468         struct inode            *inode = VFS_I(ip);
469         umode_t                 mode = iattr->ia_mode;
470
471         ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
472
473         ip->i_d.di_mode &= S_IFMT;
474         ip->i_d.di_mode |= mode & ~S_IFMT;
475
476         inode->i_mode &= S_IFMT;
477         inode->i_mode |= mode & ~S_IFMT;
478 }
479
480 static void
481 xfs_setattr_time(
482         struct xfs_inode        *ip,
483         struct iattr            *iattr)
484 {
485         struct inode            *inode = VFS_I(ip);
486
487         ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
488
489         if (iattr->ia_valid & ATTR_ATIME) {
490                 inode->i_atime = iattr->ia_atime;
491                 ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec;
492                 ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec;
493         }
494         if (iattr->ia_valid & ATTR_CTIME) {
495                 inode->i_ctime = iattr->ia_ctime;
496                 ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec;
497                 ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec;
498         }
499         if (iattr->ia_valid & ATTR_MTIME) {
500                 inode->i_mtime = iattr->ia_mtime;
501                 ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec;
502                 ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec;
503         }
504 }
505
506 int
507 xfs_setattr_nonsize(
508         struct xfs_inode        *ip,
509         struct iattr            *iattr,
510         int                     flags)
511 {
512         xfs_mount_t             *mp = ip->i_mount;
513         struct inode            *inode = VFS_I(ip);
514         int                     mask = iattr->ia_valid;
515         xfs_trans_t             *tp;
516         int                     error;
517         kuid_t                  uid = GLOBAL_ROOT_UID, iuid = GLOBAL_ROOT_UID;
518         kgid_t                  gid = GLOBAL_ROOT_GID, igid = GLOBAL_ROOT_GID;
519         struct xfs_dquot        *udqp = NULL, *gdqp = NULL;
520         struct xfs_dquot        *olddquot1 = NULL, *olddquot2 = NULL;
521
522         trace_xfs_setattr(ip);
523
524         /* If acls are being inherited, we already have this checked */
525         if (!(flags & XFS_ATTR_NOACL)) {
526                 if (mp->m_flags & XFS_MOUNT_RDONLY)
527                         return XFS_ERROR(EROFS);
528
529                 if (XFS_FORCED_SHUTDOWN(mp))
530                         return XFS_ERROR(EIO);
531
532                 error = -inode_change_ok(inode, iattr);
533                 if (error)
534                         return XFS_ERROR(error);
535         }
536
537         ASSERT((mask & ATTR_SIZE) == 0);
538
539         /*
540          * If disk quotas is on, we make sure that the dquots do exist on disk,
541          * before we start any other transactions. Trying to do this later
542          * is messy. We don't care to take a readlock to look at the ids
543          * in inode here, because we can't hold it across the trans_reserve.
544          * If the IDs do change before we take the ilock, we're covered
545          * because the i_*dquot fields will get updated anyway.
546          */
547         if (XFS_IS_QUOTA_ON(mp) && (mask & (ATTR_UID|ATTR_GID))) {
548                 uint    qflags = 0;
549
550                 if ((mask & ATTR_UID) && XFS_IS_UQUOTA_ON(mp)) {
551                         uid = iattr->ia_uid;
552                         qflags |= XFS_QMOPT_UQUOTA;
553                 } else {
554                         uid = inode->i_uid;
555                 }
556                 if ((mask & ATTR_GID) && XFS_IS_GQUOTA_ON(mp)) {
557                         gid = iattr->ia_gid;
558                         qflags |= XFS_QMOPT_GQUOTA;
559                 }  else {
560                         gid = inode->i_gid;
561                 }
562
563                 /*
564                  * We take a reference when we initialize udqp and gdqp,
565                  * so it is important that we never blindly double trip on
566                  * the same variable. See xfs_create() for an example.
567                  */
568                 ASSERT(udqp == NULL);
569                 ASSERT(gdqp == NULL);
570                 error = xfs_qm_vop_dqalloc(ip, xfs_kuid_to_uid(uid),
571                                            xfs_kgid_to_gid(gid),
572                                            xfs_get_projid(ip),
573                                            qflags, &udqp, &gdqp, NULL);
574                 if (error)
575                         return error;
576         }
577
578         tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE);
579         error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0);
580         if (error)
581                 goto out_dqrele;
582
583         xfs_ilock(ip, XFS_ILOCK_EXCL);
584
585         /*
586          * Change file ownership.  Must be the owner or privileged.
587          */
588         if (mask & (ATTR_UID|ATTR_GID)) {
589                 /*
590                  * These IDs could have changed since we last looked at them.
591                  * But, we're assured that if the ownership did change
592                  * while we didn't have the inode locked, inode's dquot(s)
593                  * would have changed also.
594                  */
595                 iuid = inode->i_uid;
596                 igid = inode->i_gid;
597                 gid = (mask & ATTR_GID) ? iattr->ia_gid : igid;
598                 uid = (mask & ATTR_UID) ? iattr->ia_uid : iuid;
599
600                 /*
601                  * Do a quota reservation only if uid/gid is actually
602                  * going to change.
603                  */
604                 if (XFS_IS_QUOTA_RUNNING(mp) &&
605                     ((XFS_IS_UQUOTA_ON(mp) && !uid_eq(iuid, uid)) ||
606                      (XFS_IS_GQUOTA_ON(mp) && !gid_eq(igid, gid)))) {
607                         ASSERT(tp);
608                         error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp,
609                                                 NULL, capable(CAP_FOWNER) ?
610                                                 XFS_QMOPT_FORCE_RES : 0);
611                         if (error)      /* out of quota */
612                                 goto out_trans_cancel;
613                 }
614         }
615
616         xfs_trans_ijoin(tp, ip, 0);
617
618         /*
619          * Change file ownership.  Must be the owner or privileged.
620          */
621         if (mask & (ATTR_UID|ATTR_GID)) {
622                 /*
623                  * CAP_FSETID overrides the following restrictions:
624                  *
625                  * The set-user-ID and set-group-ID bits of a file will be
626                  * cleared upon successful return from chown()
627                  */
628                 if ((ip->i_d.di_mode & (S_ISUID|S_ISGID)) &&
629                     !capable(CAP_FSETID))
630                         ip->i_d.di_mode &= ~(S_ISUID|S_ISGID);
631
632                 /*
633                  * Change the ownerships and register quota modifications
634                  * in the transaction.
635                  */
636                 if (!uid_eq(iuid, uid)) {
637                         if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_UQUOTA_ON(mp)) {
638                                 ASSERT(mask & ATTR_UID);
639                                 ASSERT(udqp);
640                                 olddquot1 = xfs_qm_vop_chown(tp, ip,
641                                                         &ip->i_udquot, udqp);
642                         }
643                         ip->i_d.di_uid = xfs_kuid_to_uid(uid);
644                         inode->i_uid = uid;
645                 }
646                 if (!gid_eq(igid, gid)) {
647                         if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_GQUOTA_ON(mp)) {
648                                 ASSERT(xfs_sb_version_has_pquotino(&mp->m_sb) ||
649                                        !XFS_IS_PQUOTA_ON(mp));
650                                 ASSERT(mask & ATTR_GID);
651                                 ASSERT(gdqp);
652                                 olddquot2 = xfs_qm_vop_chown(tp, ip,
653                                                         &ip->i_gdquot, gdqp);
654                         }
655                         ip->i_d.di_gid = xfs_kgid_to_gid(gid);
656                         inode->i_gid = gid;
657                 }
658         }
659
660         if (mask & ATTR_MODE)
661                 xfs_setattr_mode(ip, iattr);
662         if (mask & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
663                 xfs_setattr_time(ip, iattr);
664
665         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
666
667         XFS_STATS_INC(xs_ig_attrchg);
668
669         if (mp->m_flags & XFS_MOUNT_WSYNC)
670                 xfs_trans_set_sync(tp);
671         error = xfs_trans_commit(tp, 0);
672
673         xfs_iunlock(ip, XFS_ILOCK_EXCL);
674
675         /*
676          * Release any dquot(s) the inode had kept before chown.
677          */
678         xfs_qm_dqrele(olddquot1);
679         xfs_qm_dqrele(olddquot2);
680         xfs_qm_dqrele(udqp);
681         xfs_qm_dqrele(gdqp);
682
683         if (error)
684                 return XFS_ERROR(error);
685
686         /*
687          * XXX(hch): Updating the ACL entries is not atomic vs the i_mode
688          *           update.  We could avoid this with linked transactions
689          *           and passing down the transaction pointer all the way
690          *           to attr_set.  No previous user of the generic
691          *           Posix ACL code seems to care about this issue either.
692          */
693         if ((mask & ATTR_MODE) && !(flags & XFS_ATTR_NOACL)) {
694                 error = -posix_acl_chmod(inode, inode->i_mode);
695                 if (error)
696                         return XFS_ERROR(error);
697         }
698
699         return 0;
700
701 out_trans_cancel:
702         xfs_trans_cancel(tp, 0);
703         xfs_iunlock(ip, XFS_ILOCK_EXCL);
704 out_dqrele:
705         xfs_qm_dqrele(udqp);
706         xfs_qm_dqrele(gdqp);
707         return error;
708 }
709
710 /*
711  * Truncate file.  Must have write permission and not be a directory.
712  */
713 int
714 xfs_setattr_size(
715         struct xfs_inode        *ip,
716         struct iattr            *iattr)
717 {
718         struct xfs_mount        *mp = ip->i_mount;
719         struct inode            *inode = VFS_I(ip);
720         xfs_off_t               oldsize, newsize;
721         struct xfs_trans        *tp;
722         int                     error;
723         uint                    lock_flags = 0;
724         uint                    commit_flags = 0;
725
726         trace_xfs_setattr(ip);
727
728         if (mp->m_flags & XFS_MOUNT_RDONLY)
729                 return XFS_ERROR(EROFS);
730
731         if (XFS_FORCED_SHUTDOWN(mp))
732                 return XFS_ERROR(EIO);
733
734         error = -inode_change_ok(inode, iattr);
735         if (error)
736                 return XFS_ERROR(error);
737
738         ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
739         ASSERT(S_ISREG(ip->i_d.di_mode));
740         ASSERT((iattr->ia_valid & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET|
741                 ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0);
742
743         oldsize = inode->i_size;
744         newsize = iattr->ia_size;
745
746         /*
747          * Short circuit the truncate case for zero length files.
748          */
749         if (newsize == 0 && oldsize == 0 && ip->i_d.di_nextents == 0) {
750                 if (!(iattr->ia_valid & (ATTR_CTIME|ATTR_MTIME)))
751                         return 0;
752
753                 /*
754                  * Use the regular setattr path to update the timestamps.
755                  */
756                 iattr->ia_valid &= ~ATTR_SIZE;
757                 return xfs_setattr_nonsize(ip, iattr, 0);
758         }
759
760         /*
761          * Make sure that the dquots are attached to the inode.
762          */
763         error = xfs_qm_dqattach(ip, 0);
764         if (error)
765                 return error;
766
767         /*
768          * Now we can make the changes.  Before we join the inode to the
769          * transaction, take care of the part of the truncation that must be
770          * done without the inode lock.  This needs to be done before joining
771          * the inode to the transaction, because the inode cannot be unlocked
772          * once it is a part of the transaction.
773          */
774         if (newsize > oldsize) {
775                 /*
776                  * Do the first part of growing a file: zero any data in the
777                  * last block that is beyond the old EOF.  We need to do this
778                  * before the inode is joined to the transaction to modify
779                  * i_size.
780                  */
781                 error = xfs_zero_eof(ip, newsize, oldsize);
782                 if (error)
783                         return error;
784         }
785
786         /*
787          * We are going to log the inode size change in this transaction so
788          * any previous writes that are beyond the on disk EOF and the new
789          * EOF that have not been written out need to be written here.  If we
790          * do not write the data out, we expose ourselves to the null files
791          * problem.
792          *
793          * Only flush from the on disk size to the smaller of the in memory
794          * file size or the new size as that's the range we really care about
795          * here and prevents waiting for other data not within the range we
796          * care about here.
797          */
798         if (oldsize != ip->i_d.di_size && newsize > ip->i_d.di_size) {
799                 error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
800                                                       ip->i_d.di_size, newsize);
801                 if (error)
802                         return error;
803         }
804
805         /*
806          * Wait for all direct I/O to complete.
807          */
808         inode_dio_wait(inode);
809
810         error = -block_truncate_page(inode->i_mapping, newsize, xfs_get_blocks);
811         if (error)
812                 return error;
813
814         tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_SIZE);
815         error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0);
816         if (error)
817                 goto out_trans_cancel;
818
819         truncate_setsize(inode, newsize);
820
821         commit_flags = XFS_TRANS_RELEASE_LOG_RES;
822         lock_flags |= XFS_ILOCK_EXCL;
823
824         xfs_ilock(ip, XFS_ILOCK_EXCL);
825
826         xfs_trans_ijoin(tp, ip, 0);
827
828         /*
829          * Only change the c/mtime if we are changing the size or we are
830          * explicitly asked to change it.  This handles the semantic difference
831          * between truncate() and ftruncate() as implemented in the VFS.
832          *
833          * The regular truncate() case without ATTR_CTIME and ATTR_MTIME is a
834          * special case where we need to update the times despite not having
835          * these flags set.  For all other operations the VFS set these flags
836          * explicitly if it wants a timestamp update.
837          */
838         if (newsize != oldsize &&
839             !(iattr->ia_valid & (ATTR_CTIME | ATTR_MTIME))) {
840                 iattr->ia_ctime = iattr->ia_mtime =
841                         current_fs_time(inode->i_sb);
842                 iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME;
843         }
844
845         /*
846          * The first thing we do is set the size to new_size permanently on
847          * disk.  This way we don't have to worry about anyone ever being able
848          * to look at the data being freed even in the face of a crash.
849          * What we're getting around here is the case where we free a block, it
850          * is allocated to another file, it is written to, and then we crash.
851          * If the new data gets written to the file but the log buffers
852          * containing the free and reallocation don't, then we'd end up with
853          * garbage in the blocks being freed.  As long as we make the new size
854          * permanent before actually freeing any blocks it doesn't matter if
855          * they get written to.
856          */
857         ip->i_d.di_size = newsize;
858         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
859
860         if (newsize <= oldsize) {
861                 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, newsize);
862                 if (error)
863                         goto out_trans_abort;
864
865                 /*
866                  * Truncated "down", so we're removing references to old data
867                  * here - if we delay flushing for a long time, we expose
868                  * ourselves unduly to the notorious NULL files problem.  So,
869                  * we mark this inode and flush it when the file is closed,
870                  * and do not wait the usual (long) time for writeout.
871                  */
872                 xfs_iflags_set(ip, XFS_ITRUNCATED);
873
874                 /* A truncate down always removes post-EOF blocks. */
875                 xfs_inode_clear_eofblocks_tag(ip);
876         }
877
878         if (iattr->ia_valid & ATTR_MODE)
879                 xfs_setattr_mode(ip, iattr);
880         if (iattr->ia_valid & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME))
881                 xfs_setattr_time(ip, iattr);
882
883         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
884
885         XFS_STATS_INC(xs_ig_attrchg);
886
887         if (mp->m_flags & XFS_MOUNT_WSYNC)
888                 xfs_trans_set_sync(tp);
889
890         error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
891 out_unlock:
892         if (lock_flags)
893                 xfs_iunlock(ip, lock_flags);
894         return error;
895
896 out_trans_abort:
897         commit_flags |= XFS_TRANS_ABORT;
898 out_trans_cancel:
899         xfs_trans_cancel(tp, commit_flags);
900         goto out_unlock;
901 }
902
903 STATIC int
904 xfs_vn_setattr(
905         struct dentry           *dentry,
906         struct iattr            *iattr)
907 {
908         struct xfs_inode        *ip = XFS_I(dentry->d_inode);
909         int                     error;
910
911         if (iattr->ia_valid & ATTR_SIZE) {
912                 xfs_ilock(ip, XFS_IOLOCK_EXCL);
913                 error = xfs_setattr_size(ip, iattr);
914                 xfs_iunlock(ip, XFS_IOLOCK_EXCL);
915         } else {
916                 error = xfs_setattr_nonsize(ip, iattr, 0);
917         }
918
919         return -error;
920 }
921
922 STATIC int
923 xfs_vn_update_time(
924         struct inode            *inode,
925         struct timespec         *now,
926         int                     flags)
927 {
928         struct xfs_inode        *ip = XFS_I(inode);
929         struct xfs_mount        *mp = ip->i_mount;
930         struct xfs_trans        *tp;
931         int                     error;
932
933         trace_xfs_update_time(ip);
934
935         tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS);
936         error = xfs_trans_reserve(tp, &M_RES(mp)->tr_fsyncts, 0, 0);
937         if (error) {
938                 xfs_trans_cancel(tp, 0);
939                 return -error;
940         }
941
942         xfs_ilock(ip, XFS_ILOCK_EXCL);
943         if (flags & S_CTIME) {
944                 inode->i_ctime = *now;
945                 ip->i_d.di_ctime.t_sec = (__int32_t)now->tv_sec;
946                 ip->i_d.di_ctime.t_nsec = (__int32_t)now->tv_nsec;
947         }
948         if (flags & S_MTIME) {
949                 inode->i_mtime = *now;
950                 ip->i_d.di_mtime.t_sec = (__int32_t)now->tv_sec;
951                 ip->i_d.di_mtime.t_nsec = (__int32_t)now->tv_nsec;
952         }
953         if (flags & S_ATIME) {
954                 inode->i_atime = *now;
955                 ip->i_d.di_atime.t_sec = (__int32_t)now->tv_sec;
956                 ip->i_d.di_atime.t_nsec = (__int32_t)now->tv_nsec;
957         }
958         xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
959         xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP);
960         return -xfs_trans_commit(tp, 0);
961 }
962
963 #define XFS_FIEMAP_FLAGS        (FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR)
964
965 /*
966  * Call fiemap helper to fill in user data.
967  * Returns positive errors to xfs_getbmap.
968  */
969 STATIC int
970 xfs_fiemap_format(
971         void                    **arg,
972         struct getbmapx         *bmv,
973         int                     *full)
974 {
975         int                     error;
976         struct fiemap_extent_info *fieinfo = *arg;
977         u32                     fiemap_flags = 0;
978         u64                     logical, physical, length;
979
980         /* Do nothing for a hole */
981         if (bmv->bmv_block == -1LL)
982                 return 0;
983
984         logical = BBTOB(bmv->bmv_offset);
985         physical = BBTOB(bmv->bmv_block);
986         length = BBTOB(bmv->bmv_length);
987
988         if (bmv->bmv_oflags & BMV_OF_PREALLOC)
989                 fiemap_flags |= FIEMAP_EXTENT_UNWRITTEN;
990         else if (bmv->bmv_oflags & BMV_OF_DELALLOC) {
991                 fiemap_flags |= (FIEMAP_EXTENT_DELALLOC |
992                                  FIEMAP_EXTENT_UNKNOWN);
993                 physical = 0;   /* no block yet */
994         }
995         if (bmv->bmv_oflags & BMV_OF_LAST)
996                 fiemap_flags |= FIEMAP_EXTENT_LAST;
997
998         error = fiemap_fill_next_extent(fieinfo, logical, physical,
999                                         length, fiemap_flags);
1000         if (error > 0) {
1001                 error = 0;
1002                 *full = 1;      /* user array now full */
1003         }
1004
1005         return -error;
1006 }
1007
1008 STATIC int
1009 xfs_vn_fiemap(
1010         struct inode            *inode,
1011         struct fiemap_extent_info *fieinfo,
1012         u64                     start,
1013         u64                     length)
1014 {
1015         xfs_inode_t             *ip = XFS_I(inode);
1016         struct getbmapx         bm;
1017         int                     error;
1018
1019         error = fiemap_check_flags(fieinfo, XFS_FIEMAP_FLAGS);
1020         if (error)
1021                 return error;
1022
1023         /* Set up bmap header for xfs internal routine */
1024         bm.bmv_offset = BTOBB(start);
1025         /* Special case for whole file */
1026         if (length == FIEMAP_MAX_OFFSET)
1027                 bm.bmv_length = -1LL;
1028         else
1029                 bm.bmv_length = BTOBB(length);
1030
1031         /* We add one because in getbmap world count includes the header */
1032         bm.bmv_count = !fieinfo->fi_extents_max ? MAXEXTNUM :
1033                                         fieinfo->fi_extents_max + 1;
1034         bm.bmv_count = min_t(__s32, bm.bmv_count,
1035                              (PAGE_SIZE * 16 / sizeof(struct getbmapx)));
1036         bm.bmv_iflags = BMV_IF_PREALLOC | BMV_IF_NO_HOLES;
1037         if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR)
1038                 bm.bmv_iflags |= BMV_IF_ATTRFORK;
1039         if (!(fieinfo->fi_flags & FIEMAP_FLAG_SYNC))
1040                 bm.bmv_iflags |= BMV_IF_DELALLOC;
1041
1042         error = xfs_getbmap(ip, &bm, xfs_fiemap_format, fieinfo);
1043         if (error)
1044                 return -error;
1045
1046         return 0;
1047 }
1048
1049 static const struct inode_operations xfs_inode_operations = {
1050         .get_acl                = xfs_get_acl,
1051         .set_acl                = xfs_set_acl,
1052         .getattr                = xfs_vn_getattr,
1053         .setattr                = xfs_vn_setattr,
1054         .setxattr               = generic_setxattr,
1055         .getxattr               = generic_getxattr,
1056         .removexattr            = generic_removexattr,
1057         .listxattr              = xfs_vn_listxattr,
1058         .fiemap                 = xfs_vn_fiemap,
1059         .update_time            = xfs_vn_update_time,
1060 };
1061
1062 static const struct inode_operations xfs_dir_inode_operations = {
1063         .create                 = xfs_vn_create,
1064         .lookup                 = xfs_vn_lookup,
1065         .link                   = xfs_vn_link,
1066         .unlink                 = xfs_vn_unlink,
1067         .symlink                = xfs_vn_symlink,
1068         .mkdir                  = xfs_vn_mkdir,
1069         /*
1070          * Yes, XFS uses the same method for rmdir and unlink.
1071          *
1072          * There are some subtile differences deeper in the code,
1073          * but we use S_ISDIR to check for those.
1074          */
1075         .rmdir                  = xfs_vn_unlink,
1076         .mknod                  = xfs_vn_mknod,
1077         .rename                 = xfs_vn_rename,
1078         .get_acl                = xfs_get_acl,
1079         .set_acl                = xfs_set_acl,
1080         .getattr                = xfs_vn_getattr,
1081         .setattr                = xfs_vn_setattr,
1082         .setxattr               = generic_setxattr,
1083         .getxattr               = generic_getxattr,
1084         .removexattr            = generic_removexattr,
1085         .listxattr              = xfs_vn_listxattr,
1086         .update_time            = xfs_vn_update_time,
1087 };
1088
1089 static const struct inode_operations xfs_dir_ci_inode_operations = {
1090         .create                 = xfs_vn_create,
1091         .lookup                 = xfs_vn_ci_lookup,
1092         .link                   = xfs_vn_link,
1093         .unlink                 = xfs_vn_unlink,
1094         .symlink                = xfs_vn_symlink,
1095         .mkdir                  = xfs_vn_mkdir,
1096         /*
1097          * Yes, XFS uses the same method for rmdir and unlink.
1098          *
1099          * There are some subtile differences deeper in the code,
1100          * but we use S_ISDIR to check for those.
1101          */
1102         .rmdir                  = xfs_vn_unlink,
1103         .mknod                  = xfs_vn_mknod,
1104         .rename                 = xfs_vn_rename,
1105         .get_acl                = xfs_get_acl,
1106         .set_acl                = xfs_set_acl,
1107         .getattr                = xfs_vn_getattr,
1108         .setattr                = xfs_vn_setattr,
1109         .setxattr               = generic_setxattr,
1110         .getxattr               = generic_getxattr,
1111         .removexattr            = generic_removexattr,
1112         .listxattr              = xfs_vn_listxattr,
1113         .update_time            = xfs_vn_update_time,
1114 };
1115
1116 static const struct inode_operations xfs_symlink_inode_operations = {
1117         .readlink               = generic_readlink,
1118         .follow_link            = xfs_vn_follow_link,
1119         .put_link               = kfree_put_link,
1120         .getattr                = xfs_vn_getattr,
1121         .setattr                = xfs_vn_setattr,
1122         .setxattr               = generic_setxattr,
1123         .getxattr               = generic_getxattr,
1124         .removexattr            = generic_removexattr,
1125         .listxattr              = xfs_vn_listxattr,
1126         .update_time            = xfs_vn_update_time,
1127 };
1128
1129 STATIC void
1130 xfs_diflags_to_iflags(
1131         struct inode            *inode,
1132         struct xfs_inode        *ip)
1133 {
1134         if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE)
1135                 inode->i_flags |= S_IMMUTABLE;
1136         else
1137                 inode->i_flags &= ~S_IMMUTABLE;
1138         if (ip->i_d.di_flags & XFS_DIFLAG_APPEND)
1139                 inode->i_flags |= S_APPEND;
1140         else
1141                 inode->i_flags &= ~S_APPEND;
1142         if (ip->i_d.di_flags & XFS_DIFLAG_SYNC)
1143                 inode->i_flags |= S_SYNC;
1144         else
1145                 inode->i_flags &= ~S_SYNC;
1146         if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME)
1147                 inode->i_flags |= S_NOATIME;
1148         else
1149                 inode->i_flags &= ~S_NOATIME;
1150 }
1151
1152 /*
1153  * Initialize the Linux inode, set up the operation vectors and
1154  * unlock the inode.
1155  *
1156  * When reading existing inodes from disk this is called directly
1157  * from xfs_iget, when creating a new inode it is called from
1158  * xfs_ialloc after setting up the inode.
1159  *
1160  * We are always called with an uninitialised linux inode here.
1161  * We need to initialise the necessary fields and take a reference
1162  * on it.
1163  */
1164 void
1165 xfs_setup_inode(
1166         struct xfs_inode        *ip)
1167 {
1168         struct inode            *inode = &ip->i_vnode;
1169         gfp_t                   gfp_mask;
1170
1171         inode->i_ino = ip->i_ino;
1172         inode->i_state = I_NEW;
1173
1174         inode_sb_list_add(inode);
1175         /* make the inode look hashed for the writeback code */
1176         hlist_add_fake(&inode->i_hash);
1177
1178         inode->i_mode   = ip->i_d.di_mode;
1179         set_nlink(inode, ip->i_d.di_nlink);
1180         inode->i_uid    = xfs_uid_to_kuid(ip->i_d.di_uid);
1181         inode->i_gid    = xfs_gid_to_kgid(ip->i_d.di_gid);
1182
1183         switch (inode->i_mode & S_IFMT) {
1184         case S_IFBLK:
1185         case S_IFCHR:
1186                 inode->i_rdev =
1187                         MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
1188                               sysv_minor(ip->i_df.if_u2.if_rdev));
1189                 break;
1190         default:
1191                 inode->i_rdev = 0;
1192                 break;
1193         }
1194
1195         inode->i_generation = ip->i_d.di_gen;
1196         i_size_write(inode, ip->i_d.di_size);
1197         inode->i_atime.tv_sec   = ip->i_d.di_atime.t_sec;
1198         inode->i_atime.tv_nsec  = ip->i_d.di_atime.t_nsec;
1199         inode->i_mtime.tv_sec   = ip->i_d.di_mtime.t_sec;
1200         inode->i_mtime.tv_nsec  = ip->i_d.di_mtime.t_nsec;
1201         inode->i_ctime.tv_sec   = ip->i_d.di_ctime.t_sec;
1202         inode->i_ctime.tv_nsec  = ip->i_d.di_ctime.t_nsec;
1203         xfs_diflags_to_iflags(inode, ip);
1204
1205         ip->d_ops = ip->i_mount->m_nondir_inode_ops;
1206         lockdep_set_class(&ip->i_lock.mr_lock, &xfs_nondir_ilock_class);
1207         switch (inode->i_mode & S_IFMT) {
1208         case S_IFREG:
1209                 inode->i_op = &xfs_inode_operations;
1210                 inode->i_fop = &xfs_file_operations;
1211                 inode->i_mapping->a_ops = &xfs_address_space_operations;
1212                 break;
1213         case S_IFDIR:
1214                 lockdep_set_class(&ip->i_lock.mr_lock, &xfs_dir_ilock_class);
1215                 if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb))
1216                         inode->i_op = &xfs_dir_ci_inode_operations;
1217                 else
1218                         inode->i_op = &xfs_dir_inode_operations;
1219                 inode->i_fop = &xfs_dir_file_operations;
1220                 ip->d_ops = ip->i_mount->m_dir_inode_ops;
1221                 break;
1222         case S_IFLNK:
1223                 inode->i_op = &xfs_symlink_inode_operations;
1224                 if (!(ip->i_df.if_flags & XFS_IFINLINE))
1225                         inode->i_mapping->a_ops = &xfs_address_space_operations;
1226                 break;
1227         default:
1228                 inode->i_op = &xfs_inode_operations;
1229                 init_special_inode(inode, inode->i_mode, inode->i_rdev);
1230                 break;
1231         }
1232
1233         /*
1234          * Ensure all page cache allocations are done from GFP_NOFS context to
1235          * prevent direct reclaim recursion back into the filesystem and blowing
1236          * stacks or deadlocking.
1237          */
1238         gfp_mask = mapping_gfp_mask(inode->i_mapping);
1239         mapping_set_gfp_mask(inode->i_mapping, (gfp_mask & ~(__GFP_FS)));
1240
1241         /*
1242          * If there is no attribute fork no ACL can exist on this inode,
1243          * and it can't have any file capabilities attached to it either.
1244          */
1245         if (!XFS_IFORK_Q(ip)) {
1246                 inode_has_no_xattr(inode);
1247                 cache_no_acl(inode);
1248         }
1249
1250         xfs_iflags_clear(ip, XFS_INEW);
1251         barrier();
1252
1253         unlock_new_inode(inode);
1254 }