Merge tag 'sunxi-fixes-for-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / fs / inode.c
index ea15c6d..7d57068 100644 (file)
@@ -1599,25 +1599,31 @@ retry:
 }
 EXPORT_SYMBOL(iput);
 
+#ifdef CONFIG_BLOCK
 /**
  *     bmap    - find a block number in a file
- *     @inode: inode of file
- *     @block: block to find
- *
- *     Returns the block number on the device holding the inode that
- *     is the disk block number for the block of the file requested.
- *     That is, asked for block 4 of inode 1 the function will return the
- *     disk block relative to the disk start that holds that block of the
- *     file.
+ *     @inode:  inode owning the block number being requested
+ *     @block: pointer containing the block to find
+ *
+ *     Replaces the value in *block with the block number on the device holding
+ *     corresponding to the requested block number in the file.
+ *     That is, asked for block 4 of inode 1 the function will replace the
+ *     4 in *block, with disk block relative to the disk start that holds that
+ *     block of the file.
+ *
+ *     Returns -EINVAL in case of error, 0 otherwise. If mapping falls into a
+ *     hole, returns 0 and *block is also set to 0.
  */
-sector_t bmap(struct inode *inode, sector_t block)
+int bmap(struct inode *inode, sector_t *block)
 {
-       sector_t res = 0;
-       if (inode->i_mapping->a_ops->bmap)
-               res = inode->i_mapping->a_ops->bmap(inode->i_mapping, block);
-       return res;
+       if (!inode->i_mapping->a_ops->bmap)
+               return -EINVAL;
+
+       *block = inode->i_mapping->a_ops->bmap(inode->i_mapping, *block);
+       return 0;
 }
 EXPORT_SYMBOL(bmap);
+#endif
 
 /*
  * With relative atime, only update atime if the previous atime is
@@ -1683,12 +1689,9 @@ EXPORT_SYMBOL(generic_update_time);
  */
 static int update_time(struct inode *inode, struct timespec64 *time, int flags)
 {
-       int (*update_time)(struct inode *, struct timespec64 *, int);
-
-       update_time = inode->i_op->update_time ? inode->i_op->update_time :
-               generic_update_time;
-
-       return update_time(inode, time, flags);
+       if (inode->i_op->update_time)
+               return inode->i_op->update_time(inode, time, flags);
+       return generic_update_time(inode, time, flags);
 }
 
 /**
@@ -2153,30 +2156,6 @@ void inode_nohighmem(struct inode *inode)
 }
 EXPORT_SYMBOL(inode_nohighmem);
 
-/**
- * timespec64_trunc - Truncate timespec64 to a granularity
- * @t: Timespec64
- * @gran: Granularity in ns.
- *
- * Truncate a timespec64 to a granularity. Always rounds down. gran must
- * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).
- */
-struct timespec64 timespec64_trunc(struct timespec64 t, unsigned gran)
-{
-       /* Avoid division in the common cases 1 ns and 1 s. */
-       if (gran == 1) {
-               /* nothing */
-       } else if (gran == NSEC_PER_SEC) {
-               t.tv_nsec = 0;
-       } else if (gran > 1 && gran < NSEC_PER_SEC) {
-               t.tv_nsec -= t.tv_nsec % gran;
-       } else {
-               WARN(1, "illegal file time granularity: %u", gran);
-       }
-       return t;
-}
-EXPORT_SYMBOL(timespec64_trunc);
-
 /**
  * timestamp_truncate - Truncate timespec to a granularity
  * @t: Timespec