diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-11 12:51:40 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-11 12:51:40 -0400 |
| commit | 10a5fd5e6b7e2d464c9f95f67cade4ddbd63f4e1 (patch) | |
| tree | eddf856286234f28cac747d20eb59d918e1bc8b5 /fs/xfs | |
| parent | c2a6585296009379e0f4eff39cdcb108b457ebf2 (diff) | |
| parent | a145410dccdb44f81d3b56763ef9b6f721f4e47c (diff) | |
Merge branch 'master'
Conflicts:
drivers/scsi/libata-scsi.c
include/linux/libata.h
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 18 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 2 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 8 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 3 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.h | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.h | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_ialloc.c | 15 | ||||
| -rw-r--r-- | fs/xfs/xfs_iget.c | 29 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.c | 27 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.h | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_mount.c | 2 |
12 files changed, 63 insertions, 54 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 6cbbd165c60d..4d191ef39b67 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
| @@ -870,12 +870,14 @@ xfs_page_state_convert( | |||
| 870 | pgoff_t end_index, last_index, tlast; | 870 | pgoff_t end_index, last_index, tlast; |
| 871 | ssize_t size, len; | 871 | ssize_t size, len; |
| 872 | int flags, err, iomap_valid = 0, uptodate = 1; | 872 | int flags, err, iomap_valid = 0, uptodate = 1; |
| 873 | int page_dirty, count = 0, trylock_flag = 0; | 873 | int page_dirty, count = 0; |
| 874 | int trylock = 0; | ||
| 874 | int all_bh = unmapped; | 875 | int all_bh = unmapped; |
| 875 | 876 | ||
| 876 | /* wait for other IO threads? */ | 877 | if (startio) { |
| 877 | if (startio && (wbc->sync_mode == WB_SYNC_NONE && wbc->nonblocking)) | 878 | if (wbc->sync_mode == WB_SYNC_NONE && wbc->nonblocking) |
| 878 | trylock_flag |= BMAPI_TRYLOCK; | 879 | trylock |= BMAPI_TRYLOCK; |
| 880 | } | ||
| 879 | 881 | ||
| 880 | /* Is this page beyond the end of the file? */ | 882 | /* Is this page beyond the end of the file? */ |
| 881 | offset = i_size_read(inode); | 883 | offset = i_size_read(inode); |
| @@ -956,15 +958,13 @@ xfs_page_state_convert( | |||
| 956 | 958 | ||
| 957 | if (buffer_unwritten(bh)) { | 959 | if (buffer_unwritten(bh)) { |
| 958 | type = IOMAP_UNWRITTEN; | 960 | type = IOMAP_UNWRITTEN; |
| 959 | flags = BMAPI_WRITE|BMAPI_IGNSTATE; | 961 | flags = BMAPI_WRITE | BMAPI_IGNSTATE; |
| 960 | } else if (buffer_delay(bh)) { | 962 | } else if (buffer_delay(bh)) { |
| 961 | type = IOMAP_DELAY; | 963 | type = IOMAP_DELAY; |
| 962 | flags = BMAPI_ALLOCATE; | 964 | flags = BMAPI_ALLOCATE | trylock; |
| 963 | if (!startio) | ||
| 964 | flags |= trylock_flag; | ||
| 965 | } else { | 965 | } else { |
| 966 | type = IOMAP_NEW; | 966 | type = IOMAP_NEW; |
| 967 | flags = BMAPI_WRITE|BMAPI_MMAP; | 967 | flags = BMAPI_WRITE | BMAPI_MMAP; |
| 968 | } | 968 | } |
| 969 | 969 | ||
| 970 | if (!iomap_valid) { | 970 | if (!iomap_valid) { |
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index 9fb0312665ca..26fed0756f01 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
| @@ -182,7 +182,7 @@ free_address( | |||
| 182 | { | 182 | { |
| 183 | a_list_t *aentry; | 183 | a_list_t *aentry; |
| 184 | 184 | ||
| 185 | aentry = kmalloc(sizeof(a_list_t), GFP_ATOMIC & ~__GFP_HIGH); | 185 | aentry = kmalloc(sizeof(a_list_t), GFP_NOWAIT); |
| 186 | if (likely(aentry)) { | 186 | if (likely(aentry)) { |
| 187 | spin_lock(&as_lock); | 187 | spin_lock(&as_lock); |
| 188 | aentry->next = as_free_head; | 188 | aentry->next = as_free_head; |
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index ae4c4754ed31..269721af02f3 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
| @@ -252,7 +252,7 @@ xfs_file_sendfile_invis( | |||
| 252 | STATIC ssize_t | 252 | STATIC ssize_t |
| 253 | xfs_file_splice_read( | 253 | xfs_file_splice_read( |
| 254 | struct file *infilp, | 254 | struct file *infilp, |
| 255 | struct inode *pipe, | 255 | struct pipe_inode_info *pipe, |
| 256 | size_t len, | 256 | size_t len, |
| 257 | unsigned int flags) | 257 | unsigned int flags) |
| 258 | { | 258 | { |
| @@ -266,7 +266,7 @@ xfs_file_splice_read( | |||
| 266 | STATIC ssize_t | 266 | STATIC ssize_t |
| 267 | xfs_file_splice_read_invis( | 267 | xfs_file_splice_read_invis( |
| 268 | struct file *infilp, | 268 | struct file *infilp, |
| 269 | struct inode *pipe, | 269 | struct pipe_inode_info *pipe, |
| 270 | size_t len, | 270 | size_t len, |
| 271 | unsigned int flags) | 271 | unsigned int flags) |
| 272 | { | 272 | { |
| @@ -279,7 +279,7 @@ xfs_file_splice_read_invis( | |||
| 279 | 279 | ||
| 280 | STATIC ssize_t | 280 | STATIC ssize_t |
| 281 | xfs_file_splice_write( | 281 | xfs_file_splice_write( |
| 282 | struct inode *pipe, | 282 | struct pipe_inode_info *pipe, |
| 283 | struct file *outfilp, | 283 | struct file *outfilp, |
| 284 | size_t len, | 284 | size_t len, |
| 285 | unsigned int flags) | 285 | unsigned int flags) |
| @@ -293,7 +293,7 @@ xfs_file_splice_write( | |||
| 293 | 293 | ||
| 294 | STATIC ssize_t | 294 | STATIC ssize_t |
| 295 | xfs_file_splice_write_invis( | 295 | xfs_file_splice_write_invis( |
| 296 | struct inode *pipe, | 296 | struct pipe_inode_info *pipe, |
| 297 | struct file *outfilp, | 297 | struct file *outfilp, |
| 298 | size_t len, | 298 | size_t len, |
| 299 | unsigned int flags) | 299 | unsigned int flags) |
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 149237304fb6..2e2e275c786f 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
| @@ -673,8 +673,7 @@ xfs_vn_setattr( | |||
| 673 | if (ia_valid & ATTR_ATIME) { | 673 | if (ia_valid & ATTR_ATIME) { |
| 674 | vattr.va_mask |= XFS_AT_ATIME; | 674 | vattr.va_mask |= XFS_AT_ATIME; |
| 675 | vattr.va_atime = attr->ia_atime; | 675 | vattr.va_atime = attr->ia_atime; |
| 676 | if (ia_valid & ATTR_ATIME_SET) | 676 | inode->i_atime = attr->ia_atime; |
| 677 | inode->i_atime = attr->ia_atime; | ||
| 678 | } | 677 | } |
| 679 | if (ia_valid & ATTR_MTIME) { | 678 | if (ia_valid & ATTR_MTIME) { |
| 680 | vattr.va_mask |= XFS_AT_MTIME; | 679 | vattr.va_mask |= XFS_AT_MTIME; |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index 90cd314acbaa..74a52937f208 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
| @@ -338,7 +338,7 @@ ssize_t | |||
| 338 | xfs_splice_read( | 338 | xfs_splice_read( |
| 339 | bhv_desc_t *bdp, | 339 | bhv_desc_t *bdp, |
| 340 | struct file *infilp, | 340 | struct file *infilp, |
| 341 | struct inode *pipe, | 341 | struct pipe_inode_info *pipe, |
| 342 | size_t count, | 342 | size_t count, |
| 343 | int flags, | 343 | int flags, |
| 344 | int ioflags, | 344 | int ioflags, |
| @@ -380,7 +380,7 @@ xfs_splice_read( | |||
| 380 | ssize_t | 380 | ssize_t |
| 381 | xfs_splice_write( | 381 | xfs_splice_write( |
| 382 | bhv_desc_t *bdp, | 382 | bhv_desc_t *bdp, |
| 383 | struct inode *pipe, | 383 | struct pipe_inode_info *pipe, |
| 384 | struct file *outfilp, | 384 | struct file *outfilp, |
| 385 | size_t count, | 385 | size_t count, |
| 386 | int flags, | 386 | int flags, |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.h b/fs/xfs/linux-2.6/xfs_lrw.h index eaa5659713fb..55c689a86ad2 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.h +++ b/fs/xfs/linux-2.6/xfs_lrw.h | |||
| @@ -94,9 +94,9 @@ extern ssize_t xfs_sendfile(struct bhv_desc *, struct file *, | |||
| 94 | loff_t *, int, size_t, read_actor_t, | 94 | loff_t *, int, size_t, read_actor_t, |
| 95 | void *, struct cred *); | 95 | void *, struct cred *); |
| 96 | extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, | 96 | extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, |
| 97 | struct inode *, size_t, int, int, | 97 | struct pipe_inode_info *, size_t, int, int, |
| 98 | struct cred *); | 98 | struct cred *); |
| 99 | extern ssize_t xfs_splice_write(struct bhv_desc *, struct inode *, | 99 | extern ssize_t xfs_splice_write(struct bhv_desc *, struct pipe_inode_info *, |
| 100 | struct file *, size_t, int, int, | 100 | struct file *, size_t, int, int, |
| 101 | struct cred *); | 101 | struct cred *); |
| 102 | 102 | ||
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index 6f1c79a28f8b..88b09f186289 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
| @@ -174,9 +174,9 @@ typedef ssize_t (*vop_sendfile_t)(bhv_desc_t *, struct file *, | |||
| 174 | loff_t *, int, size_t, read_actor_t, | 174 | loff_t *, int, size_t, read_actor_t, |
| 175 | void *, struct cred *); | 175 | void *, struct cred *); |
| 176 | typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, | 176 | typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, |
| 177 | struct inode *, size_t, int, int, | 177 | struct pipe_inode_info *, size_t, int, int, |
| 178 | struct cred *); | 178 | struct cred *); |
| 179 | typedef ssize_t (*vop_splice_write_t)(bhv_desc_t *, struct inode *, | 179 | typedef ssize_t (*vop_splice_write_t)(bhv_desc_t *, struct pipe_inode_info *, |
| 180 | struct file *, size_t, int, int, | 180 | struct file *, size_t, int, int, |
| 181 | struct cred *); | 181 | struct cred *); |
| 182 | typedef int (*vop_ioctl_t)(bhv_desc_t *, struct inode *, struct file *, | 182 | typedef int (*vop_ioctl_t)(bhv_desc_t *, struct inode *, struct file *, |
diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index 4eeb856183b1..deddbd03c166 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c | |||
| @@ -158,9 +158,10 @@ xfs_ialloc_ag_alloc( | |||
| 158 | */ | 158 | */ |
| 159 | agi = XFS_BUF_TO_AGI(agbp); | 159 | agi = XFS_BUF_TO_AGI(agbp); |
| 160 | newino = be32_to_cpu(agi->agi_newino); | 160 | newino = be32_to_cpu(agi->agi_newino); |
| 161 | if(likely(newino != NULLAGINO)) { | 161 | args.agbno = XFS_AGINO_TO_AGBNO(args.mp, newino) + |
| 162 | args.agbno = XFS_AGINO_TO_AGBNO(args.mp, newino) + | 162 | XFS_IALLOC_BLOCKS(args.mp); |
| 163 | XFS_IALLOC_BLOCKS(args.mp); | 163 | if (likely(newino != NULLAGINO && |
| 164 | (args.agbno < be32_to_cpu(agi->agi_length)))) { | ||
| 164 | args.fsbno = XFS_AGB_TO_FSB(args.mp, | 165 | args.fsbno = XFS_AGB_TO_FSB(args.mp, |
| 165 | be32_to_cpu(agi->agi_seqno), args.agbno); | 166 | be32_to_cpu(agi->agi_seqno), args.agbno); |
| 166 | args.type = XFS_ALLOCTYPE_THIS_BNO; | 167 | args.type = XFS_ALLOCTYPE_THIS_BNO; |
| @@ -182,8 +183,8 @@ xfs_ialloc_ag_alloc( | |||
| 182 | * Set the alignment for the allocation. | 183 | * Set the alignment for the allocation. |
| 183 | * If stripe alignment is turned on then align at stripe unit | 184 | * If stripe alignment is turned on then align at stripe unit |
| 184 | * boundary. | 185 | * boundary. |
| 185 | * If the cluster size is smaller than a filesystem block | 186 | * If the cluster size is smaller than a filesystem block |
| 186 | * then we're doing I/O for inodes in filesystem block size | 187 | * then we're doing I/O for inodes in filesystem block size |
| 187 | * pieces, so don't need alignment anyway. | 188 | * pieces, so don't need alignment anyway. |
| 188 | */ | 189 | */ |
| 189 | isaligned = 0; | 190 | isaligned = 0; |
| @@ -192,7 +193,7 @@ xfs_ialloc_ag_alloc( | |||
| 192 | args.alignment = args.mp->m_dalign; | 193 | args.alignment = args.mp->m_dalign; |
| 193 | isaligned = 1; | 194 | isaligned = 1; |
| 194 | } else if (XFS_SB_VERSION_HASALIGN(&args.mp->m_sb) && | 195 | } else if (XFS_SB_VERSION_HASALIGN(&args.mp->m_sb) && |
| 195 | args.mp->m_sb.sb_inoalignmt >= | 196 | args.mp->m_sb.sb_inoalignmt >= |
| 196 | XFS_B_TO_FSBT(args.mp, | 197 | XFS_B_TO_FSBT(args.mp, |
| 197 | XFS_INODE_CLUSTER_SIZE(args.mp))) | 198 | XFS_INODE_CLUSTER_SIZE(args.mp))) |
| 198 | args.alignment = args.mp->m_sb.sb_inoalignmt; | 199 | args.alignment = args.mp->m_sb.sb_inoalignmt; |
| @@ -220,7 +221,7 @@ xfs_ialloc_ag_alloc( | |||
| 220 | if ((error = xfs_alloc_vextent(&args))) | 221 | if ((error = xfs_alloc_vextent(&args))) |
| 221 | return error; | 222 | return error; |
| 222 | } | 223 | } |
| 223 | 224 | ||
| 224 | /* | 225 | /* |
| 225 | * If stripe alignment is turned on, then try again with cluster | 226 | * If stripe alignment is turned on, then try again with cluster |
| 226 | * alignment. | 227 | * alignment. |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index bb33113eef9f..b53854325266 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
| @@ -421,7 +421,10 @@ finish_inode: | |||
| 421 | ip->i_chash = chlnew; | 421 | ip->i_chash = chlnew; |
| 422 | chlnew->chl_ip = ip; | 422 | chlnew->chl_ip = ip; |
| 423 | chlnew->chl_blkno = ip->i_blkno; | 423 | chlnew->chl_blkno = ip->i_blkno; |
| 424 | if (ch->ch_list) | ||
| 425 | ch->ch_list->chl_prev = chlnew; | ||
| 424 | chlnew->chl_next = ch->ch_list; | 426 | chlnew->chl_next = ch->ch_list; |
| 427 | chlnew->chl_prev = NULL; | ||
| 425 | ch->ch_list = chlnew; | 428 | ch->ch_list = chlnew; |
| 426 | chlnew = NULL; | 429 | chlnew = NULL; |
| 427 | } | 430 | } |
| @@ -723,23 +726,15 @@ xfs_iextract( | |||
| 723 | ASSERT(ip->i_cnext == ip && ip->i_cprev == ip); | 726 | ASSERT(ip->i_cnext == ip && ip->i_cprev == ip); |
| 724 | ASSERT(ip->i_chash != NULL); | 727 | ASSERT(ip->i_chash != NULL); |
| 725 | chm=NULL; | 728 | chm=NULL; |
| 726 | for (chl = ch->ch_list; chl != NULL; chl = chl->chl_next) { | 729 | chl = ip->i_chash; |
| 727 | if (chl->chl_blkno == ip->i_blkno) { | 730 | if (chl->chl_prev) |
| 728 | if (chm == NULL) { | 731 | chl->chl_prev->chl_next = chl->chl_next; |
| 729 | /* first item on the list */ | 732 | else |
| 730 | ch->ch_list = chl->chl_next; | 733 | ch->ch_list = chl->chl_next; |
| 731 | } else { | 734 | if (chl->chl_next) |
| 732 | chm->chl_next = chl->chl_next; | 735 | chl->chl_next->chl_prev = chl->chl_prev; |
| 733 | } | 736 | kmem_zone_free(xfs_chashlist_zone, chl); |
| 734 | kmem_zone_free(xfs_chashlist_zone, chl); | 737 | } else { |
| 735 | break; | ||
| 736 | } else { | ||
| 737 | ASSERT(chl->chl_ip != ip); | ||
| 738 | chm = chl; | ||
| 739 | } | ||
| 740 | } | ||
| 741 | ASSERT_ALWAYS(chl != NULL); | ||
| 742 | } else { | ||
| 743 | /* delete one inode from a non-empty list */ | 738 | /* delete one inode from a non-empty list */ |
| 744 | iq = ip->i_cnext; | 739 | iq = ip->i_cnext; |
| 745 | iq->i_cprev = ip->i_cprev; | 740 | iq->i_cprev = ip->i_cprev; |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 48146bdc6bdd..94b60dd03801 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -2732,16 +2732,29 @@ xfs_iunpin( | |||
| 2732 | ASSERT(atomic_read(&ip->i_pincount) > 0); | 2732 | ASSERT(atomic_read(&ip->i_pincount) > 0); |
| 2733 | 2733 | ||
| 2734 | if (atomic_dec_and_test(&ip->i_pincount)) { | 2734 | if (atomic_dec_and_test(&ip->i_pincount)) { |
| 2735 | vnode_t *vp = XFS_ITOV_NULL(ip); | 2735 | /* |
| 2736 | * If the inode is currently being reclaimed, the | ||
| 2737 | * linux inode _and_ the xfs vnode may have been | ||
| 2738 | * freed so we cannot reference either of them safely. | ||
| 2739 | * Hence we should not try to do anything to them | ||
| 2740 | * if the xfs inode is currently in the reclaim | ||
| 2741 | * path. | ||
| 2742 | * | ||
| 2743 | * However, we still need to issue the unpin wakeup | ||
| 2744 | * call as the inode reclaim may be blocked waiting for | ||
| 2745 | * the inode to become unpinned. | ||
| 2746 | */ | ||
| 2747 | if (!(ip->i_flags & (XFS_IRECLAIM|XFS_IRECLAIMABLE))) { | ||
| 2748 | vnode_t *vp = XFS_ITOV_NULL(ip); | ||
| 2736 | 2749 | ||
| 2737 | /* make sync come back and flush this inode */ | 2750 | /* make sync come back and flush this inode */ |
| 2738 | if (vp) { | 2751 | if (vp) { |
| 2739 | struct inode *inode = vn_to_inode(vp); | 2752 | struct inode *inode = vn_to_inode(vp); |
| 2740 | 2753 | ||
| 2741 | if (!(inode->i_state & I_NEW)) | 2754 | if (!(inode->i_state & I_NEW)) |
| 2742 | mark_inode_dirty_sync(inode); | 2755 | mark_inode_dirty_sync(inode); |
| 2756 | } | ||
| 2743 | } | 2757 | } |
| 2744 | |||
| 2745 | wake_up(&ip->i_ipin_wait); | 2758 | wake_up(&ip->i_ipin_wait); |
| 2746 | } | 2759 | } |
| 2747 | } | 2760 | } |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 39ef9c36ea55..3b544db1790b 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
| @@ -189,6 +189,7 @@ typedef struct xfs_ihash { | |||
| 189 | */ | 189 | */ |
| 190 | typedef struct xfs_chashlist { | 190 | typedef struct xfs_chashlist { |
| 191 | struct xfs_chashlist *chl_next; | 191 | struct xfs_chashlist *chl_next; |
| 192 | struct xfs_chashlist *chl_prev; | ||
| 192 | struct xfs_inode *chl_ip; | 193 | struct xfs_inode *chl_ip; |
| 193 | xfs_daddr_t chl_blkno; /* starting block number of | 194 | xfs_daddr_t chl_blkno; /* starting block number of |
| 194 | * the cluster */ | 195 | * the cluster */ |
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 049fabb7f7e0..c0b1c2906880 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
| @@ -270,7 +270,7 @@ xfs_mount_validate_sb( | |||
| 270 | (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || | 270 | (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || |
| 271 | (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || | 271 | (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || |
| 272 | (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) || | 272 | (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) || |
| 273 | (sbp->sb_imax_pct > 100 || sbp->sb_imax_pct < 1))) { | 273 | (sbp->sb_imax_pct > 100 /* zero sb_imax_pct is valid */))) { |
| 274 | xfs_fs_mount_cmn_err(flags, "SB sanity check 1 failed"); | 274 | xfs_fs_mount_cmn_err(flags, "SB sanity check 1 failed"); |
| 275 | return XFS_ERROR(EFSCORRUPTED); | 275 | return XFS_ERROR(EFSCORRUPTED); |
| 276 | } | 276 | } |
